diff --git a/.config/prisma.ts b/.config/prisma.ts new file mode 100644 index 000000000..64691136c --- /dev/null +++ b/.config/prisma.ts @@ -0,0 +1,14 @@ +import { defineConfig } from '@prisma/config'; +import { config } from 'dotenv'; +import { expand } from 'dotenv-expand'; +import { join } from 'node:path'; + +expand(config({ quiet: true })); + +export default defineConfig({ + migrations: { + path: join(__dirname, '..', 'prisma', 'migrations'), + seed: `node ${join(__dirname, '..', 'prisma', 'seed.mts')}` + }, + schema: join(__dirname, '..', 'prisma', 'schema.prisma') +}); diff --git a/CHANGELOG.md b/CHANGELOG.md index 48d622193..a0beadc0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,46 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 2.211.0-beta.0 - 2025-10-24 + +### Added + +- Extended the export functionality by the user account’s performance calculation type +- Added a user detail dialog to the users section of the admin control panel + +### Changed + +- Localized the number formatting in the static portfolio analysis rule: _Liquidity_ (Buying Power) +- Moved the _Prisma Configuration File_ from `prisma.config.ts` to `.config/prisma.ts` +- Improved the language localization for German (`de`) +- Upgraded `prisma` from version `6.17.1` to `6.18.0` +- Upgraded `tablemark` from version `3.1.0` to `4.1.0` + +### Fixed + +- Fixed the style in the footer row of the accounts table +- Fixed the rendering of names and symbols for custom assets in the import activities dialog + +## 2.210.1 - 2025-10-22 + +### Added + +- Added support for data gathering by date range in the asset profile details dialog of the admin control panel + +### Changed + +- Extracted the portfolio filter form of the assistant to a reusable component +- Formatted the holdings table in the _Copy AI prompt to clipboard for analysis_ action on the analysis page (experimental) +- Formatted the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental) +- Reverted the explicit configuration of the _Redis_ address family in the job queue module +- Improved the language localization for German (`de`) +- Upgraded `ioredis` from version `5.6.1` to `5.8.2` + +### Fixed + +- Fixed the enter key press to submit the form of the login with access token dialog +- Fixed an issue in the database seeding process caused by unresolved environment variables in `DATABASE_URL` + ## 2.209.0 - 2025-10-18 ### Added @@ -47,7 +87,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Removed the deprecated endpoint `GET api/v1/portfolio/position/:dataSource/:symbol` - Removed the deprecated endpoint `PUT api/v1/portfolio/position/:dataSource/:symbol/tags` - Improved the language localization for German (`de`) -- Upgraded `prisma` from version `6.16.1` to `6.16.3` +- Upgraded `prisma` from version `6.16.1` to `6.17.1` ### Fixed diff --git a/Dockerfile b/Dockerfile index be1bb53ea..5beaf6e03 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,11 +13,11 @@ RUN apt-get update && apt-get install -y --no-install-suggests \ # Only add basic files without the application itself to avoid rebuilding # layers when files (package.json etc.) have not changed +COPY ./.config .config/ COPY ./CHANGELOG.md CHANGELOG.md COPY ./LICENSE LICENSE COPY ./package.json package.json COPY ./package-lock.json package-lock.json -COPY ./prisma.config.ts prisma.config.ts COPY ./prisma/schema.prisma prisma/ RUN npm install @@ -44,7 +44,7 @@ WORKDIR /ghostfolio/dist/apps/api COPY ./package-lock.json /ghostfolio/dist/apps/api/ RUN npm install -COPY prisma.config.ts /ghostfolio/dist/apps/api/ +COPY .config /ghostfolio/dist/apps/api/.config/ COPY prisma /ghostfolio/dist/apps/api/prisma/ # Overwrite the generated package.json with the original one to ensure having diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 66f8483b4..d7c4c5d3d 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -169,7 +169,7 @@ export class AdminController { let date: Date; if (dateRange) { - const { startDate } = getIntervalFromDateRange(dateRange, new Date()); + const { startDate } = getIntervalFromDateRange(dateRange); date = startDate; } diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index 86ceede28..5ec148558 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -71,7 +71,6 @@ import { UserModule } from './user/user.module'; BullModule.forRoot({ redis: { db: parseInt(process.env.REDIS_DB ?? '0', 10), - family: 0, host: process.env.REDIS_HOST, password: process.env.REDIS_PASSWORD, port: parseInt(process.env.REDIS_PORT ?? '6379', 10) diff --git a/apps/api/src/app/asset/asset.controller.ts b/apps/api/src/app/asset/asset.controller.ts index 828320f82..3b2031084 100644 --- a/apps/api/src/app/asset/asset.controller.ts +++ b/apps/api/src/app/asset/asset.controller.ts @@ -1,7 +1,7 @@ import { AdminService } from '@ghostfolio/api/app/admin/admin.service'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor'; -import type { AdminMarketDataDetails } from '@ghostfolio/common/interfaces'; +import type { AssetResponse } from '@ghostfolio/common/interfaces'; import { Controller, Get, Param, UseInterceptors } from '@nestjs/common'; import { DataSource } from '@prisma/client'; @@ -17,7 +17,7 @@ export class AssetController { public async getAsset( @Param('dataSource') dataSource: DataSource, @Param('symbol') symbol: string - ): Promise { + ): Promise { const { assetProfile, marketData } = await this.adminService.getMarketDataBySymbol({ dataSource, symbol }); diff --git a/apps/api/src/app/endpoints/ai/ai.service.ts b/apps/api/src/app/endpoints/ai/ai.service.ts index b479d74ea..4cc4fde65 100644 --- a/apps/api/src/app/endpoints/ai/ai.service.ts +++ b/apps/api/src/app/endpoints/ai/ai.service.ts @@ -10,6 +10,7 @@ import type { AiPromptMode } from '@ghostfolio/common/types'; import { Injectable } from '@nestjs/common'; import { createOpenRouter } from '@openrouter/ai-sdk-provider'; import { generateText } from 'ai'; +import type { ColumnDescriptor } from 'tablemark'; @Injectable() export class AiService { @@ -58,34 +59,57 @@ export class AiService { userId }); - const holdingsTable = [ - '| Name | Symbol | Currency | Asset Class | Asset Sub Class | Allocation in Percentage |', - '| --- | --- | --- | --- | --- | --- |', - ...Object.values(holdings) - .sort((a, b) => { - return b.allocationInPercentage - a.allocationInPercentage; - }) - .map( - ({ - allocationInPercentage, - assetClass, - assetSubClass, - currency, - name, - symbol - }) => { - return `| ${name} | ${symbol} | ${currency} | ${assetClass} | ${assetSubClass} | ${(allocationInPercentage * 100).toFixed(3)}% |`; - } - ) + const holdingsTableColumns: ColumnDescriptor[] = [ + { name: 'Name' }, + { name: 'Symbol' }, + { name: 'Currency' }, + { name: 'Asset Class' }, + { name: 'Asset Sub Class' }, + { align: 'right', name: 'Allocation in Percentage' } ]; + const holdingsTableRows = Object.values(holdings) + .sort((a, b) => { + return b.allocationInPercentage - a.allocationInPercentage; + }) + .map( + ({ + allocationInPercentage, + assetClass, + assetSubClass, + currency, + name, + symbol + }) => { + return { + Name: name, + Symbol: symbol, + Currency: currency, + 'Asset Class': assetClass ?? '', + 'Asset Sub Class': assetSubClass ?? '', + 'Allocation in Percentage': `${(allocationInPercentage * 100).toFixed(3)}%` + }; + } + ); + + // Dynamic import to load ESM module from CommonJS context + // eslint-disable-next-line @typescript-eslint/no-implied-eval + const dynamicImport = new Function('s', 'return import(s)') as ( + s: string + ) => Promise; + const { tablemark } = await dynamicImport('tablemark'); + + const holdingsTableString = tablemark(holdingsTableRows, { + columns: holdingsTableColumns + }); + if (mode === 'portfolio') { - return holdingsTable.join('\n'); + return holdingsTableString; } return [ `You are a neutral financial assistant. Please analyze the following investment portfolio (base currency being ${userCurrency}) in simple words.`, - ...holdingsTable, + holdingsTableString, 'Structure your answer with these sections:', 'Overview: Briefly summarize the portfolio’s composition and allocation rationale.', 'Risk Assessment: Identify potential risks, including market volatility, concentration, and sectoral imbalances.', diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts index ac5881c4d..1094858cb 100644 --- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts @@ -8,7 +8,7 @@ import { GetQuotesParams, GetSearchParams } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; -import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { @@ -114,7 +114,7 @@ export class GhostfolioService { try { const promises: Promise<{ - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; }>[] = []; for (const dataProviderService of this.getDataProviderServices()) { @@ -156,7 +156,7 @@ export class GhostfolioService { try { const promises: Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }>[] = []; for (const dataProviderService of this.getDataProviderServices()) { diff --git a/apps/api/src/app/exchange-rate/exchange-rate.controller.ts b/apps/api/src/app/exchange-rate/exchange-rate.controller.ts index a5b2823d5..fc9e61d61 100644 --- a/apps/api/src/app/exchange-rate/exchange-rate.controller.ts +++ b/apps/api/src/app/exchange-rate/exchange-rate.controller.ts @@ -1,5 +1,5 @@ import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; -import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { Controller, @@ -25,7 +25,7 @@ export class ExchangeRateController { public async getExchangeRate( @Param('dateString') dateString: string, @Param('symbol') symbol: string - ): Promise { + ): Promise { const date = parseISO(dateString); const exchangeRate = await this.exchangeRateService.getExchangeRate({ diff --git a/apps/api/src/app/export/export.controller.ts b/apps/api/src/app/export/export.controller.ts index 8fa2baa43..5446f8789 100644 --- a/apps/api/src/app/export/export.controller.ts +++ b/apps/api/src/app/export/export.controller.ts @@ -1,7 +1,7 @@ import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; import { ApiService } from '@ghostfolio/api/services/api/api.service'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import type { RequestWithUser } from '@ghostfolio/common/types'; import { @@ -35,7 +35,7 @@ export class ExportController { @Query('dataSource') filterByDataSource?: string, @Query('symbol') filterBySymbol?: string, @Query('tags') filterByTags?: string - ): Promise { + ): Promise { const activityIds = filterByActivityIds?.split(',') ?? []; const filters = this.apiService.buildFiltersFromQueryParams({ filterByAccounts, @@ -48,8 +48,8 @@ export class ExportController { return this.exportService.export({ activityIds, filters, - userCurrency: this.request.user.settings.settings.baseCurrency, - userId: this.request.user.id + userId: this.request.user.id, + userSettings: this.request.user.settings.settings }); } } diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts index 7d78bdf22..d07b199be 100644 --- a/apps/api/src/app/export/export.service.ts +++ b/apps/api/src/app/export/export.service.ts @@ -3,7 +3,11 @@ import { OrderService } from '@ghostfolio/api/app/order/order.service'; import { environment } from '@ghostfolio/api/environments/environment'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { TagService } from '@ghostfolio/api/services/tag/tag.service'; -import { Filter, Export } from '@ghostfolio/common/interfaces'; +import { + ExportResponse, + Filter, + UserSettings +} from '@ghostfolio/common/interfaces'; import { Injectable } from '@nestjs/common'; import { Platform, Prisma } from '@prisma/client'; @@ -21,14 +25,14 @@ export class ExportService { public async export({ activityIds, filters, - userCurrency, - userId + userId, + userSettings }: { activityIds?: string[]; filters?: Filter[]; - userCurrency: string; userId: string; - }): Promise { + userSettings: UserSettings; + }): Promise { const { ACCOUNT: filtersByAccount } = groupBy(filters, ({ type }) => { return type; }); @@ -36,11 +40,11 @@ export class ExportService { let { activities } = await this.orderService.getOrders({ filters, - userCurrency, userId, includeDrafts: true, sortColumn: 'date', sortDirection: 'asc', + userCurrency: userSettings?.baseCurrency, withExcludedAccountsAndActivities: true }); @@ -244,7 +248,10 @@ export class ExportService { } ), user: { - settings: { currency: userCurrency } + settings: { + currency: userSettings?.baseCurrency, + performanceCalculationType: userSettings?.performanceCalculationType + } } }; } diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index 2725747aa..2ec28365e 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/apps/api/src/app/import/import.service.ts @@ -539,6 +539,7 @@ export class ImportService { connectOrCreate: { create: { dataSource, + name, symbol, currency: assetProfile.currency, userId: dataSource === 'MANUAL' ? user.id : undefined @@ -746,10 +747,19 @@ export class ImportService { if (['FEE', 'INTEREST', 'LIABILITY'].includes(type)) { // Skip asset profile validation for FEE, INTEREST, and LIABILITY // as these activity types don't require asset profiles + const assetProfileInImport = assetProfilesWithMarketDataDto?.find( + (profile) => { + return ( + profile.dataSource === dataSource && profile.symbol === symbol + ); + } + ); + assetProfiles[getAssetProfileIdentifier({ dataSource, symbol })] = { currency, dataSource, - symbol + symbol, + name: assetProfileInImport?.name }; continue; diff --git a/apps/api/src/app/info/info.controller.ts b/apps/api/src/app/info/info.controller.ts index 67d4101a3..7011713dd 100644 --- a/apps/api/src/app/info/info.controller.ts +++ b/apps/api/src/app/info/info.controller.ts @@ -1,5 +1,5 @@ import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor'; -import { InfoItem } from '@ghostfolio/common/interfaces'; +import { InfoResponse } from '@ghostfolio/common/interfaces'; import { Controller, Get, UseInterceptors } from '@nestjs/common'; @@ -11,7 +11,7 @@ export class InfoController { @Get() @UseInterceptors(TransformDataSourceInResponseInterceptor) - public async getInfo(): Promise { + public async getInfo(): Promise { return this.infoService.get(); } } diff --git a/apps/api/src/app/order/create-order.dto.ts b/apps/api/src/app/order/create-order.dto.ts index ba7a1d868..fb4ac32dd 100644 --- a/apps/api/src/app/order/create-order.dto.ts +++ b/apps/api/src/app/order/create-order.dto.ts @@ -44,7 +44,8 @@ export class CreateOrderDto { customCurrency?: string; @IsEnum(DataSource) - dataSource: DataSource; + @IsOptional() // Optional for type FEE, INTEREST, and LIABILITY (default data source is resolved in the backend) + dataSource?: DataSource; @IsISO8601() @Validate(IsAfter1970Constraint) diff --git a/apps/api/src/app/order/interfaces/activities.interface.ts b/apps/api/src/app/order/interfaces/activities.interface.ts index 01a5a60f0..8c88cc2cf 100644 --- a/apps/api/src/app/order/interfaces/activities.interface.ts +++ b/apps/api/src/app/order/interfaces/activities.interface.ts @@ -3,11 +3,6 @@ import { AccountWithPlatform } from '@ghostfolio/common/types'; import { Order, Tag } from '@prisma/client'; -export interface Activities { - activities: Activity[]; - count: number; -} - export interface Activity extends Order { account?: AccountWithPlatform; error?: ActivityError; diff --git a/apps/api/src/app/order/order.controller.ts b/apps/api/src/app/order/order.controller.ts index ffed8ac2e..d6c231059 100644 --- a/apps/api/src/app/order/order.controller.ts +++ b/apps/api/src/app/order/order.controller.ts @@ -11,6 +11,10 @@ import { DATA_GATHERING_QUEUE_PRIORITY_HIGH, HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config'; +import { + ActivitiesResponse, + ActivityResponse +} from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; import type { DateRange, RequestWithUser } from '@ghostfolio/common/types'; @@ -36,7 +40,6 @@ import { parseISO } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { CreateOrderDto } from './create-order.dto'; -import { Activities, Activity } from './interfaces/activities.interface'; import { OrderService } from './order.service'; import { UpdateOrderDto } from './update-order.dto'; @@ -113,7 +116,7 @@ export class OrderController { @Query('symbol') filterBySymbol?: string, @Query('tags') filterByTags?: string, @Query('take') take?: number - ): Promise { + ): Promise { let endDate: Date; let startDate: Date; @@ -157,7 +160,7 @@ export class OrderController { public async getOrderById( @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, @Param('id') id: string - ): Promise { + ): Promise { const impersonationUserId = await this.impersonationService.validateImpersonationId(impersonationId); const userCurrency = this.request.user.settings.settings.baseCurrency; diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index 11579bbf1..e4c642977 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -14,6 +14,7 @@ import { } from '@ghostfolio/common/config'; import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { + ActivitiesResponse, AssetProfileIdentifier, EnhancedSymbolProfile, Filter @@ -37,8 +38,6 @@ import { endOfToday, isAfter } from 'date-fns'; import { groupBy, uniqBy } from 'lodash'; import { v4 as uuidv4 } from 'uuid'; -import { Activities } from './interfaces/activities.interface'; - @Injectable() export class OrderService { public constructor( @@ -129,7 +128,7 @@ export class OrderService { const assetSubClass = data.assetSubClass; const dataSource: DataSource = 'MANUAL'; - let name: string; + let name = data.SymbolProfile.connectOrCreate.create.name; let symbol: string; if ( @@ -142,7 +141,7 @@ export class OrderService { symbol = data.SymbolProfile.connectOrCreate.create.symbol; } else { // Create custom asset profile - name = data.SymbolProfile.connectOrCreate.create.symbol; + name = name ?? data.SymbolProfile.connectOrCreate.create.symbol; symbol = uuidv4(); } @@ -345,7 +344,7 @@ export class OrderService { userCurrency: string; userId: string; withExcludedAccountsAndActivities?: boolean; - }): Promise { + }): Promise { let orderBy: Prisma.Enumerable = [ { date: 'asc' } ]; diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts index ccdbafac8..f4c99916f 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts @@ -1,4 +1,4 @@ -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { readFileSync } from 'node:fs'; @@ -39,6 +39,6 @@ export const userDummyData = { id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }; -export function loadExportFile(filePath: string): Export { +export function loadExportFile(filePath: string): ExportResponse { return JSON.parse(readFileSync(filePath, 'utf8')); } diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 8a8606003..3218d01f4 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -9,7 +9,7 @@ import { getFactor } from '@ghostfolio/api/helper/portfolio.helper'; import { LogPerformance } from '@ghostfolio/api/interceptors/performance-logging/performance-logging.interceptor'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; -import { IDataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper'; import { @@ -193,7 +193,7 @@ export abstract class PortfolioCalculator { } const currencies: { [symbol: string]: string } = {}; - const dataGatheringItems: IDataGatheringItem[] = []; + const dataGatheringItems: DataGatheringItem[] = []; let firstIndex = transactionPoints.length; let firstTransactionPoint: TransactionPoint = null; let totalInterestWithCurrencyEffect = new Big(0); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts index 9ffa1b409..aa174f319 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-buy.spec.ts @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts index ab8000702..69b6c3dfc 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell-in-two-activities.spec.ts @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts index cc65fa8a2..a3cb8716e 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy-and-sell.spec.ts @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts index 7d9544666..ae083a7db 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-baln-buy.spec.ts @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts index 1ac0dcd16..cef8938c2 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -15,7 +15,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate- import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Big } from 'big.js'; @@ -23,7 +23,6 @@ import { join } from 'node:path'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -34,7 +33,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -44,7 +42,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) @@ -52,7 +49,7 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }); describe('PortfolioCalculator', () => { - let exportResponse: Export; + let exportResponse: ExportResponse; let configurationService: ConfigurationService; let currentRateService: CurrentRateService; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts index de3f5d3cd..36e6fa900 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-buy-and-sell-partially.spec.ts @@ -21,7 +21,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -32,7 +31,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -42,7 +40,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) @@ -53,7 +50,6 @@ jest.mock( '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention ExchangeRateDataService: jest.fn().mockImplementation(() => { return ExchangeRateDataServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts index 29413c6ad..5a4dfdc07 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd-short.spec.ts @@ -15,7 +15,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate- import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Big } from 'big.js'; @@ -23,7 +23,6 @@ import { join } from 'node:path'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -34,7 +33,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -44,7 +42,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) @@ -52,7 +49,7 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }); describe('PortfolioCalculator', () => { - let exportResponse: Export; + let exportResponse: ExportResponse; let configurationService: ConfigurationService; let currentRateService: CurrentRateService; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts index 26b3325c2..2ee367530 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -15,7 +15,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate- import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Big } from 'big.js'; @@ -23,7 +23,6 @@ import { join } from 'node:path'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -34,7 +33,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -44,7 +42,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) @@ -52,7 +49,7 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }); describe('PortfolioCalculator', () => { - let exportResponse: Export; + let exportResponse: ExportResponse; let configurationService: ConfigurationService; let currentRateService: CurrentRateService; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts index aaf2c4302..002be9154 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-fee.spec.ts @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts index f7d0e9e6d..bf0b15020 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-googl-buy.spec.ts @@ -21,7 +21,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -32,7 +31,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -42,7 +40,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) @@ -53,7 +50,6 @@ jest.mock( '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention ExchangeRateDataService: jest.fn().mockImplementation(() => { return ExchangeRateDataServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts index 2cb3899e9..32822014c 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-liability.spec.ts @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts index bb976564a..08015da5b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-and-sell.spec.ts @@ -28,7 +28,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -38,7 +37,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index 36b6e8be9..e5b128085 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts index f64328d39..fdd9e4718 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-no-orders.spec.ts @@ -15,7 +15,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -26,7 +25,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -36,7 +34,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts index 0f1cdfff7..cf330d136 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell-partially.spec.ts @@ -15,7 +15,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate- import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Big } from 'big.js'; @@ -23,7 +23,6 @@ import { join } from 'node:path'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -34,7 +33,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -44,7 +42,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) @@ -52,7 +49,7 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }); describe('PortfolioCalculator', () => { - let exportResponse: Export; + let exportResponse: ExportResponse; let configurationService: ConfigurationService; let currentRateService: CurrentRateService; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts index e426a68fa..681169062 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-novn-buy-and-sell.spec.ts @@ -15,7 +15,7 @@ import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate- import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; import { Big } from 'big.js'; @@ -23,7 +23,6 @@ import { join } from 'node:path'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -34,7 +33,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -44,7 +42,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) @@ -52,7 +49,7 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }); describe('PortfolioCalculator', () => { - let exportResponse: Export; + let exportResponse: ExportResponse; let configurationService: ConfigurationService; let currentRateService: CurrentRateService; diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts index 5e9949dd2..fc1d477a6 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-valuable.spec.ts @@ -20,7 +20,6 @@ import { Big } from 'big.js'; jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention CurrentRateService: jest.fn().mockImplementation(() => { return CurrentRateServiceMock; }) @@ -31,7 +30,6 @@ jest.mock( '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention PortfolioSnapshotService: jest.fn().mockImplementation(() => { return PortfolioSnapshotServiceMock; }) @@ -41,7 +39,6 @@ jest.mock( jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { return { - // eslint-disable-next-line @typescript-eslint/naming-convention RedisCacheService: jest.fn().mockImplementation(() => { return RedisCacheServiceMock; }) diff --git a/apps/api/src/app/portfolio/interfaces/get-values-params.interface.ts b/apps/api/src/app/portfolio/interfaces/get-values-params.interface.ts index 5cf7c8811..ffb74ee9b 100644 --- a/apps/api/src/app/portfolio/interfaces/get-values-params.interface.ts +++ b/apps/api/src/app/portfolio/interfaces/get-values-params.interface.ts @@ -1,8 +1,8 @@ -import { IDataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; import { DateQuery } from './date-query.interface'; export interface GetValuesParams { - dataGatheringItems: IDataGatheringItem[]; + dataGatheringItems: DataGatheringItem[]; dateQuery: DateQuery; } diff --git a/apps/api/src/app/subscription/subscription.controller.ts b/apps/api/src/app/subscription/subscription.controller.ts index 244a6b806..e1c705fdd 100644 --- a/apps/api/src/app/subscription/subscription.controller.ts +++ b/apps/api/src/app/subscription/subscription.controller.ts @@ -5,7 +5,10 @@ import { DEFAULT_LANGUAGE_CODE, PROPERTY_COUPONS } from '@ghostfolio/common/config'; -import { Coupon } from '@ghostfolio/common/interfaces'; +import { + Coupon, + CreateStripeCheckoutSessionResponse +} from '@ghostfolio/common/interfaces'; import type { RequestWithUser } from '@ghostfolio/common/types'; import { @@ -111,11 +114,11 @@ export class SubscriptionController { @Post('stripe/checkout-session') @UseGuards(AuthGuard('jwt'), HasPermissionGuard) - public async createCheckoutSession( + public createStripeCheckoutSession( @Body() { couponId, priceId }: { couponId?: string; priceId: string } - ) { + ): Promise { try { - return this.subscriptionService.createCheckoutSession({ + return this.subscriptionService.createStripeCheckoutSession({ couponId, priceId, user: this.request.user diff --git a/apps/api/src/app/subscription/subscription.service.ts b/apps/api/src/app/subscription/subscription.service.ts index 9574d17e9..37ab1c0f6 100644 --- a/apps/api/src/app/subscription/subscription.service.ts +++ b/apps/api/src/app/subscription/subscription.service.ts @@ -6,7 +6,10 @@ import { PROPERTY_STRIPE_CONFIG } from '@ghostfolio/common/config'; import { parseDate } from '@ghostfolio/common/helper'; -import { SubscriptionOffer } from '@ghostfolio/common/interfaces'; +import { + CreateStripeCheckoutSessionResponse, + SubscriptionOffer +} from '@ghostfolio/common/interfaces'; import { SubscriptionOfferKey, UserWithSettings @@ -38,7 +41,7 @@ export class SubscriptionService { } } - public async createCheckoutSession({ + public async createStripeCheckoutSession({ couponId, priceId, user @@ -46,7 +49,7 @@ export class SubscriptionService { couponId?: string; priceId: string; user: UserWithSettings; - }) { + }): Promise { const subscriptionOffers: { [offer in SubscriptionOfferKey]: SubscriptionOffer; } = @@ -58,33 +61,34 @@ export class SubscriptionService { } ); - const checkoutSessionCreateParams: Stripe.Checkout.SessionCreateParams = { - cancel_url: `${this.configurationService.get('ROOT_URL')}/${ - user.settings.settings.language - }/account`, - client_reference_id: user.id, - line_items: [ - { - price: priceId, - quantity: 1 - } - ], - locale: - (user.settings?.settings - ?.language as Stripe.Checkout.SessionCreateParams.Locale) ?? - DEFAULT_LANGUAGE_CODE, - metadata: subscriptionOffer - ? { subscriptionOffer: JSON.stringify(subscriptionOffer) } - : {}, - mode: 'payment', - payment_method_types: ['card'], - success_url: `${this.configurationService.get( - 'ROOT_URL' - )}/api/v1/subscription/stripe/callback?checkoutSessionId={CHECKOUT_SESSION_ID}` - }; + const stripeCheckoutSessionCreateParams: Stripe.Checkout.SessionCreateParams = + { + cancel_url: `${this.configurationService.get('ROOT_URL')}/${ + user.settings.settings.language + }/account`, + client_reference_id: user.id, + line_items: [ + { + price: priceId, + quantity: 1 + } + ], + locale: + (user.settings?.settings + ?.language as Stripe.Checkout.SessionCreateParams.Locale) ?? + DEFAULT_LANGUAGE_CODE, + metadata: subscriptionOffer + ? { subscriptionOffer: JSON.stringify(subscriptionOffer) } + : {}, + mode: 'payment', + payment_method_types: ['card'], + success_url: `${this.configurationService.get( + 'ROOT_URL' + )}/api/v1/subscription/stripe/callback?checkoutSessionId={CHECKOUT_SESSION_ID}` + }; if (couponId) { - checkoutSessionCreateParams.discounts = [ + stripeCheckoutSessionCreateParams.discounts = [ { coupon: couponId } @@ -92,7 +96,7 @@ export class SubscriptionService { } const session = await this.stripe.checkout.sessions.create( - checkoutSessionCreateParams + stripeCheckoutSessionCreateParams ); return { diff --git a/apps/api/src/app/symbol/symbol.controller.ts b/apps/api/src/app/symbol/symbol.controller.ts index 5d9a49a29..b374a914b 100644 --- a/apps/api/src/app/symbol/symbol.controller.ts +++ b/apps/api/src/app/symbol/symbol.controller.ts @@ -1,7 +1,7 @@ import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor'; -import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { LookupResponse } from '@ghostfolio/common/interfaces'; import type { RequestWithUser } from '@ghostfolio/common/types'; @@ -97,7 +97,7 @@ export class SymbolController { @Param('dataSource') dataSource: DataSource, @Param('dateString') dateString: string, @Param('symbol') symbol: string - ): Promise { + ): Promise { const date = parseISO(dateString); if (!isDate(date)) { diff --git a/apps/api/src/app/symbol/symbol.service.ts b/apps/api/src/app/symbol/symbol.service.ts index 56befb9b6..9eac234c9 100644 --- a/apps/api/src/app/symbol/symbol.service.ts +++ b/apps/api/src/app/symbol/symbol.service.ts @@ -1,7 +1,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { - IDataGatheringItem, - IDataProviderHistoricalResponse + DataGatheringItem, + DataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; @@ -27,7 +27,7 @@ export class SymbolService { dataGatheringItem, includeHistoricalData }: { - dataGatheringItem: IDataGatheringItem; + dataGatheringItem: DataGatheringItem; includeHistoricalData?: number; }): Promise { const quotes = await this.dataProviderService.getQuotes({ @@ -75,10 +75,10 @@ export class SymbolService { dataSource, date = new Date(), symbol - }: IDataGatheringItem): Promise { + }: DataGatheringItem): Promise { let historicalData: { [symbol: string]: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; }; } = { [symbol]: {} diff --git a/apps/api/src/dependencies.ts b/apps/api/src/dependencies.ts new file mode 100644 index 000000000..acb7af382 --- /dev/null +++ b/apps/api/src/dependencies.ts @@ -0,0 +1,3 @@ +// Dependencies required by .config/prisma.ts in Docker container +import 'dotenv'; +import 'dotenv-expand'; diff --git a/apps/api/src/models/interfaces/rule-settings.interface.ts b/apps/api/src/models/interfaces/rule-settings.interface.ts index 377bab52b..ff22650ca 100644 --- a/apps/api/src/models/interfaces/rule-settings.interface.ts +++ b/apps/api/src/models/interfaces/rule-settings.interface.ts @@ -1,3 +1,4 @@ export interface RuleSettings { isActive: boolean; + locale: string; } diff --git a/apps/api/src/models/rules/account-cluster-risk/current-investment.ts b/apps/api/src/models/rules/account-cluster-risk/current-investment.ts index 0601eea9a..51c808b25 100644 --- a/apps/api/src/models/rules/account-cluster-risk/current-investment.ts +++ b/apps/api/src/models/rules/account-cluster-risk/current-investment.ts @@ -121,9 +121,14 @@ export class AccountClusterRiskCurrentInvestment extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.5 }; diff --git a/apps/api/src/models/rules/account-cluster-risk/single-account.ts b/apps/api/src/models/rules/account-cluster-risk/single-account.ts index 8890bb767..0e07a9dc6 100644 --- a/apps/api/src/models/rules/account-cluster-risk/single-account.ts +++ b/apps/api/src/models/rules/account-cluster-risk/single-account.ts @@ -72,8 +72,9 @@ export class AccountClusterRiskSingleAccount extends Rule { }); } - public getSettings({ xRayRules }: UserSettings): RuleSettings { + public getSettings({ locale, xRayRules }: UserSettings): RuleSettings { return { + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true }; } diff --git a/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts b/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts index dab55413e..9a6f9dacb 100644 --- a/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts +++ b/apps/api/src/models/rules/asset-class-cluster-risk/equity.ts @@ -109,9 +109,14 @@ export class AssetClassClusterRiskEquity extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.82, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.78 diff --git a/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts b/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts index f793ec16f..70cdb63c8 100644 --- a/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts +++ b/apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts @@ -109,9 +109,14 @@ export class AssetClassClusterRiskFixedIncome extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.22, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.18 diff --git a/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts b/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts index 2c2b6c4d6..273c98e35 100644 --- a/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts +++ b/apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts @@ -97,9 +97,14 @@ export class CurrencyClusterRiskBaseCurrencyCurrentInvestment extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.5 }; diff --git a/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts b/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts index 7ca7a2d76..fa4f80d40 100644 --- a/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts +++ b/apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts @@ -104,9 +104,14 @@ export class EconomicMarketClusterRiskDevelopedMarkets extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.72, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.68 diff --git a/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts b/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts index cbf9f98b7..1414b53ed 100644 --- a/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts +++ b/apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts @@ -104,9 +104,14 @@ export class EconomicMarketClusterRiskEmergingMarkets extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.32, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.28 diff --git a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts index d97805fa6..2129f438b 100644 --- a/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts +++ b/apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts @@ -59,9 +59,14 @@ export class EmergencyFundSetup extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true }; } diff --git a/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts b/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts index 93c9aafd3..c5448a277 100644 --- a/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts +++ b/apps/api/src/models/rules/fees/fee-ratio-initial-investment.ts @@ -82,9 +82,14 @@ export class FeeRatioInitialInvestment extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.01 }; diff --git a/apps/api/src/models/rules/liquidity/buying-power.ts b/apps/api/src/models/rules/liquidity/buying-power.ts index 539d0a728..2cd4d6fee 100644 --- a/apps/api/src/models/rules/liquidity/buying-power.ts +++ b/apps/api/src/models/rules/liquidity/buying-power.ts @@ -40,7 +40,9 @@ export class BuyingPower extends Rule { languageCode: this.getLanguageCode(), placeholders: { baseCurrency: ruleSettings.baseCurrency, - thresholdMin: ruleSettings.thresholdMin + thresholdMin: ruleSettings.thresholdMin.toLocaleString( + ruleSettings.locale + ) } }), value: false @@ -53,7 +55,9 @@ export class BuyingPower extends Rule { languageCode: this.getLanguageCode(), placeholders: { baseCurrency: ruleSettings.baseCurrency, - thresholdMin: ruleSettings.thresholdMin + thresholdMin: ruleSettings.thresholdMin.toLocaleString( + ruleSettings.locale + ) } }), value: true @@ -86,9 +90,14 @@ export class BuyingPower extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0 }; diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts b/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts index 5d6cc999a..1242df759 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts @@ -94,9 +94,14 @@ export class RegionalMarketClusterRiskAsiaPacific extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.03, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.02 diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts b/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts index fa13a9e57..8486d843b 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts @@ -96,9 +96,14 @@ export class RegionalMarketClusterRiskEmergingMarkets extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.12, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.08 diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts b/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts index 3bbe7af84..459848db4 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/europe.ts @@ -94,9 +94,14 @@ export class RegionalMarketClusterRiskEurope extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.15, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.11 diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts b/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts index 952e14795..d9c1cff6b 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/japan.ts @@ -94,9 +94,14 @@ export class RegionalMarketClusterRiskJapan extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.06, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.04 diff --git a/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts b/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts index f022ecff9..6180a2cc5 100644 --- a/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts +++ b/apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts @@ -94,9 +94,14 @@ export class RegionalMarketClusterRiskNorthAmerica extends Rule { }); } - public getSettings({ baseCurrency, xRayRules }: UserSettings): Settings { + public getSettings({ + baseCurrency, + locale, + xRayRules + }: UserSettings): Settings { return { baseCurrency, + locale, isActive: xRayRules?.[this.getKey()]?.isActive ?? true, thresholdMax: xRayRules?.[this.getKey()]?.thresholdMax ?? 0.69, thresholdMin: xRayRules?.[this.getKey()]?.thresholdMin ?? 0.65 diff --git a/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts b/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts index 1e8f7eefa..1e631f8c8 100644 --- a/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts +++ b/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts @@ -8,8 +8,8 @@ import { GetSearchParams } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; @@ -23,7 +23,7 @@ import { DataSource, SymbolProfile } from '@prisma/client'; import * as Alphavantage from 'alphavantage'; import { format, isAfter, isBefore, parse } from 'date-fns'; -import { IAlphaVantageHistoricalResponse } from './interfaces/interfaces'; +import { AlphaVantageHistoricalResponse } from './interfaces/interfaces'; @Injectable() export class AlphaVantageService implements DataProviderInterface { @@ -68,11 +68,11 @@ export class AlphaVantageService implements DataProviderInterface { symbol, to }: GetHistoricalParams): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { try { const historicalData: { - [symbol: string]: IAlphaVantageHistoricalResponse[]; + [symbol: string]: AlphaVantageHistoricalResponse[]; } = await this.alphaVantage.crypto.daily( symbol .substring(0, symbol.length - DEFAULT_CURRENCY.length) @@ -81,7 +81,7 @@ export class AlphaVantageService implements DataProviderInterface { ); const response: { - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; } = {}; response[symbol] = {}; @@ -115,7 +115,7 @@ export class AlphaVantageService implements DataProviderInterface { } public async getQuotes({}: GetQuotesParams): Promise<{ - [symbol: string]: IDataProviderResponse; + [symbol: string]: DataProviderResponse; }> { return {}; } diff --git a/apps/api/src/services/data-provider/alpha-vantage/interfaces/interfaces.ts b/apps/api/src/services/data-provider/alpha-vantage/interfaces/interfaces.ts index d954f3a75..897351df1 100644 --- a/apps/api/src/services/data-provider/alpha-vantage/interfaces/interfaces.ts +++ b/apps/api/src/services/data-provider/alpha-vantage/interfaces/interfaces.ts @@ -1 +1 @@ -export interface IAlphaVantageHistoricalResponse {} +export interface AlphaVantageHistoricalResponse {} 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 561d7d6db..e06cb6ab3 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -8,8 +8,8 @@ import { GetSearchParams } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; @@ -109,7 +109,7 @@ export class CoinGeckoService implements DataProviderInterface { symbol, to }: GetHistoricalParams): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { try { const { error, prices, status } = await fetch( @@ -133,7 +133,7 @@ export class CoinGeckoService implements DataProviderInterface { } const result: { - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; } = { [symbol]: {} }; @@ -166,8 +166,8 @@ export class CoinGeckoService implements DataProviderInterface { public async getQuotes({ requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), symbols - }: GetQuotesParams): Promise<{ [symbol: string]: IDataProviderResponse }> { - const response: { [symbol: string]: IDataProviderResponse } = {}; + }: GetQuotesParams): Promise<{ [symbol: string]: DataProviderResponse }> { + const response: { [symbol: string]: DataProviderResponse } = {}; if (symbols.length <= 0) { return response; 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 6d6054287..53ef5c5e4 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -2,8 +2,8 @@ import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.s import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { DataProviderInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; @@ -215,10 +215,10 @@ export class DataProviderService implements OnModuleInit { from: Date, to: Date ): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { let response: { - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; } = {}; if (isEmpty(aItems) || !isValid(from) || !isValid(to)) { @@ -284,7 +284,7 @@ export class DataProviderService implements OnModuleInit { from: Date; to: Date; }): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { for (const { currency, rootCurrency } of DERIVED_CURRENCIES) { if ( @@ -317,11 +317,11 @@ export class DataProviderService implements OnModuleInit { ); const result: { - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; } = {}; const promises: Promise<{ - data: { [date: string]: IDataProviderHistoricalResponse }; + data: { [date: string]: DataProviderHistoricalResponse }; symbol: string; }>[] = []; for (const { dataSource, symbol } of assetProfileIdentifiers) { @@ -329,7 +329,7 @@ export class DataProviderService implements OnModuleInit { if (dataProvider.canHandle(symbol)) { if (symbol === `${DEFAULT_CURRENCY}USX`) { const data: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; } = {}; for (const date of eachDayOfInterval({ end: to, start: from })) { @@ -399,10 +399,10 @@ export class DataProviderService implements OnModuleInit { useCache?: boolean; user?: UserWithSettings; }): Promise<{ - [symbol: string]: IDataProviderResponse; + [symbol: string]: DataProviderResponse; }> { const response: { - [symbol: string]: IDataProviderResponse; + [symbol: string]: DataProviderResponse; } = {}; const startTimeTotal = performance.now(); @@ -716,7 +716,7 @@ export class DataProviderService implements OnModuleInit { }: { allData: { data: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; }; symbol: string; }[]; @@ -728,7 +728,7 @@ export class DataProviderService implements OnModuleInit { })?.data; const data: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; } = {}; for (const date in rootData) { 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 c18ec193f..b837b2e6f 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 @@ -8,8 +8,8 @@ import { GetSearchParams } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { @@ -89,7 +89,7 @@ export class EodHistoricalDataService implements DataProviderInterface { symbol, to }: GetDividendsParams): Promise<{ - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; }> { symbol = this.convertToEodSymbol(symbol); @@ -99,7 +99,7 @@ export class EodHistoricalDataService implements DataProviderInterface { try { const response: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; } = {}; const historicalResult = await fetch( @@ -141,7 +141,7 @@ export class EodHistoricalDataService implements DataProviderInterface { symbol, to }: GetHistoricalParams): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { symbol = this.convertToEodSymbol(symbol); @@ -198,8 +198,8 @@ export class EodHistoricalDataService implements DataProviderInterface { public async getQuotes({ requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), symbols - }: GetQuotesParams): Promise<{ [symbol: string]: IDataProviderResponse }> { - const response: { [symbol: string]: IDataProviderResponse } = {}; + }: GetQuotesParams): Promise<{ [symbol: string]: DataProviderResponse }> { + const response: { [symbol: string]: DataProviderResponse } = {}; if (symbols.length <= 0) { return response; 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 689f59fec..0caad99ca 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 @@ -9,8 +9,8 @@ import { GetSearchParams } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { @@ -245,7 +245,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { try { const response: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; } = {}; const dividends = await fetch( @@ -289,11 +289,11 @@ export class FinancialModelingPrepService implements DataProviderInterface { symbol, to }: GetHistoricalParams): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { const MAX_YEARS_PER_REQUEST = 5; const result: { - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; } = { [symbol]: {} }; @@ -353,8 +353,8 @@ export class FinancialModelingPrepService implements DataProviderInterface { public async getQuotes({ requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), symbols - }: GetQuotesParams): Promise<{ [symbol: string]: IDataProviderResponse }> { - const response: { [symbol: string]: IDataProviderResponse } = {}; + }: GetQuotesParams): Promise<{ [symbol: string]: DataProviderResponse }> { + const response: { [symbol: string]: DataProviderResponse } = {}; if (symbols.length <= 0) { return response; 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 ca8d72827..9928af8eb 100644 --- a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts @@ -9,8 +9,8 @@ import { GetSearchParams } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { @@ -111,10 +111,10 @@ export class GhostfolioService implements DataProviderInterface { symbol, to }: GetDividendsParams): Promise<{ - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; }> { let dividends: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; } = {}; try { @@ -164,7 +164,7 @@ export class GhostfolioService implements DataProviderInterface { symbol, to }: GetHistoricalParams): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { try { const response = await fetch( @@ -228,9 +228,9 @@ export class GhostfolioService implements DataProviderInterface { requestTimeout = this.configurationService.get('REQUEST_TIMEOUT'), symbols }: GetQuotesParams): Promise<{ - [symbol: string]: IDataProviderResponse; + [symbol: string]: DataProviderResponse; }> { - let quotes: { [symbol: string]: IDataProviderResponse } = {}; + let quotes: { [symbol: string]: DataProviderResponse } = {}; if (symbols.length <= 0) { return quotes; 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 111f2d004..fc188c345 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 @@ -8,8 +8,8 @@ import { GetSearchParams } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; @@ -60,7 +60,7 @@ export class GoogleSheetsService implements DataProviderInterface { symbol, to }: GetHistoricalParams): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { try { const sheet = await this.getSheet({ @@ -71,7 +71,7 @@ export class GoogleSheetsService implements DataProviderInterface { const rows = await sheet.getRows(); const historicalData: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; } = {}; rows @@ -104,8 +104,8 @@ export class GoogleSheetsService implements DataProviderInterface { public async getQuotes({ symbols - }: GetQuotesParams): Promise<{ [symbol: string]: IDataProviderResponse }> { - const response: { [symbol: string]: IDataProviderResponse } = {}; + }: GetQuotesParams): Promise<{ [symbol: string]: DataProviderResponse }> { + const response: { [symbol: string]: DataProviderResponse } = {}; if (symbols.length <= 0) { return response; diff --git a/apps/api/src/services/data-provider/interfaces/data-provider.interface.ts b/apps/api/src/services/data-provider/interfaces/data-provider.interface.ts index 475205a01..38eb62a2b 100644 --- a/apps/api/src/services/data-provider/interfaces/data-provider.interface.ts +++ b/apps/api/src/services/data-provider/interfaces/data-provider.interface.ts @@ -1,6 +1,6 @@ import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { DataProviderInfo, @@ -26,7 +26,7 @@ export interface DataProviderInterface { symbol, to }: GetDividendsParams): Promise<{ - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; }>; getHistorical({ @@ -36,7 +36,7 @@ export interface DataProviderInterface { symbol, to }: GetHistoricalParams): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }>; // TODO: Return only one symbol getMaxNumberOfSymbolsPerRequest?(): number; @@ -46,7 +46,7 @@ export interface DataProviderInterface { getQuotes({ requestTimeout, symbols - }: GetQuotesParams): Promise<{ [symbol: string]: IDataProviderResponse }>; + }: GetQuotesParams): Promise<{ [symbol: string]: DataProviderResponse }>; getTestSymbol(): string; 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 c411f678b..00c28d9d2 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -8,8 +8,8 @@ import { GetSearchParams } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; @@ -77,7 +77,7 @@ export class ManualService implements DataProviderInterface { symbol, to }: GetHistoricalParams): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { try { const [symbolProfile] = await this.symbolProfileService.getSymbolProfiles( @@ -88,7 +88,7 @@ export class ManualService implements DataProviderInterface { if (defaultMarketPrice) { const historical: { - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; } = { [symbol]: {} }; @@ -132,8 +132,8 @@ export class ManualService implements DataProviderInterface { public async getQuotes({ symbols - }: GetQuotesParams): Promise<{ [symbol: string]: IDataProviderResponse }> { - const response: { [symbol: string]: IDataProviderResponse } = {}; + }: GetQuotesParams): Promise<{ [symbol: string]: DataProviderResponse }> { + const response: { [symbol: string]: DataProviderResponse } = {}; if (symbols.length <= 0) { return response; diff --git a/apps/api/src/services/data-provider/rapid-api/interfaces/interfaces.ts b/apps/api/src/services/data-provider/rapid-api/interfaces/interfaces.ts index 995fdb9d3..f87a22639 100644 --- a/apps/api/src/services/data-provider/rapid-api/interfaces/interfaces.ts +++ b/apps/api/src/services/data-provider/rapid-api/interfaces/interfaces.ts @@ -1 +1 @@ -export interface IRapidApiResponse {} +export interface RapidApiResponse {} 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 824f44328..4d22e0feb 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 @@ -8,8 +8,8 @@ import { GetSearchParams } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { ghostfolioFearAndGreedIndexSymbol, @@ -59,7 +59,7 @@ export class RapidApiService implements DataProviderInterface { symbol, to }: GetHistoricalParams): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { try { if ( @@ -96,7 +96,7 @@ export class RapidApiService implements DataProviderInterface { public async getQuotes({ symbols - }: GetQuotesParams): Promise<{ [symbol: string]: IDataProviderResponse }> { + }: GetQuotesParams): Promise<{ [symbol: string]: DataProviderResponse }> { if (symbols.length <= 0) { return {}; } diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index 390449d78..b36b0f215 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts @@ -10,8 +10,8 @@ import { GetSearchParams } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { - IDataProviderHistoricalResponse, - IDataProviderResponse + DataProviderHistoricalResponse, + DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; @@ -96,7 +96,7 @@ export class YahooFinanceService implements DataProviderInterface { ) ); const response: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; } = {}; for (const historicalItem of historicalResult) { @@ -124,7 +124,7 @@ export class YahooFinanceService implements DataProviderInterface { symbol, to }: GetHistoricalParams): Promise<{ - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; }> { if (isSameDay(from, to)) { to = addDays(to, 1); @@ -145,7 +145,7 @@ export class YahooFinanceService implements DataProviderInterface { ); const response: { - [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; + [symbol: string]: { [date: string]: DataProviderHistoricalResponse }; } = {}; response[symbol] = {}; @@ -183,8 +183,8 @@ export class YahooFinanceService implements DataProviderInterface { public async getQuotes({ symbols - }: GetQuotesParams): Promise<{ [symbol: string]: IDataProviderResponse }> { - const response: { [symbol: string]: IDataProviderResponse } = {}; + }: GetQuotesParams): Promise<{ [symbol: string]: DataProviderResponse }> { + const response: { [symbol: string]: DataProviderResponse } = {}; if (symbols.length <= 0) { return response; diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts index 433547c94..47c67c3de 100644 --- a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts +++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts @@ -1,6 +1,6 @@ import { LogPerformance } from '@ghostfolio/api/interceptors/performance-logging/performance-logging.interceptor'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; -import { IDataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; @@ -29,7 +29,7 @@ import ms from 'ms'; @Injectable() export class ExchangeRateDataService { private currencies: string[] = []; - private currencyPairs: IDataGatheringItem[] = []; + private currencyPairs: DataGatheringItem[] = []; private exchangeRates: { [currencyPair: string]: number } = {}; public constructor( diff --git a/apps/api/src/services/interfaces/interfaces.ts b/apps/api/src/services/interfaces/interfaces.ts index 0eaa149a3..7469754b5 100644 --- a/apps/api/src/services/interfaces/interfaces.ts +++ b/apps/api/src/services/interfaces/interfaces.ts @@ -6,11 +6,11 @@ import { MarketState } from '@ghostfolio/common/types'; import { DataSource } from '@prisma/client'; -export interface IDataProviderHistoricalResponse { +export interface DataProviderHistoricalResponse { marketPrice: number; } -export interface IDataProviderResponse { +export interface DataProviderResponse { currency: string; dataProviderInfo?: DataProviderInfo; dataSource: DataSource; @@ -18,6 +18,6 @@ export interface IDataProviderResponse { marketState: MarketState; } -export interface IDataGatheringItem extends AssetProfileIdentifier { +export interface DataGatheringItem extends AssetProfileIdentifier { date?: Date; } diff --git a/apps/api/src/services/market-data/market-data.service.ts b/apps/api/src/services/market-data/market-data.service.ts index 58b9b09ec..38ad61663 100644 --- a/apps/api/src/services/market-data/market-data.service.ts +++ b/apps/api/src/services/market-data/market-data.service.ts @@ -1,6 +1,6 @@ import { UpdateMarketDataDto } from '@ghostfolio/api/app/admin/update-market-data.dto'; import { DateQuery } from '@ghostfolio/api/app/portfolio/interfaces/date-query.interface'; -import { IDataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { resetHours } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; @@ -30,7 +30,7 @@ export class MarketDataService { dataSource, date = new Date(), symbol - }: IDataGatheringItem): Promise { + }: DataGatheringItem): Promise { return await this.prismaService.marketData.findFirst({ where: { dataSource, diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts b/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts index 9cf6f63e6..1a172f3ea 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts @@ -1,6 +1,6 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { AssetProfileDelistedError } from '@ghostfolio/api/services/data-provider/errors/asset-profile-delisted.error'; -import { IDataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { @@ -99,7 +99,7 @@ export class DataGatheringProcessor { ), name: GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME }) - public async gatherHistoricalMarketData(job: Job) { + public async gatherHistoricalMarketData(job: Job) { const { dataSource, date, symbol } = job.data; try { diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts index dd93e3e47..2d3ec45ad 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts @@ -1,7 +1,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; -import { IDataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataGatheringItem } from '@ghostfolio/api/services/interfaces/interfaces'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; @@ -94,7 +94,7 @@ export class DataGatheringService { }); } - public async gatherSymbol({ dataSource, date, symbol }: IDataGatheringItem) { + public async gatherSymbol({ dataSource, date, symbol }: DataGatheringItem) { await this.marketDataService.deleteMany({ dataSource, symbol }); const dataGatheringItems = (await this.getSymbolsMax()) @@ -276,7 +276,7 @@ export class DataGatheringService { dataGatheringItems, priority }: { - dataGatheringItems: IDataGatheringItem[]; + dataGatheringItems: DataGatheringItem[]; priority: number; }) { await this.addJobsToQueue( @@ -348,7 +348,7 @@ export class DataGatheringService { }); } - private async getCurrencies7D(): Promise { + private async getCurrencies7D(): Promise { const assetProfileIdentifiersWithCompleteMarketData = await this.getAssetProfileIdentifiersWithCompleteMarketData(); @@ -376,7 +376,7 @@ export class DataGatheringService { withUserSubscription = false }: { withUserSubscription?: boolean; - }): Promise { + }): Promise { const symbolProfiles = await this.symbolProfileService.getActiveSymbolProfilesByUserSubscription( { @@ -407,7 +407,7 @@ export class DataGatheringService { }); } - private async getSymbolsMax(): Promise { + private async getSymbolsMax(): Promise { const benchmarkAssetProfileIdMap: { [key: string]: boolean } = {}; ( (await this.propertyService.getByKey( diff --git a/apps/api/src/services/queues/portfolio-snapshot/interfaces/portfolio-snapshot-queue-job.interface.ts b/apps/api/src/services/queues/portfolio-snapshot/interfaces/portfolio-snapshot-queue-job.interface.ts index b9f315c5d..3486974f7 100644 --- a/apps/api/src/services/queues/portfolio-snapshot/interfaces/portfolio-snapshot-queue-job.interface.ts +++ b/apps/api/src/services/queues/portfolio-snapshot/interfaces/portfolio-snapshot-queue-job.interface.ts @@ -1,7 +1,7 @@ import { Filter } from '@ghostfolio/common/interfaces'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; -export interface IPortfolioSnapshotQueueJob { +export interface PortfolioSnapshotQueueJob { calculationType: PerformanceCalculationType; filters: Filter[]; userCurrency: string; diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts index 6a2a3114e..75a3a8631 100644 --- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts +++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts @@ -16,7 +16,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { Job } from 'bull'; import { addMilliseconds } from 'date-fns'; -import { IPortfolioSnapshotQueueJob } from './interfaces/portfolio-snapshot-queue-job.interface'; +import { PortfolioSnapshotQueueJob } from './interfaces/portfolio-snapshot-queue-job.interface'; @Injectable() @Processor(PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE) @@ -37,9 +37,7 @@ export class PortfolioSnapshotProcessor { ), name: PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME }) - public async calculatePortfolioSnapshot( - job: Job - ) { + public async calculatePortfolioSnapshot(job: Job) { try { const startTime = performance.now(); diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock.ts index 59fdc5855..898718106 100644 --- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock.ts +++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock.ts @@ -1,13 +1,13 @@ import { Job, JobOptions } from 'bull'; import { setTimeout } from 'timers/promises'; -import { IPortfolioSnapshotQueueJob } from './interfaces/portfolio-snapshot-queue-job.interface'; +import { PortfolioSnapshotQueueJob } from './interfaces/portfolio-snapshot-queue-job.interface'; export const PortfolioSnapshotServiceMock = { addJobToQueue({ opts }: { - data: IPortfolioSnapshotQueueJob; + data: PortfolioSnapshotQueueJob; name: string; opts?: JobOptions; }): Promise> { diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.ts index 9dba9275e..d7449a9cc 100644 --- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.ts +++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.service.ts @@ -4,7 +4,7 @@ import { InjectQueue } from '@nestjs/bull'; import { Injectable } from '@nestjs/common'; import { JobOptions, Queue } from 'bull'; -import { IPortfolioSnapshotQueueJob } from './interfaces/portfolio-snapshot-queue-job.interface'; +import { PortfolioSnapshotQueueJob } from './interfaces/portfolio-snapshot-queue-job.interface'; @Injectable() export class PortfolioSnapshotService { @@ -18,7 +18,7 @@ export class PortfolioSnapshotService { name, opts }: { - data: IPortfolioSnapshotQueueJob; + data: PortfolioSnapshotQueueJob; name: string; opts?: JobOptions; }) { diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts index 3fd9e506f..a56f6dec5 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts @@ -18,6 +18,7 @@ import { ScraperConfiguration, User } from '@ghostfolio/common/interfaces'; +import { DateRange } from '@ghostfolio/common/types'; import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { GfHistoricalMarketDataEditorComponent } from '@ghostfolio/ui/historical-market-data-editor'; @@ -190,6 +191,32 @@ export class GfAssetProfileDialogComponent implements OnDestroy, OnInit { }; public currencies: string[] = []; + public dateRangeOptions = [ + { + label: $localize`Current week` + ' (' + $localize`WTD` + ')', + value: 'wtd' + }, + { + label: $localize`Current month` + ' (' + $localize`MTD` + ')', + value: 'mtd' + }, + { + label: $localize`Current year` + ' (' + $localize`YTD` + ')', + value: 'ytd' + }, + { + label: '1 ' + $localize`year` + ' (' + $localize`1Y` + ')', + value: '1y' + }, + { + label: '5 ' + $localize`years` + ' (' + $localize`5Y` + ')', + value: '5y' + }, + { + label: $localize`Max`, + value: 'max' + } + ]; public historicalDataItems: LineChartItem[]; public isBenchmark = false; public isDataGatheringEnabled: boolean; @@ -405,9 +432,15 @@ export class GfAssetProfileDialogComponent implements OnDestroy, OnInit { .subscribe(); } - public onGatherSymbol({ dataSource, symbol }: AssetProfileIdentifier) { + public onGatherSymbol({ + dataSource, + range, + symbol + }: { + range?: DateRange; + } & AssetProfileIdentifier) { this.adminService - .gatherSymbol({ dataSource, symbol }) + .gatherSymbol({ dataSource, range, symbol }) .pipe(takeUntil(this.unsubscribeSubject)) .subscribe(); } diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index 301287cf5..b2c063684 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -26,12 +26,30 @@ [disabled]=" assetProfileForm.dirty || !assetProfileForm.controls.isActive.value " + [matMenuTriggerFor]="gatherHistoricalMarketDataMenu" (click)=" onGatherSymbol({ dataSource: data.dataSource, symbol: data.symbol }) " > Gather Historical Market Data + + @for (dateRange of dateRangeOptions; track dateRange.value) { + + } + + @if (hasPermissionToImpersonateAllUsers) { + + @if (data.hasPermissionToUseSocialLogin) { +
or
+
+ + Sign in with Google +
+ } - @if (data.hasPermissionToUseSocialLogin) { -
or
-
- - Sign in with Google -
- } +
) {} } diff --git a/apps/client/src/app/components/rule/rule.component.ts b/apps/client/src/app/components/rule/rule.component.ts index c38de8bbb..ba77ce162 100644 --- a/apps/client/src/app/components/rule/rule.component.ts +++ b/apps/client/src/app/components/rule/rule.component.ts @@ -31,7 +31,7 @@ import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { Subject, takeUntil } from 'rxjs'; -import { IRuleSettingsDialogParams } from './rule-settings-dialog/interfaces/interfaces'; +import { RuleSettingsDialogParams } from './rule-settings-dialog/interfaces/interfaces'; import { GfRuleSettingsDialogComponent } from './rule-settings-dialog/rule-settings-dialog.component'; @Component({ @@ -83,7 +83,7 @@ export class GfRuleComponent implements OnInit { rule, categoryName: this.categoryName, settings: this.settings - } as IRuleSettingsDialogParams, + } as RuleSettingsDialogParams, width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts index f2f63b32b..025ec0f7a 100644 --- a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts +++ b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -108,7 +108,10 @@ export class GfUserAccountMembershipComponent implements OnDestroy { public onCheckout() { this.dataService - .createCheckoutSession({ couponId: this.couponId, priceId: this.priceId }) + .createStripeCheckoutSession({ + couponId: this.couponId, + priceId: this.priceId + }) .pipe( catchError((error) => { this.notificationService.alert({ @@ -117,7 +120,7 @@ export class GfUserAccountMembershipComponent implements OnDestroy { throw error; }), - switchMap(({ sessionId }: { sessionId: string }) => { + switchMap(({ sessionId }) => { return this.stripeService.redirectToCheckout({ sessionId }); }) ) diff --git a/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts new file mode 100644 index 000000000..81cf84d12 --- /dev/null +++ b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts @@ -0,0 +1,7 @@ +import { AdminUsers } from '@ghostfolio/common/interfaces'; + +export interface UserDetailDialogParams { + deviceType: string; + locale: string; + userData: AdminUsers['users'][0]; +} diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.scss b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.scss new file mode 100644 index 000000000..b63df0134 --- /dev/null +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.scss @@ -0,0 +1,7 @@ +:host { + display: block; + + .mat-mdc-dialog-content { + max-height: unset; + } +} diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts new file mode 100644 index 000000000..bd336c4f8 --- /dev/null +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts @@ -0,0 +1,52 @@ +import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component'; +import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component'; +import { GfValueComponent } from '@ghostfolio/ui/value'; + +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + CUSTOM_ELEMENTS_SCHEMA, + Inject, + OnDestroy +} from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { MatDialogModule } from '@angular/material/dialog'; +import { Subject } from 'rxjs'; + +import { UserDetailDialogParams } from './interfaces/interfaces'; + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + host: { class: 'd-flex flex-column h-100' }, + imports: [ + CommonModule, + GfDialogFooterComponent, + GfDialogHeaderComponent, + GfValueComponent, + MatButtonModule, + MatDialogModule + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + selector: 'gf-user-detail-dialog', + styleUrls: ['./user-detail-dialog.component.scss'], + templateUrl: './user-detail-dialog.html' +}) +export class GfUserDetailDialogComponent implements OnDestroy { + private unsubscribeSubject = new Subject(); + + public constructor( + @Inject(MAT_DIALOG_DATA) public data: UserDetailDialogParams, + public dialogRef: MatDialogRef + ) {} + + public onClose() { + this.dialogRef.close(); + } + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } +} diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html new file mode 100644 index 000000000..d90a6abf6 --- /dev/null +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -0,0 +1,32 @@ + + +
+
+
+
+ User ID +
+
+ Registration Date +
+
+
+
+ + diff --git a/apps/client/src/app/core/notification/alert-dialog/alert-dialog.component.ts b/apps/client/src/app/core/notification/alert-dialog/alert-dialog.component.ts index 98b6043eb..33d26c493 100644 --- a/apps/client/src/app/core/notification/alert-dialog/alert-dialog.component.ts +++ b/apps/client/src/app/core/notification/alert-dialog/alert-dialog.component.ts @@ -2,7 +2,7 @@ import { Component } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule, MatDialogRef } from '@angular/material/dialog'; -import { IAlertDialogParams } from './interfaces/interfaces'; +import { AlertDialogParams } from './interfaces/interfaces'; @Component({ imports: [MatButtonModule, MatDialogModule], @@ -17,7 +17,7 @@ export class GfAlertDialogComponent { public constructor(public dialogRef: MatDialogRef) {} - public initialize(aParams: IAlertDialogParams) { + public initialize(aParams: AlertDialogParams) { this.discardLabel = aParams.discardLabel; this.message = aParams.message; this.title = aParams.title; diff --git a/apps/client/src/app/core/notification/alert-dialog/interfaces/interfaces.ts b/apps/client/src/app/core/notification/alert-dialog/interfaces/interfaces.ts index 7cff077a7..835056ba7 100644 --- a/apps/client/src/app/core/notification/alert-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/core/notification/alert-dialog/interfaces/interfaces.ts @@ -1,4 +1,4 @@ -export interface IAlertDialogParams { +export interface AlertDialogParams { confirmLabel?: string; discardLabel?: string; message?: string; diff --git a/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.component.ts b/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.component.ts index 88e5113d7..49c6dc5a3 100644 --- a/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.component.ts +++ b/apps/client/src/app/core/notification/confirmation-dialog/confirmation-dialog.component.ts @@ -3,7 +3,7 @@ import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { ConfirmationDialogType } from './confirmation-dialog.type'; -import { IConfirmDialogParams } from './interfaces/interfaces'; +import { ConfirmDialogParams } from './interfaces/interfaces'; @Component({ imports: [MatButtonModule, MatDialogModule], @@ -29,7 +29,7 @@ export class GfConfirmationDialogComponent { } } - public initialize(aParams: IConfirmDialogParams) { + public initialize(aParams: ConfirmDialogParams) { this.confirmLabel = aParams.confirmLabel; this.confirmType = aParams.confirmType; this.discardLabel = aParams.discardLabel; diff --git a/apps/client/src/app/core/notification/confirmation-dialog/interfaces/interfaces.ts b/apps/client/src/app/core/notification/confirmation-dialog/interfaces/interfaces.ts index 834988ceb..8788e54fe 100644 --- a/apps/client/src/app/core/notification/confirmation-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/core/notification/confirmation-dialog/interfaces/interfaces.ts @@ -1,6 +1,6 @@ import { ConfirmationDialogType } from '../confirmation-dialog.type'; -export interface IConfirmDialogParams { +export interface ConfirmDialogParams { confirmLabel?: string; confirmType: ConfirmationDialogType; discardLabel?: string; diff --git a/apps/client/src/app/core/notification/interfaces/interfaces.ts b/apps/client/src/app/core/notification/interfaces/interfaces.ts index f3546d457..c58c7fa28 100644 --- a/apps/client/src/app/core/notification/interfaces/interfaces.ts +++ b/apps/client/src/app/core/notification/interfaces/interfaces.ts @@ -1,13 +1,13 @@ import { ConfirmationDialogType } from '../confirmation-dialog/confirmation-dialog.type'; -export interface IAlertParams { +export interface AlertParams { discardFn?: () => void; discardLabel?: string; message?: string; title: string; } -export interface IConfirmParams { +export interface ConfirmParams { confirmFn: () => void; confirmLabel?: string; confirmType?: ConfirmationDialogType; @@ -18,7 +18,7 @@ export interface IConfirmParams { title: string; } -export interface IPromptParams { +export interface PromptParams { confirmFn: (value: string) => void; confirmLabel?: string; defaultValue?: string; diff --git a/apps/client/src/app/core/notification/notification.service.ts b/apps/client/src/app/core/notification/notification.service.ts index 1b58db64a..9c31aa7bd 100644 --- a/apps/client/src/app/core/notification/notification.service.ts +++ b/apps/client/src/app/core/notification/notification.service.ts @@ -8,9 +8,9 @@ import { GfAlertDialogComponent } from './alert-dialog/alert-dialog.component'; import { GfConfirmationDialogComponent } from './confirmation-dialog/confirmation-dialog.component'; import { ConfirmationDialogType } from './confirmation-dialog/confirmation-dialog.type'; import { - IAlertParams, - IConfirmParams, - IPromptParams + AlertParams, + ConfirmParams, + PromptParams } from './interfaces/interfaces'; import { GfPromptDialogComponent } from './prompt-dialog/prompt-dialog.component'; @@ -21,7 +21,7 @@ export class NotificationService { public constructor(private matDialog: MatDialog) {} - public alert(aParams: IAlertParams) { + public alert(aParams: AlertParams) { if (!aParams.discardLabel) { aParams.discardLabel = translate('CLOSE'); } @@ -45,7 +45,7 @@ export class NotificationService { }); } - public confirm(aParams: IConfirmParams) { + public confirm(aParams: ConfirmParams) { if (!aParams.confirmLabel) { aParams.confirmLabel = translate('YES'); } @@ -78,7 +78,7 @@ export class NotificationService { }); } - public prompt(aParams: IPromptParams) { + public prompt(aParams: PromptParams) { if (!aParams.confirmLabel) { aParams.confirmLabel = translate('OK'); } diff --git a/apps/client/src/app/pages/pricing/pricing-page.component.ts b/apps/client/src/app/pages/pricing/pricing-page.component.ts index 8bc3e3a67..82560246f 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -134,9 +134,12 @@ export class GfPricingPageComponent implements OnDestroy, OnInit { public onCheckout() { this.dataService - .createCheckoutSession({ couponId: this.couponId, priceId: this.priceId }) + .createStripeCheckoutSession({ + couponId: this.couponId, + priceId: this.priceId + }) .pipe( - switchMap(({ sessionId }: { sessionId: string }) => { + switchMap(({ sessionId }) => { return this.stripeService.redirectToCheckout({ sessionId }); }), catchError((error) => { diff --git a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html index b028734a7..b65054bba 100644 --- a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html +++ b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html @@ -105,8 +105,8 @@

Personal Finance Tools

Personal finance tools are software applications that help - individuals manage their money, track expenses, set budgets, - monitor investments, and make informed financial decisions. + manage your money, track expenses, set budgets, monitor + investments, and make informed financial decisions.
(url, {}); + + return this.http.post(url, undefined, { params }); } public fetchSymbolForDate({ @@ -194,7 +208,7 @@ export class AdminService { }) { const url = `/api/v1/symbol/${dataSource}/${symbol}/${dateString}`; - return this.http.get(url); + return this.http.get(url); } public patchAssetProfile( diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index 3cb5a8c75..6f0b17ed1 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -9,17 +9,13 @@ import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto' import { UpdateTagDto } from '@ghostfolio/api/app/endpoints/tags/update-tag.dto'; import { CreateWatchlistItemDto } from '@ghostfolio/api/app/endpoints/watchlist/create-watchlist-item.dto'; import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; -import { - Activities, - Activity -} from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto'; import { SymbolItem } from '@ghostfolio/api/app/symbol/interfaces/symbol-item.interface'; import { DeleteOwnUserDto } from '@ghostfolio/api/app/user/delete-own-user.dto'; import { UserItem } from '@ghostfolio/api/app/user/interfaces/user-item.interface'; import { UpdateOwnAccessTokenDto } from '@ghostfolio/api/app/user/update-own-access-token.dto'; import { UpdateUserSettingDto } from '@ghostfolio/api/app/user/update-user-setting.dto'; -import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { PropertyDto } from '@ghostfolio/api/services/property/property.dto'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { @@ -27,13 +23,17 @@ import { AccessTokenResponse, AccountBalancesResponse, AccountsResponse, + ActivitiesResponse, + ActivityResponse, AiPromptResponse, ApiKeyResponse, AssetProfileIdentifier, + AssetResponse, BenchmarkMarketDataDetailsResponse, BenchmarkResponse, + CreateStripeCheckoutSessionResponse, DataProviderHealthResponse, - Export, + ExportResponse, Filter, ImportResponse, InfoItem, @@ -169,17 +169,20 @@ export class DataService { return params; } - public createCheckoutSession({ + public createStripeCheckoutSession({ couponId, priceId }: { couponId?: string; priceId: string; }) { - return this.http.post('/api/v1/subscription/stripe/checkout-session', { - couponId, - priceId - }); + return this.http.post( + '/api/v1/subscription/stripe/checkout-session', + { + couponId, + priceId + } + ); } public fetchAccount(aAccountId: string) { @@ -212,7 +215,7 @@ export class DataService { sortColumn?: string; sortDirection?: SortDirection; take?: number; - }): Observable { + }): Observable { let params = this.buildFiltersAsQueryParams({ filters }); if (range) { @@ -247,7 +250,7 @@ export class DataService { } public fetchActivity(aActivityId: string) { - return this.http.get(`/api/v1/order/${aActivityId}`).pipe( + return this.http.get(`/api/v1/order/${aActivityId}`).pipe( map((activity) => { activity.createdAt = parseISO(activity.createdAt as unknown as string); activity.date = parseISO(activity.date as unknown as string); @@ -291,7 +294,7 @@ export class DataService { date: Date; symbol: string; }) { - return this.http.get( + return this.http.get( `/api/v1/exchange-rate/${symbol}/${format(date, DATE_FORMAT, { in: utc })}` ); } @@ -345,7 +348,7 @@ export class DataService { public fetchAsset({ dataSource, symbol - }: AssetProfileIdentifier): Observable { + }: AssetProfileIdentifier): Observable { return this.http.get(`/api/v1/asset/${dataSource}/${symbol}`).pipe( map((data) => { for (const item of data.marketData) { @@ -406,7 +409,7 @@ export class DataService { params = params.append('activityIds', activityIds.join(',')); } - return this.http.get('/api/v1/export', { + return this.http.get('/api/v1/export', { params }); } diff --git a/apps/client/src/app/services/ics/ics.service.ts b/apps/client/src/app/services/ics/ics.service.ts index b94b2dee3..a3235380e 100644 --- a/apps/client/src/app/services/ics/ics.service.ts +++ b/apps/client/src/app/services/ics/ics.service.ts @@ -1,5 +1,5 @@ import { capitalize } from '@ghostfolio/common/helper'; -import { Export } from '@ghostfolio/common/interfaces'; +import { ExportResponse } from '@ghostfolio/common/interfaces'; import { Injectable } from '@angular/core'; import { Type } from '@prisma/client'; @@ -13,7 +13,7 @@ export class IcsService { private readonly ICS_LINE_BREAK = '\r\n'; public transformActivitiesToIcsContent( - aActivities: Export['activities'] + aActivities: ExportResponse['activities'] ): string { const header = [ 'BEGIN:VCALENDAR', diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index 323f07a5b..0f2715e47 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -76,12 +76,8 @@ export class ImportActivitiesService { updateAccountBalance: false }); - if ( - dataSource === DataSource.MANUAL && - !['FEE', 'INTEREST', 'LIABILITY'].includes(type) - ) { + if (dataSource === DataSource.MANUAL) { // Create synthetic asset profile for MANUAL data source - // (except for FEE, INTEREST, and LIABILITY which don't require asset profiles) assetProfiles.push({ currency, symbol, diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 989cdb171..c68b369d4 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -42,7 +42,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -435,7 +435,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -499,11 +499,11 @@ Divisa apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -523,7 +523,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -559,11 +559,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -603,7 +603,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -615,7 +615,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -639,7 +639,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -671,7 +671,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -691,7 +691,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -707,7 +707,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -831,7 +831,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -907,7 +907,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -963,7 +963,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -1011,7 +1011,7 @@ El preu de mercat actual és apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -1043,7 +1043,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1055,7 +1055,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -1071,11 +1071,11 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1091,11 +1091,11 @@ Països apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1107,7 +1107,7 @@ Mapatge de Símbols apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -1123,7 +1123,7 @@ Configuració del Proveïdor de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -1131,7 +1131,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -1139,11 +1139,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1159,7 +1159,7 @@ Notes apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1199,7 +1199,7 @@ Nom, símbol o ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1307,7 +1307,7 @@ Recollida de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1390,6 +1390,14 @@ 8 + + Current year + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform Afegeix una plataforma @@ -1459,7 +1467,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1495,7 +1503,7 @@ Actuar com un altre Usuari apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -1503,7 +1511,7 @@ Eliminar Usuari apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1551,7 +1559,7 @@ Punt de Referència apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1683,7 +1691,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1898,6 +1906,14 @@ 52 + + Current week + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity Afegeix activitat @@ -1963,7 +1979,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1999,7 +2015,7 @@ Inicieu la sessió amb la identitat d’Internet apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -2007,7 +2023,7 @@ Inicieu la sessió amb Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -2015,7 +2031,7 @@ Manteniu la sessió iniciada apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -2291,39 +2307,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD YTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1 any + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5 anys + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max Màx + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -2377,6 +2409,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -2391,7 +2427,7 @@ Introduïu el vostre codi de cupó. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -2399,7 +2435,7 @@ No s’ha pogut bescanviar el codi de cupó apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -2407,7 +2443,7 @@ El codi del cupó s’ha bescanviat apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -2415,7 +2451,7 @@ Torna a carregar apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -2531,7 +2567,7 @@ Localització apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2695,7 +2731,7 @@ D’acord apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -2971,7 +3007,7 @@ Visió general apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -3872,7 +3908,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -3980,7 +4016,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -3996,7 +4032,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -4012,7 +4048,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -4071,8 +4107,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -5233,7 +5269,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -5245,7 +5281,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -5269,7 +5305,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -5277,7 +5313,7 @@ Exporta l’esborrany com a ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -5301,15 +5337,19 @@ Setmana fins avui libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 WTD WTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5317,15 +5357,19 @@ Mes fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5333,12 +5377,16 @@ Any fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 year any + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5349,15 +5397,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years anys + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5373,7 +5425,7 @@ Interval de dates libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5381,7 +5433,7 @@ Restableix els filtres libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -5389,7 +5441,7 @@ Aplicar filtres libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5561,14 +5613,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -5589,11 +5641,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5603,14 +5655,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -5621,11 +5673,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5801,7 +5853,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5819,14 +5871,14 @@ Tag Etiqueta - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -5836,6 +5888,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years Anys @@ -5865,7 +5925,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -6465,7 +6525,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -6513,11 +6573,11 @@ Cancel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6569,7 +6629,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7023,7 +7083,7 @@ Could not generate an API key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7031,7 +7091,7 @@ Set this API key in your self-hosted environment: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7039,7 +7099,7 @@ Ghostfolio Premium Data Provider API Key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7047,7 +7107,7 @@ Do you really want to generate a new API key? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7087,7 +7147,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7187,7 +7247,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7195,7 +7255,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7203,7 +7263,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7211,7 +7271,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7219,7 +7279,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7227,7 +7287,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7235,7 +7295,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7243,7 +7303,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7391,7 +7451,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7403,7 +7463,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7411,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7419,7 +7479,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7476,7 +7536,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7484,7 +7544,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7492,7 +7552,7 @@ Apply apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7524,7 +7584,7 @@ Gather Historical Market Data apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -7838,6 +7898,14 @@ 5 + + Current month + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new new @@ -8475,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Follow Ghostfolio on LinkedIn diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 977b67439..2db1d100f 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -62,7 +62,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -106,7 +106,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -198,11 +198,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -242,7 +242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -254,7 +254,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -278,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -314,7 +314,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -386,7 +386,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -434,7 +434,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -466,7 +466,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -562,7 +562,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -638,7 +638,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -714,7 +714,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -798,7 +798,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -834,7 +834,7 @@ Einloggen mit Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -842,7 +842,7 @@ Einloggen mit Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -850,7 +850,7 @@ Eingeloggt bleiben apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -930,11 +930,11 @@ Sektoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -950,11 +950,11 @@ Länder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1022,39 +1022,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD YTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1J + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5J + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max Max + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1062,7 +1078,7 @@ Okay apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1130,7 +1146,7 @@ Bitte gebe deinen Gutscheincode ein. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1138,7 +1154,7 @@ Gutscheincode konnte nicht eingelöst werden apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1146,7 +1162,7 @@ Gutscheincode wurde eingelöst apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1154,7 +1170,7 @@ Neu laden apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1218,7 +1234,7 @@ Lokalität apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1264,6 +1280,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -1342,11 +1362,11 @@ Währung apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1366,7 +1386,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -1582,7 +1602,7 @@ Übersicht apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -1833,6 +1853,14 @@ 10 + + Current week + Aktuelle Woche + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity Aktivität hinzufügen @@ -1862,7 +1890,7 @@ Name, Symbol oder ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1890,7 +1918,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1906,7 +1934,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -1914,7 +1942,7 @@ Kommentar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1938,7 +1966,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -2178,7 +2206,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2190,7 +2218,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2202,7 +2230,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2210,7 +2238,7 @@ Kopieren libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2218,7 +2246,7 @@ Geplante Aktivität als ICS exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2342,7 +2370,7 @@ Sektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2354,7 +2382,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -2570,7 +2598,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2662,14 +2690,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2682,11 +2710,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2696,14 +2724,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Symbol @@ -2718,7 +2746,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2736,14 +2764,14 @@ Tag Tag - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -3002,7 +3030,7 @@ Symbol Zuordnung apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -3062,11 +3090,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3153,8 +3181,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3186,7 +3214,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3650,7 +3678,7 @@ Historische Marktdaten synchronisieren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -3702,7 +3730,7 @@ Benutzer verwenden apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3710,7 +3738,7 @@ Benutzer löschen apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3737,6 +3765,14 @@ 8 + + Current year + Aktuelles Jahr + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform Plattform hinzufügen @@ -3750,11 +3786,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3949,6 +3985,14 @@ 32 + + View Details + Details anzeigen + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Verbindlichkeiten @@ -4110,7 +4154,7 @@ Scraper Konfiguration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -5292,7 +5336,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5612,7 +5656,7 @@ Der aktuelle Marktpreis ist apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -5620,7 +5664,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -5628,7 +5672,7 @@ Zeitraum libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5780,15 +5824,19 @@ Seit Wochenbeginn libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 WTD WTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5796,15 +5844,19 @@ Seit Monatsbeginn libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5812,7 +5864,7 @@ Seit Jahresbeginn libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5840,12 +5892,16 @@ Filter zurücksetzen libs/ui/src/lib/assistant/assistant.html - 266 + 205 year Jahr + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5856,15 +5912,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years Jahre + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5872,7 +5932,7 @@ Filter anwenden libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5880,7 +5940,7 @@ Finanzmarktdaten synchronisieren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6489,7 +6549,7 @@ Fehler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -6537,11 +6597,11 @@ Abbrechen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6593,7 +6653,7 @@ Schliessen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7047,7 +7107,7 @@ API-Schlüssel konnte nicht erstellt werden apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7055,7 +7115,7 @@ Setze diesen API-Schlüssel in deiner selbst gehosteten Umgebung: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7063,7 +7123,7 @@ API-Schlüssel für den Ghostfolio Premium Datenanbieter apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7071,7 +7131,7 @@ Möchtest du wirklich einen neuen API-Schlüssel erstellen? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7111,7 +7171,7 @@ Speichern apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7211,7 +7271,7 @@ Verzögert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7219,7 +7279,7 @@ Sofort apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7227,7 +7287,7 @@ Standardmarktpreis apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7235,7 +7295,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7243,7 +7303,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7251,7 +7311,7 @@ HTTP Request-Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7259,7 +7319,7 @@ Tagesende apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7267,7 +7327,7 @@ in Echtzeit apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7415,7 +7475,7 @@ Sicherheits-Token apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7427,7 +7487,7 @@ Möchtest du für diesen Benutzer wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7435,7 +7495,7 @@ Konto, Position oder Seite finden... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7443,7 +7503,7 @@ Sicherheits-Token generieren apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7500,7 +7560,7 @@ () wird bereits verwendet. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7508,7 +7568,7 @@ Bei der Änderung zu () ist ein Fehler aufgetreten. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7516,7 +7576,7 @@ Übernehmen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7838,6 +7898,14 @@ 5 + + Current month + Aktueller Monat + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new neu @@ -8475,6 +8543,14 @@ 128 + + Registration Date + Registrierungsdatum + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Folge Ghostfolio auf LinkedIn diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 8bbbc31e9..29746f597 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -63,7 +63,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -107,7 +107,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -199,11 +199,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -243,7 +243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -255,7 +255,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -279,7 +279,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -315,7 +315,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -387,7 +387,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -435,7 +435,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -467,7 +467,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -547,7 +547,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -623,7 +623,7 @@ ¿Estás seguro de eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -699,7 +699,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -783,7 +783,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -819,7 +819,7 @@ Iniciar sesión con Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -827,7 +827,7 @@ Iniciar sesión con Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -835,7 +835,7 @@ Seguir conectado apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -915,11 +915,11 @@ Sectores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -935,11 +935,11 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1007,39 +1007,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD Desde principio de año + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1 año + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5 años + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max Máximo + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1047,7 +1063,7 @@ De acuerdo apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1115,7 +1131,7 @@ Por favor, ingresa tu código de cupón: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1123,7 +1139,7 @@ No se puede canjear este código de cupón apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1131,7 +1147,7 @@ El codigo de cupón ha sido canjeado apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1139,7 +1155,7 @@ Refrescar apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1203,7 +1219,7 @@ Ubicación apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1249,6 +1265,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -1327,11 +1347,11 @@ Divisa base apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1351,7 +1371,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -1567,7 +1587,7 @@ Visión general apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -1818,6 +1838,14 @@ 10 + + Current week + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity Añadir operación @@ -1847,7 +1875,7 @@ Nombre, símbolo o ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1875,7 +1903,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1891,7 +1919,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -1899,7 +1927,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1923,7 +1951,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -2163,7 +2191,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2175,7 +2203,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2187,7 +2215,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2195,7 +2223,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2203,7 +2231,7 @@ Exportar borrador como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2375,7 +2403,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2387,7 +2415,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -2547,7 +2575,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2647,14 +2675,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2667,11 +2695,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2681,14 +2709,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Symbol @@ -2703,7 +2731,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2721,14 +2749,14 @@ Tag Etiqueta - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -2987,7 +3015,7 @@ Mapeo de símbolos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -3047,11 +3075,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3138,8 +3166,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3171,7 +3199,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3679,7 +3707,7 @@ Suplantar usuario apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3687,7 +3715,7 @@ Eliminar usuario apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3714,6 +3742,14 @@ 8 + + Current year + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform Agregar plataforma @@ -3727,11 +3763,11 @@ ¿La URL? apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3926,6 +3962,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Pasivos @@ -4087,7 +4131,7 @@ Configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -5269,7 +5313,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5589,7 +5633,7 @@ El precio actual de mercado es apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -5597,7 +5641,7 @@ Prueba apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -5605,7 +5649,7 @@ Rango de fechas libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5757,15 +5801,19 @@ Semana hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 WTD WTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5773,15 +5821,19 @@ Mes hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5789,7 +5841,7 @@ El año hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5817,12 +5869,16 @@ Reiniciar filtros libs/ui/src/lib/assistant/assistant.html - 266 + 205 year año + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5833,15 +5889,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years años + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5849,7 +5909,7 @@ Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5857,7 +5917,7 @@ Recopilación de datos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6466,7 +6526,7 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -6514,11 +6574,11 @@ Cancelar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6570,7 +6630,7 @@ Cerca apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7024,7 +7084,7 @@ No se pudo generar una clave API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7032,7 +7092,7 @@ Configure esta clave API en su entorno autohospedado: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7040,7 +7100,7 @@ Clave API del proveedor de datos premium de Ghostfolio apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7048,7 +7108,7 @@ ¿Realmente desea generar una nueva clave API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7088,7 +7148,7 @@ Ahorrar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7188,7 +7248,7 @@ Perezoso apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7196,7 +7256,7 @@ Instantáneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7204,7 +7264,7 @@ Precio de mercado por defecto apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7212,7 +7272,7 @@ Modo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7220,7 +7280,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7228,7 +7288,7 @@ Encabezados de solicitud HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7236,7 +7296,7 @@ final del día apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7244,7 +7304,7 @@ en tiempo real apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7392,7 +7452,7 @@ Token de seguridad apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7404,7 +7464,7 @@ ¿Realmente deseas generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7412,7 +7472,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7420,7 +7480,7 @@ Generar token de seguridad apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7477,7 +7537,7 @@ () ya está en uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7485,7 +7545,7 @@ Ocurrió un error al actualizar a (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7493,7 +7553,7 @@ Aplicar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7525,7 +7585,7 @@ Recopilar datos históricos del mercado apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -7839,6 +7899,14 @@ 5 + + Current month + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new nuevo @@ -8476,6 +8544,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Siga a Ghostfolio en LinkedIn diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 0441ee54e..9b40a3031 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -54,7 +54,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -114,7 +114,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -178,11 +178,11 @@ Devise apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -202,7 +202,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -254,11 +254,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -298,7 +298,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -310,7 +310,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -334,7 +334,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -362,7 +362,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -442,7 +442,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -490,7 +490,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -530,7 +530,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -586,7 +586,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -602,7 +602,7 @@ Secteur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -614,7 +614,7 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -630,11 +630,11 @@ Secteurs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -650,11 +650,11 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -666,7 +666,7 @@ Équivalence de Symboles apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -674,7 +674,7 @@ Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -830,7 +830,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -898,7 +898,7 @@ Référence apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -946,7 +946,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -1078,7 +1078,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1114,7 +1114,7 @@ Se connecter avec Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -1122,7 +1122,7 @@ Se connecter avec Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -1130,7 +1130,7 @@ Rester connecté apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1242,7 +1242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1266,39 +1266,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD CDA + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1A + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5A + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max Max + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1342,7 +1358,7 @@ D’accord apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1422,7 +1438,7 @@ Veuillez entrer votre code promotionnel. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1430,7 +1446,7 @@ Le code promotionnel n’a pas pu être appliqué apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1438,7 +1454,7 @@ Le code promotionnel a été appliqué apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1446,7 +1462,7 @@ Rafraîchir apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1518,7 +1534,7 @@ Paramètres régionaux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1596,6 +1612,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -1958,7 +1978,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -1997,6 +2017,14 @@ 10 + + Current week + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity Ajouter Activité @@ -2026,7 +2054,7 @@ Nom, symbole, ou ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2050,7 +2078,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -2586,7 +2614,7 @@ Aperçu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -2638,7 +2666,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2650,7 +2678,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2662,7 +2690,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2670,7 +2698,7 @@ Dupliquer libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2678,7 +2706,7 @@ Exporter Brouillon sous ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2794,14 +2822,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2814,11 +2842,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2828,14 +2856,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -2846,11 +2874,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2906,7 +2934,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2924,14 +2952,14 @@ Tag Étiquette - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -3137,8 +3165,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3170,7 +3198,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3678,7 +3706,7 @@ Voir en tant que ... apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3686,7 +3714,7 @@ Supprimer l’Utilisateur apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3713,6 +3741,14 @@ 8 + + Current year + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform Ajouter une Plateforme @@ -3726,11 +3762,11 @@ Lien apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3925,6 +3961,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Dettes @@ -4086,7 +4130,7 @@ Configuration du Scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -5268,7 +5312,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5588,7 +5632,7 @@ Le prix actuel du marché est apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -5596,7 +5640,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -5604,7 +5648,7 @@ Intervalle de Date libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5756,15 +5800,19 @@ Week to date libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 WTD WTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5772,15 +5820,19 @@ Month to date libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5788,7 +5840,7 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5816,12 +5868,16 @@ Réinitialiser les Filtres libs/ui/src/lib/assistant/assistant.html - 266 + 205 year année + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5832,15 +5888,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years années + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5848,7 +5908,7 @@ Appliquer les Filtres libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5856,7 +5916,7 @@ Collecter les données apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6465,7 +6525,7 @@ Erreur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -6513,11 +6573,11 @@ Annuler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6569,7 +6629,7 @@ Fermer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7023,7 +7083,7 @@ Impossible de générer une clé API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7031,7 +7091,7 @@ Définissez cette clé API dans votre environnement auto-hébergé : apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7039,7 +7099,7 @@ Clé API du fournisseur de données Ghostfolio Premium apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7047,7 +7107,7 @@ Voulez-vous vraiment générer une nouvelle clé API ? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7087,7 +7147,7 @@ Sauvegarder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7187,7 +7247,7 @@ Paresseux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7195,7 +7255,7 @@ Instantané apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7203,7 +7263,7 @@ Prix du marché par défaut apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7211,7 +7271,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7219,7 +7279,7 @@ Selecteur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7227,7 +7287,7 @@ En-têtes de requête HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7235,7 +7295,7 @@ fin de journée apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7243,7 +7303,7 @@ temps réel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7391,7 +7451,7 @@ Jeton de sécurité apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7403,7 +7463,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité pour cet utilisateur ? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7411,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7419,7 +7479,7 @@ Générer un jeton de sécurité apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7476,7 +7536,7 @@ () est déjà utilisé. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7484,7 +7544,7 @@ Une erreur s’est produite lors de la mise à jour vers (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7492,7 +7552,7 @@ Appliquer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7524,7 +7584,7 @@ Collecter les données du marché historique apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -7838,6 +7898,14 @@ 5 + + Current month + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new new @@ -8475,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Follow Ghostfolio on LinkedIn diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 22683ad89..f720742c8 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -63,7 +63,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -107,7 +107,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -199,11 +199,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -243,7 +243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -255,7 +255,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -279,7 +279,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -315,7 +315,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -387,7 +387,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -435,7 +435,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -467,7 +467,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -547,7 +547,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -623,7 +623,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -699,7 +699,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -783,7 +783,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -819,7 +819,7 @@ Accedi con Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -827,7 +827,7 @@ Accedi con Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -835,7 +835,7 @@ Rimani connesso apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -915,11 +915,11 @@ Settori apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -935,11 +935,11 @@ Paesi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1007,39 +1007,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD anno corrente + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1 anno + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5 anni + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max Massimo + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1047,7 +1063,7 @@ Bene apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1115,7 +1131,7 @@ Inserisci il tuo codice del buono: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1123,7 +1139,7 @@ Impossibile riscattare il codice del buono apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1131,7 +1147,7 @@ Il codice del buono è stato riscattato apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1139,7 +1155,7 @@ Ricarica apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1203,7 +1219,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1249,6 +1265,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -1327,11 +1347,11 @@ Valuta apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1351,7 +1371,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -1567,7 +1587,7 @@ Panoramica apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -1818,6 +1838,14 @@ 10 + + Current week + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity Aggiungi un’attività @@ -1847,7 +1875,7 @@ Nome, simbolo o ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1875,7 +1903,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1891,7 +1919,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -1899,7 +1927,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1923,7 +1951,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -2163,7 +2191,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2175,7 +2203,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2187,7 +2215,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2195,7 +2223,7 @@ Clona libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2203,7 +2231,7 @@ Esporta la bozza come ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2375,7 +2403,7 @@ Settore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2387,7 +2415,7 @@ Paese apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -2547,7 +2575,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2647,14 +2675,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2667,11 +2695,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2681,14 +2709,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Symbol @@ -2703,7 +2731,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2721,14 +2749,14 @@ Tag Etichetta - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -2987,7 +3015,7 @@ Mappatura dei simboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -3047,11 +3075,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3138,8 +3166,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3171,7 +3199,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3679,7 +3707,7 @@ Imita l’utente apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3687,7 +3715,7 @@ Elimina l’utente apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3714,6 +3742,14 @@ 8 + + Current year + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform Aggiungi la piattaforma @@ -3727,11 +3763,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3926,6 +3962,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Passività @@ -4087,7 +4131,7 @@ Configurazione dello scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -5269,7 +5313,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5589,7 +5633,7 @@ L’attuale prezzo di mercato è apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -5597,7 +5641,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -5605,7 +5649,7 @@ Intervallo di date libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5757,15 +5801,19 @@ Da inizio settimana libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 WTD Settimana corrente + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5773,15 +5821,19 @@ Da inizio mese libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD Mese corrente + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5789,7 +5841,7 @@ Da inizio anno libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5817,12 +5869,16 @@ Reset Filtri libs/ui/src/lib/assistant/assistant.html - 266 + 205 year anno + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5833,15 +5889,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years anni + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5849,7 +5909,7 @@ Applica i Filtri libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5857,7 +5917,7 @@ Raccolta Dati apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6466,7 +6526,7 @@ Errore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -6514,11 +6574,11 @@ Annulla apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6570,7 +6630,7 @@ Chiudi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7024,7 +7084,7 @@ Non è stato possibile generare un API key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7032,7 +7092,7 @@ Imposta questa API key nel tuo ambiente self-hosted: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7040,7 +7100,7 @@ API Key for Ghostfolio Premium Data Provider apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7048,7 +7108,7 @@ Vuoi davvero generare una nuova API key? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7088,7 +7148,7 @@ Salva apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7188,7 +7248,7 @@ Pigro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7196,7 +7256,7 @@ Istantaneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7204,7 +7264,7 @@ Prezzo di mercato predefinito apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7212,7 +7272,7 @@ Modalità apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7220,7 +7280,7 @@ Selettore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7228,7 +7288,7 @@ Intestazioni della richiesta HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7236,7 +7296,7 @@ fine giornata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7244,7 +7304,7 @@ in tempo reale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7392,7 +7452,7 @@ Token di sicurezza apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7404,7 +7464,7 @@ Vuoi davvero generare un nuovo token di sicurezza per questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7412,7 +7472,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7420,7 +7480,7 @@ Genera Token di Sicurezza apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7477,7 +7537,7 @@ () e gia in uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7485,7 +7545,7 @@ Si è verificato un errore durante l’aggiornamento di (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7493,7 +7553,7 @@ Applica apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7525,7 +7585,7 @@ Raccogli dati storici di mercato apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -7839,6 +7899,14 @@ 5 + + Current month + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new nuovo @@ -8476,6 +8544,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Follow Ghostfolio on LinkedIn diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 5a1e0bc13..869b932aa 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -62,7 +62,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -106,7 +106,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -198,11 +198,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -242,7 +242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -254,7 +254,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -278,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -314,7 +314,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -386,7 +386,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -434,7 +434,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -466,7 +466,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -546,7 +546,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -622,7 +622,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -698,7 +698,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -782,7 +782,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -818,7 +818,7 @@ Aanmelden met Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -826,7 +826,7 @@ Aanmelden met Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -834,7 +834,7 @@ Aangemeld blijven apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -914,11 +914,11 @@ Sectoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -934,11 +934,11 @@ Landen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1006,39 +1006,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD YTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1J + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5J + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max Max + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1046,7 +1062,7 @@ Oké apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1114,7 +1130,7 @@ Voer je couponcode in: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1122,7 +1138,7 @@ Kon je kortingscode niet inwisselen apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1130,7 +1146,7 @@ Je couponcode is ingewisseld apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1138,7 +1154,7 @@ Herladen apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1202,7 +1218,7 @@ Locatie apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1248,6 +1264,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -1326,11 +1346,11 @@ Valuta apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1350,7 +1370,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -1566,7 +1586,7 @@ Overzicht apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -1817,6 +1837,14 @@ 10 + + Current week + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity Activiteit toevoegen @@ -1846,7 +1874,7 @@ Naam, symbool of ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1874,7 +1902,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1890,7 +1918,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -1898,7 +1926,7 @@ Opmerking apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1922,7 +1950,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -2162,7 +2190,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2174,7 +2202,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2186,7 +2214,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2194,7 +2222,7 @@ Kloon libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2202,7 +2230,7 @@ Concept exporteren als ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2374,7 +2402,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2386,7 +2414,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -2546,7 +2574,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -2646,14 +2674,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2666,11 +2694,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2680,14 +2708,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Symbol @@ -2702,7 +2730,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2720,14 +2748,14 @@ Tag Label - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -2986,7 +3014,7 @@ Symbool toewijzen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -3046,11 +3074,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3137,8 +3165,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3170,7 +3198,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3678,7 +3706,7 @@ Gebruiker immiteren apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3686,7 +3714,7 @@ Gebruiker verwijderen apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3713,6 +3741,14 @@ 8 + + Current year + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform Platform toevoegen @@ -3726,11 +3762,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3925,6 +3961,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Verplichtingen @@ -4086,7 +4130,7 @@ Scraper instellingen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -5268,7 +5312,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5588,7 +5632,7 @@ De huidige markt waarde is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -5596,7 +5640,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -5604,7 +5648,7 @@ Datumbereik libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5756,15 +5800,19 @@ Week tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 WTD Week tot nu toe + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5772,15 +5820,19 @@ Maand tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5788,7 +5840,7 @@ Jaar tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5816,12 +5868,16 @@ Filters Herstellen libs/ui/src/lib/assistant/assistant.html - 266 + 205 year jaar + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5832,15 +5888,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years jaren + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5848,7 +5908,7 @@ Filters Toepassen libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5856,7 +5916,7 @@ Data Verzamelen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6465,7 +6525,7 @@ Fout apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -6513,11 +6573,11 @@ Annuleren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6569,7 +6629,7 @@ Sluiten apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7023,7 +7083,7 @@ Er kon geen API-sleutel worden gegenereerd apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7031,7 +7091,7 @@ Stel deze API-sleutel in uw zelf-gehoste omgeving in: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7039,7 +7099,7 @@ Ghostfolio Premium Gegevensleverancier API-sleutel apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7047,7 +7107,7 @@ Wilt u echt een nieuwe API-sleutel genereren? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7087,7 +7147,7 @@ Opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7187,7 +7247,7 @@ Lui apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7195,7 +7255,7 @@ Direct apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7203,7 +7263,7 @@ Standaard Marktprijs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7211,7 +7271,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7219,7 +7279,7 @@ Kiezer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7227,7 +7287,7 @@ HTTP Verzoek Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7235,7 +7295,7 @@ eind van de dag apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7243,7 +7303,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7391,7 +7451,7 @@ Beveiligingstoken apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7403,7 +7463,7 @@ Wilt u echt een nieuw beveiligingstoken voor deze gebruiker aanmaken? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7411,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7419,7 +7479,7 @@ Beveiligingstoken Aanmaken apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7476,7 +7536,7 @@ () is al in gebruik. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7484,7 +7544,7 @@ Er is een fout opgetreden tijdens het updaten naar (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7492,7 +7552,7 @@ Toepassen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7524,7 +7584,7 @@ Verzamel Historische Marktgegevens apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -7838,6 +7898,14 @@ 5 + + Current month + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new nieuw @@ -8475,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Volg Ghostfolio op LinkedIn diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 91b0ee581..87c485b25 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -263,7 +263,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -351,7 +351,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -415,11 +415,11 @@ Waluta apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -439,7 +439,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -475,11 +475,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -519,7 +519,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -531,7 +531,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -555,7 +555,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -587,7 +587,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -603,7 +603,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -711,7 +711,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -787,7 +787,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -843,7 +843,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -883,7 +883,7 @@ Sektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -895,7 +895,7 @@ Kraj apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -911,11 +911,11 @@ Sektory apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -931,11 +931,11 @@ Kraje apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -947,7 +947,7 @@ Mapowanie Symboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -963,7 +963,7 @@ Konfiguracja Scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -971,7 +971,7 @@ Notatka apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1011,7 +1011,7 @@ Nazwa, symbol lub ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1179,11 +1179,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1210,6 +1210,14 @@ 8 + + Current year + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform Dodaj platformę @@ -1279,7 +1287,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1315,7 +1323,7 @@ Wciel się w Użytkownika apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -1323,7 +1331,7 @@ Usuń Użytkownika apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1371,7 +1379,7 @@ Poziom Odniesienia (Benchmark) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1427,7 +1435,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -1586,6 +1594,14 @@ 52 + + Current week + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity Dodaj działalność @@ -1651,7 +1667,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1687,7 +1703,7 @@ Zaloguj się przy użyciu Tożsamości Internetowej (Internet Identity) apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -1695,7 +1711,7 @@ Zaloguj się przez Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -1703,7 +1719,7 @@ Pozostań zalogowany apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1847,7 +1863,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2039,39 +2055,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD Liczony od początku roku (year-to-date) + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1 rok + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5 lat + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max Maksimum + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -2103,7 +2135,7 @@ Wpisz kod kuponu: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -2111,7 +2143,7 @@ Nie udało się zrealizować kodu kuponu apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -2119,7 +2151,7 @@ Kupon został zrealizowany apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -2127,7 +2159,7 @@ Odśwież apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -2219,7 +2251,7 @@ Ustawienia Regionalne apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2321,6 +2353,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Export Data @@ -2371,7 +2407,7 @@ Okej apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -2631,7 +2667,7 @@ Przegląd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -3491,7 +3527,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -3607,7 +3643,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -3623,7 +3659,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -3639,7 +3675,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3698,8 +3734,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -4768,7 +4804,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -4780,7 +4816,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -4796,7 +4832,7 @@ Sklonuj libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4804,7 +4840,7 @@ Eksportuj Wersję Roboczą jako ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -4968,14 +5004,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -4996,11 +5032,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5010,14 +5046,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -5028,11 +5064,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5200,7 +5236,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5218,14 +5254,14 @@ Tag Tag - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -5235,6 +5271,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years Lata @@ -5264,7 +5308,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5588,7 +5632,7 @@ Obecna cena rynkowa wynosi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -5596,7 +5640,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -5604,7 +5648,7 @@ Zakres Dat libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5756,15 +5800,19 @@ Dotychczasowy tydzień libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 WTD WTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5772,15 +5820,19 @@ Od początku miesiąca libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5788,7 +5840,7 @@ Od początku roku libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5816,12 +5868,16 @@ Resetuj Filtry libs/ui/src/lib/assistant/assistant.html - 266 + 205 year rok + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5832,15 +5888,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years lata + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5848,7 +5908,7 @@ Zastosuj Filtry libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5856,7 +5916,7 @@ Gromadzenie Danych apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6465,7 +6525,7 @@ Błąd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -6513,11 +6573,11 @@ Anuluj apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6569,7 +6629,7 @@ Zamknij apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7023,7 +7083,7 @@ Nie udało się wygenerować klucza API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7031,7 +7091,7 @@ Ustaw ten klucz API w samodzielnie hostowanym środowisku: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7039,7 +7099,7 @@ Klucz API dostawcy danych Premium Ghostfolio apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7047,7 +7107,7 @@ Czy na pewno chcesz wygenerować nowy klucz API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7087,7 +7147,7 @@ Zapisz apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7187,7 +7247,7 @@ Leniwy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7195,7 +7255,7 @@ Natychmiastowy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7203,7 +7263,7 @@ Domyślna cena rynkowa apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7211,7 +7271,7 @@ Tryb apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7219,7 +7279,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7227,7 +7287,7 @@ Nagłówki żądań HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7235,7 +7295,7 @@ koniec dnia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7243,7 +7303,7 @@ w czasie rzeczywistym apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7391,7 +7451,7 @@ Token bezpieczeństwa apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7403,7 +7463,7 @@ Czy napewno chcesz wygenerować nowy token bezpieczeństwa dla tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7411,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7419,7 +7479,7 @@ Generowanie Tokena Zabezpieczającego apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7476,7 +7536,7 @@ () jest już w użyciu. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7484,7 +7544,7 @@ Wystąpił błąd podczas aktualizacji do (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7492,7 +7552,7 @@ Zatwierdź apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7524,7 +7584,7 @@ Zbierz historyczne dane rynkowe apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -7838,6 +7898,14 @@ 5 + + Current month + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new nowy @@ -8475,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Follow Ghostfolio on LinkedIn diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 63afd8e3a..8d93b9ecb 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -54,7 +54,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -114,7 +114,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -178,11 +178,11 @@ Moeda apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -202,7 +202,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -254,11 +254,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -298,7 +298,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -310,7 +310,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -334,7 +334,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -362,7 +362,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -442,7 +442,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -490,7 +490,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -530,7 +530,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -586,7 +586,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -702,7 +702,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -770,7 +770,7 @@ Referência apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -818,7 +818,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -958,7 +958,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -994,7 +994,7 @@ Iniciar sessão com Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -1002,7 +1002,7 @@ Iniciar sessão com Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -1010,7 +1010,7 @@ Manter sessão iniciada apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1122,7 +1122,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1134,7 +1134,7 @@ Setor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1146,7 +1146,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -1162,11 +1162,11 @@ Setores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1182,11 +1182,11 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1254,39 +1254,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD AATD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1A + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5A + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max Máx + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1330,7 +1346,7 @@ OK apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -1410,7 +1426,7 @@ Por favor, insira o seu código de cupão: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -1418,7 +1434,7 @@ Não foi possível resgatar o código de cupão apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -1426,7 +1442,7 @@ Código de cupão foi resgatado apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -1434,7 +1450,7 @@ Atualizar apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -1514,7 +1530,7 @@ Localidade apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1592,6 +1608,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Granted Access @@ -1846,7 +1866,7 @@ Visão geral apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -1934,7 +1954,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -1973,6 +1993,14 @@ 10 + + Current week + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity Adicionar atividade @@ -2002,7 +2030,7 @@ Nome, símbolo or ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2026,7 +2054,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -2034,7 +2062,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2538,7 +2566,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -2550,7 +2578,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -2562,7 +2590,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -2570,7 +2598,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -2578,7 +2606,7 @@ Exportar Rascunho como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -2666,14 +2694,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -2686,11 +2714,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2700,14 +2728,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Emergency Fund @@ -2750,7 +2778,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2768,14 +2796,14 @@ Tag Marcador - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Cash @@ -2994,7 +3022,7 @@ Mapeamento de Símbolo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -3110,11 +3138,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3137,8 +3165,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -3170,7 +3198,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3678,7 +3706,7 @@ Personificar Utilizador apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -3686,7 +3714,7 @@ Apagar Utilizador apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -3713,6 +3741,14 @@ 8 + + Current year + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform Adicionar plataforma @@ -3726,11 +3762,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3925,6 +3961,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Liabilities Responsabilidades @@ -4086,7 +4130,7 @@ Configuração do raspador apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -5268,7 +5312,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5588,7 +5632,7 @@ O preço de mercado atual é apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -5596,7 +5640,7 @@ Teste apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -5604,7 +5648,7 @@ Período libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5756,15 +5800,19 @@ Semana até agora libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 WTD WTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5772,15 +5820,19 @@ Do mês até a data libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5788,7 +5840,7 @@ No acumulado do ano libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5816,12 +5868,16 @@ Redefinir filtros libs/ui/src/lib/assistant/assistant.html - 266 + 205 year ano + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5832,15 +5888,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years anos + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5848,7 +5908,7 @@ Aplicar filtros libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5856,7 +5916,7 @@ Coleta de dados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6465,7 +6525,7 @@ Erro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -6513,11 +6573,11 @@ Cancelar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6569,7 +6629,7 @@ Fechar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7023,7 +7083,7 @@ Não foi possível gerar uma chave de API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7031,7 +7091,7 @@ Defina esta chave de API no seu ambiente auto-hospedado: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7039,7 +7099,7 @@ Chave de API do Provedor de Dados do Ghostfolio Premium apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7047,7 +7107,7 @@ Você realmente deseja gerar uma nova chave de API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7087,7 +7147,7 @@ Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7187,7 +7247,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7195,7 +7255,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7203,7 +7263,7 @@ Preço de mercado padrão apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7211,7 +7271,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7219,7 +7279,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7227,7 +7287,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7235,7 +7295,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7243,7 +7303,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7391,7 +7451,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7403,7 +7463,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7411,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7419,7 +7479,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7476,7 +7536,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7484,7 +7544,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7492,7 +7552,7 @@ Apply apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7524,7 +7584,7 @@ Gather Historical Market Data apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -7838,6 +7898,14 @@ 5 + + Current month + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new new @@ -8475,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Siga o Ghostfolio no LinkedIn diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index cf7de52c7..fd87792f9 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -235,7 +235,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -311,7 +311,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -375,11 +375,11 @@ Para Birimi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -399,7 +399,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -435,11 +435,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -479,7 +479,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -491,7 +491,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -515,7 +515,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -543,7 +543,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -623,7 +623,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -671,7 +671,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -739,7 +739,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -795,7 +795,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -811,7 +811,7 @@ Sektör apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -823,7 +823,7 @@ Ülke apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -839,11 +839,11 @@ Sektörler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -859,11 +859,11 @@ Ülkeler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -875,7 +875,7 @@ Sembol Eşleştirme apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -891,7 +891,7 @@ Veri Toplayıcı Yapılandırması apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -899,7 +899,7 @@ Not apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -923,7 +923,7 @@ Ad, sembol ya da ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1091,11 +1091,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1122,6 +1122,14 @@ 8 + + Current year + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform Platform Ekle @@ -1143,7 +1151,7 @@ Bu kullanıcıyı silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1179,7 +1187,7 @@ Kullanıcıyı Taklit Et apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -1187,7 +1195,7 @@ Kullanıcıyı Sil apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1235,7 +1243,7 @@ Karşılaştırma Ölçütü apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1283,7 +1291,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -1442,6 +1450,14 @@ 52 + + Current week + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity İşlem ekle. @@ -1507,7 +1523,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1543,7 +1559,7 @@ İnternet Kimliği (Internet Identity) ile Oturum Aç apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -1551,7 +1567,7 @@ Google ile Oturum Aç apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -1559,7 +1575,7 @@ Oturumu açık tut apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1691,7 +1707,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1895,39 +1911,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD YTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1Y + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5Y + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max Maks. + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1971,7 +2003,7 @@ Tamam apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -2199,7 +2231,7 @@ Özet apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -2995,7 +3027,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -3087,7 +3119,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -3103,7 +3135,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -3119,7 +3151,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3178,8 +3210,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -4232,7 +4264,7 @@ Lütfen kupon kodunuzu girin: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -4240,7 +4272,7 @@ Kupon kodu kullanılamadı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -4248,7 +4280,7 @@ Kupon kodu kullanıldı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -4256,7 +4288,7 @@ Yeniden Yükle apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -4348,7 +4380,7 @@ Yerel Ayarlar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -4438,6 +4470,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Export Data @@ -4488,7 +4524,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -4500,7 +4536,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -4516,7 +4552,7 @@ Klonla libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4524,7 +4560,7 @@ Taslakları ICS Olarak Dışa Aktar libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -4664,14 +4700,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -4692,11 +4728,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4706,14 +4742,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -4724,11 +4760,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4896,7 +4932,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -4914,14 +4950,14 @@ Tag Etiket - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -4931,6 +4967,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years Yıl @@ -5276,7 +5320,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5588,7 +5632,7 @@ Şu anki piyasa fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -5596,7 +5640,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -5604,7 +5648,7 @@ Tarih Aralığı libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5756,15 +5800,19 @@ Hafta içi libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 WTD WTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5772,15 +5820,19 @@ Ay içi libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -5788,7 +5840,7 @@ Yıl içi libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5816,12 +5868,16 @@ Filtreleri Sıfırla libs/ui/src/lib/assistant/assistant.html - 266 + 205 year Yıl + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5832,15 +5888,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years Yıllar + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5848,7 +5908,7 @@ Filtreleri Uygula libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5856,7 +5916,7 @@ Veri Toplama apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6465,7 +6525,7 @@ Hata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -6513,11 +6573,11 @@ İptal Et apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6569,7 +6629,7 @@ Kapat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7023,7 +7083,7 @@ API anahtarı oluşturulamadı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7031,7 +7091,7 @@ Bu API anahtarını kendi barındırılan ortamınıza ayarlayın: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7039,7 +7099,7 @@ Ghostfolio Premium Veri Sağlayıcı API Anahtarı apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7047,7 +7107,7 @@ Yeni bir API anahtarı oluşturmak istediğinize emin misiniz? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7087,7 +7147,7 @@ Kaydet apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7187,7 +7247,7 @@ Tembel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7195,7 +7255,7 @@ Anında apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7203,7 +7263,7 @@ Varsayılan Piyasa Fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7211,7 +7271,7 @@ Mod apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7219,7 +7279,7 @@ Seçici apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7227,7 +7287,7 @@ HTTP İstek Başlıkları apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7235,7 +7295,7 @@ gün sonu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7243,7 +7303,7 @@ gerçek zamanlı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7391,7 +7451,7 @@ Güvenlik belirteci apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7403,7 +7463,7 @@ Bu kullanıcı için yeni bir güvenlik belirteci oluşturmak istediğinize emin misiniz? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7411,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7419,7 +7479,7 @@ Güvenlik belirteci oluştur apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7476,7 +7536,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7484,7 +7544,7 @@ Güncelleştirilirken bir hata oluştu (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7492,7 +7552,7 @@ Uygula apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7524,7 +7584,7 @@ Geçmiş Piyasa Verilerini Topla apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -7838,6 +7898,14 @@ 5 + + Current month + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new yeni @@ -8475,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Ghostfolio’yu LinkedIn’de takip edin diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 953df6a33..61c9be112 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -42,7 +42,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -459,7 +459,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -523,11 +523,11 @@ Валюта apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -547,7 +547,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -583,11 +583,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -627,7 +627,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -639,7 +639,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -663,7 +663,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -695,7 +695,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -715,7 +715,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -739,7 +739,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -911,7 +911,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -967,7 +967,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -1007,7 +1007,7 @@ Помилка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -1015,7 +1015,7 @@ Поточна ринкова ціна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -1031,7 +1031,7 @@ Сектор apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1043,7 +1043,7 @@ Країна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -1059,11 +1059,11 @@ Сектори apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1079,11 +1079,11 @@ Країни apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1095,7 +1095,7 @@ Зіставлення символів apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -1111,7 +1111,7 @@ Конфігурація скребка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -1119,7 +1119,7 @@ Тест apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -1127,11 +1127,11 @@ URL apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1147,7 +1147,7 @@ Примітка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1195,7 +1195,7 @@ Назва, символ або ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1303,7 +1303,7 @@ Збір даних apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1386,6 +1386,14 @@ 8 + + Current year + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform Додати платформу @@ -1495,7 +1503,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1575,7 +1583,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1615,7 +1623,7 @@ Видавати себе за користувача apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -1623,7 +1631,7 @@ Видалити користувача apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1671,7 +1679,7 @@ Порівняльний показник apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1819,7 +1827,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2034,6 +2042,14 @@ 52 + + Current week + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity Додати активність @@ -2095,7 +2111,7 @@ Увійти з Інтернет-Ідентичністю apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -2103,7 +2119,7 @@ Увійти з Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -2111,7 +2127,7 @@ Залишатися в системі apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -2235,7 +2251,7 @@ Зберегти apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2507,39 +2523,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD З початку року + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1 рік + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5 років + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max Максимум + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -2593,6 +2625,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Me @@ -2635,7 +2671,7 @@ Не вдалося згенерувати ключ API apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -2643,7 +2679,7 @@ ОК apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -2659,7 +2695,7 @@ Встановіть цей ключ API у вашому self-hosted середовищі: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -2667,7 +2703,7 @@ Ключ API Ghostfolio Premium Data Provider apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -2675,7 +2711,7 @@ Ви дійсно хочете згенерувати новий ключ API? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -2683,7 +2719,7 @@ Не вдалося обміняти код купона apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -2691,7 +2727,7 @@ Код купона був обміняний apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -2699,7 +2735,7 @@ Перезавантажити apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -2707,7 +2743,7 @@ Будь ласка, введіть ваш код купона. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -2831,7 +2867,7 @@ Локалізація apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -3255,7 +3291,7 @@ Огляд apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -4164,7 +4200,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -4276,7 +4312,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -4292,7 +4328,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -4308,7 +4344,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -4324,7 +4360,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -4383,8 +4419,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -5963,7 +5999,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -5975,7 +6011,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -5999,7 +6035,7 @@ Клонувати libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -6007,7 +6043,7 @@ Експортувати чернетку як ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -6031,15 +6067,19 @@ Тиждень до дати libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 WTD WTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -6047,15 +6087,19 @@ Місяць до дати libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 @@ -6063,12 +6107,16 @@ Рік до дати libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 year рік + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -6079,15 +6127,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years роки + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -6103,7 +6155,7 @@ Діапазон дат libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -6111,7 +6163,7 @@ Скинути фільтри libs/ui/src/lib/assistant/assistant.html - 266 + 205 @@ -6119,7 +6171,7 @@ Застосувати фільтри libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -6307,14 +6359,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -6335,11 +6387,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6349,14 +6401,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -6367,11 +6419,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6399,11 +6451,11 @@ Скасувати apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6463,7 +6515,7 @@ Закрити apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6647,7 +6699,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6665,14 +6717,14 @@ Tag Тег - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -6682,6 +6734,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years Роки @@ -6719,7 +6779,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -7187,7 +7247,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7195,7 +7255,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7203,7 +7263,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7211,7 +7271,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7219,7 +7279,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7227,7 +7287,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7235,7 +7295,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7243,7 +7303,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7391,7 +7451,7 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7403,7 +7463,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7411,7 +7471,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7419,7 +7479,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7476,7 +7536,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7484,7 +7544,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7492,7 +7552,7 @@ Apply apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7524,7 +7584,7 @@ Gather Historical Market Data apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -7838,6 +7898,14 @@ 5 + + Current month + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new new @@ -8475,6 +8543,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn Follow Ghostfolio on LinkedIn diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 58945bd81..b9b3fb451 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -247,7 +247,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -334,7 +334,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -396,11 +396,11 @@ Currency apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -420,7 +420,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -455,11 +455,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -498,7 +498,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -509,7 +509,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -533,7 +533,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -562,7 +562,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -577,7 +577,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -674,7 +674,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -743,7 +743,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -808,7 +808,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -829,7 +829,7 @@ Gather Historical Market Data apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -851,7 +851,7 @@ Sector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -862,7 +862,7 @@ Country apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -877,11 +877,11 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -896,11 +896,11 @@ Countries apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -911,7 +911,7 @@ Symbol Mapping apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -925,14 +925,14 @@ Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -968,7 +968,7 @@ Name, symbol or ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1117,11 +1117,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1146,6 +1146,13 @@ 8 + + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform @@ -1207,7 +1214,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1239,14 +1246,14 @@ Impersonate User apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 Delete User apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1290,7 +1297,7 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1341,7 +1348,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -1485,6 +1492,13 @@ 52 + + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity @@ -1545,7 +1559,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1580,21 +1594,21 @@ Sign in with Internet Identity apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 Sign in with Google apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 Stay signed in apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1722,7 +1736,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1901,35 +1915,51 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -1957,28 +1987,28 @@ Please enter your coupon code. apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 Could not redeem coupon code apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 Coupon code has been redeemed apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 Reload apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -2060,7 +2090,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2151,6 +2181,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Export Data @@ -2196,7 +2230,7 @@ Okay apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -2435,7 +2469,7 @@ Overview apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -3218,7 +3252,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -3324,7 +3358,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -3339,7 +3373,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -3354,7 +3388,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3406,8 +3440,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -4390,7 +4424,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -4401,7 +4435,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -4415,14 +4449,14 @@ Clone libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 Export Draft as ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -4583,14 +4617,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -4609,11 +4643,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4623,14 +4657,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -4640,11 +4674,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4795,7 +4829,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -4812,14 +4846,14 @@ Tag - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -4828,6 +4862,13 @@ 32 + + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years @@ -4854,7 +4895,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5104,21 +5145,21 @@ Date Range libs/ui/src/lib/assistant/assistant.html - 171 + 170 The current market price is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -5254,35 +5295,43 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 Week to date libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 Month to date libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 WTD + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5307,11 +5356,15 @@ Reset Filters libs/ui/src/lib/assistant/assistant.html - 266 + 205 year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5322,21 +5375,25 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Apply Filters libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5366,7 +5423,7 @@ Data Gathering apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -5885,18 +5942,18 @@ Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 Cancel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5968,7 +6025,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6405,28 +6462,28 @@ Could not generate an API key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 Do you really want to generate a new API key? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 Ghostfolio Premium Data Provider API Key apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 Set this API key in your self-hosted environment: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -6447,7 +6504,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6540,56 +6597,56 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -6721,21 +6778,21 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -6746,7 +6803,7 @@ Generate Security Token apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -6797,21 +6854,21 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 Apply apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7098,6 +7155,13 @@ 3 + + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new @@ -7659,6 +7723,13 @@ 128 + + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Join the Ghostfolio Slack community diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 16866f41b..90e239595 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -264,7 +264,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 158 + 161 @@ -360,7 +360,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 286 + 304 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -424,11 +424,11 @@ 货币 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 183 + 201 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 293 + 311 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -448,7 +448,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 278 + 281 @@ -484,11 +484,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 259 + 262 libs/ui/src/lib/activities-table/activities-table.component.html - 295 + 298 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -528,7 +528,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 440 + 443 @@ -540,7 +540,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 68 + 86 apps/client/src/app/components/admin-overview/admin-overview.html @@ -564,7 +564,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 467 + 470 libs/ui/src/lib/benchmark/benchmark.component.html @@ -596,7 +596,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 545 + 563 @@ -612,7 +612,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 161 + 179 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -720,7 +720,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 167 + 170 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -796,7 +796,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 194 + 212 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -852,7 +852,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 48 + 66 @@ -892,7 +892,7 @@ 行业 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 239 + 257 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -904,7 +904,7 @@ 国家 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 250 + 268 apps/client/src/app/components/admin-users/admin-users.html @@ -920,11 +920,11 @@ 行业 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 256 + 274 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 493 + 511 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -940,11 +940,11 @@ 国家 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 266 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 504 + 522 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -956,7 +956,7 @@ 代码映射 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 357 + 375 @@ -972,7 +972,7 @@ 刮削配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 400 @@ -980,7 +980,7 @@ 笔记 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 529 + 547 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1020,7 +1020,7 @@ 名称、代码或 ISIN apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 114 + 132 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1188,11 +1188,11 @@ 网址 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 464 + 482 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 516 + 534 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1219,6 +1219,14 @@ 8 + + Current year + Current year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + + Add platform 添加平台 @@ -1288,7 +1296,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 175 + 207 @@ -1324,7 +1332,7 @@ 模拟用户 apps/client/src/app/components/admin-users/admin-users.html - 223 + 232 @@ -1332,7 +1340,7 @@ 删除用户 apps/client/src/app/components/admin-users/admin-users.html - 244 + 253 @@ -1380,7 +1388,7 @@ 基准 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 351 + 369 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -1436,7 +1444,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 68 + 71 libs/common/src/lib/routes/routes.ts @@ -1595,6 +1603,14 @@ 52 + + Current week + Current week + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + + Add activity 添加活动 @@ -1660,7 +1676,7 @@ apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 27 + 28 apps/client/src/app/pages/landing/landing-page.html @@ -1696,7 +1712,7 @@ 使用互联网身份登录 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 37 + 38 @@ -1704,7 +1720,7 @@ 使用 Google 登录 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 47 + 48 @@ -1712,7 +1728,7 @@ 保持登录 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html - 56 + 59 @@ -1856,7 +1872,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 188 + 191 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2048,39 +2064,55 @@ libs/ui/src/lib/assistant/assistant.component.ts - 383 + 364 YTD 年初至今 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 204 + libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 1Y 1年 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 5Y 5年 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 Max 最大限度 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 216 + libs/ui/src/lib/assistant/assistant.component.ts - 436 + 417 @@ -2112,7 +2144,7 @@ 请输入您的优惠券代码。 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 215 + 218 @@ -2120,7 +2152,7 @@ 无法兑换优惠券代码 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 179 + 182 @@ -2128,7 +2160,7 @@ 优惠券代码已被兑换 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 192 + 195 @@ -2136,7 +2168,7 @@ 重新加载 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 193 + 196 @@ -2228,7 +2260,7 @@ 语言环境 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 419 + 437 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2330,6 +2362,10 @@ apps/client/src/app/components/user-account-settings/user-account-settings.html 252 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 12 + Export Data @@ -2380,7 +2416,7 @@ 好的 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 154 + 157 apps/client/src/app/core/http-response.interceptor.ts @@ -2640,7 +2676,7 @@ 概述 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 95 + 113 apps/client/src/app/components/header/header.component.html @@ -3500,7 +3536,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 203 + 221 apps/client/src/app/components/admin-tag/admin-tag.component.html @@ -3616,7 +3652,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 212 + 215 @@ -3632,7 +3668,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 377 + 380 @@ -3648,7 +3684,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 389 + 392 @@ -3707,8 +3743,8 @@ 32 - libs/ui/src/lib/assistant/assistant.html - 207 + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 26 @@ -4797,7 +4833,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 402 + 405 @@ -4809,7 +4845,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 415 + 418 @@ -4825,7 +4861,7 @@ 克隆 libs/ui/src/lib/activities-table/activities-table.component.html - 446 + 449 @@ -4833,7 +4869,7 @@ 将汇票导出为 ICS libs/ui/src/lib/activities-table/activities-table.component.html - 456 + 459 @@ -5013,14 +5049,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 310 + 313 - libs/ui/src/lib/assistant/assistant.html - 185 + libs/ui/src/lib/i18n.ts + 4 - libs/ui/src/lib/i18n.ts + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html 4 @@ -5041,11 +5077,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 212 + 230 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 303 + 321 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5055,14 +5091,14 @@ apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 290 - - libs/ui/src/lib/assistant/assistant.html - 246 - libs/ui/src/lib/i18n.ts 6 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 64 + Asset Sub Class @@ -5073,11 +5109,11 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 221 + 239 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 319 + 337 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5245,7 +5281,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 150 + 168 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -5263,14 +5299,14 @@ Tag 标签 - - libs/ui/src/lib/assistant/assistant.html - 235 - libs/ui/src/lib/i18n.ts 31 + + libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html + 53 + Year @@ -5280,6 +5316,14 @@ 32 + + View Details + View Details + + apps/client/src/app/components/admin-users/admin-users.html + 225 + + Years @@ -5309,7 +5353,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 236 + 239 libs/ui/src/lib/i18n.ts @@ -5589,7 +5633,7 @@ 日期范围 libs/ui/src/lib/assistant/assistant.html - 171 + 170 @@ -5597,7 +5641,7 @@ 当前市场价格为 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 639 + 672 @@ -5605,7 +5649,7 @@ 测试 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 500 @@ -5757,7 +5801,7 @@ 今年迄今为止 libs/ui/src/lib/assistant/assistant.component.ts - 395 + 376 @@ -5765,7 +5809,7 @@ 本周至今 libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5773,23 +5817,31 @@ 本月至今 libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 MTD 本月至今 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + libs/ui/src/lib/assistant/assistant.component.ts - 391 + 372 WTD 本周至今 + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 196 + libs/ui/src/lib/assistant/assistant.component.ts - 387 + 368 @@ -5817,12 +5869,16 @@ 重置过滤器 libs/ui/src/lib/assistant/assistant.html - 266 + 205 year + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 208 + apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -5833,15 +5889,19 @@ libs/ui/src/lib/assistant/assistant.component.ts - 405 + 386 years + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 212 + libs/ui/src/lib/assistant/assistant.component.ts - 430 + 411 @@ -5849,7 +5909,7 @@ 应用过滤器 libs/ui/src/lib/assistant/assistant.html - 276 + 219 @@ -5882,7 +5942,7 @@ 数据收集 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 575 + 593 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6466,7 +6526,7 @@ 错误 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 630 + 663 @@ -6514,11 +6574,11 @@ 取消 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 143 + 161 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 580 + 598 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6570,7 +6630,7 @@ 关闭 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 582 + 600 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7024,7 +7084,7 @@ 无法生成 API 密钥 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 141 + 144 @@ -7032,7 +7092,7 @@ 在您的自托管环境中设置此 API 密钥: apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 156 + 159 @@ -7040,7 +7100,7 @@ Ghostfolio Premium 数据提供者 API 密钥 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 159 + 162 @@ -7048,7 +7108,7 @@ 您确定要生成新的 API 密钥吗? apps/client/src/app/components/user-account-membership/user-account-membership.component.ts - 164 + 167 @@ -7088,7 +7148,7 @@ 保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 591 + 609 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7188,7 +7248,7 @@ 延迟 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7196,7 +7256,7 @@ 即时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7204,7 +7264,7 @@ 默认市场价格 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 391 + 409 @@ -7212,7 +7272,7 @@ 模式 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 432 + 450 @@ -7220,7 +7280,7 @@ 选择器 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 448 + 466 @@ -7228,7 +7288,7 @@ HTTP 请求标头 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 404 + 422 @@ -7236,7 +7296,7 @@ 收盘 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 203 + 230 @@ -7244,7 +7304,7 @@ 实时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 207 + 234 @@ -7392,7 +7452,7 @@ 安全令牌 apps/client/src/app/components/admin-users/admin-users.component.ts - 196 + 228 apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -7404,7 +7464,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 201 + 233 @@ -7412,7 +7472,7 @@ Find account, holding or page... libs/ui/src/lib/assistant/assistant.component.ts - 162 + 152 @@ -7420,7 +7480,7 @@ 生成安全令牌 apps/client/src/app/components/admin-users/admin-users.html - 233 + 242 @@ -7477,7 +7537,7 @@ () 已在使用中。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 566 + 599 @@ -7485,7 +7545,7 @@ 在更新到 () 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 574 + 607 @@ -7493,7 +7553,7 @@ 应用 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 135 + 153 @@ -7525,7 +7585,7 @@ 收集历史市场数据 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 33 + 34 @@ -7839,6 +7899,14 @@ 5 + + Current month + Current month + + apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts + 200 + + new 新增 @@ -8476,6 +8544,14 @@ 128 + + Registration Date + Registration Date + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 22 + + Follow Ghostfolio on LinkedIn 在 LinkedIn 上关注 Ghostfolio diff --git a/apps/client/src/main.ts b/apps/client/src/main.ts index 2f656ddf2..96d6c0582 100644 --- a/apps/client/src/main.ts +++ b/apps/client/src/main.ts @@ -1,5 +1,5 @@ import { locale } from '@ghostfolio/common/config'; -import { InfoItem } from '@ghostfolio/common/interfaces'; +import { InfoResponse } from '@ghostfolio/common/interfaces'; import { filterGlobalPermissions } from '@ghostfolio/common/permissions'; import { enableProdMode } from '@angular/core'; @@ -11,7 +11,7 @@ import { environment } from './environments/environment'; (async () => { const response = await fetch('/api/v1/info'); - const info: InfoItem = await response.json(); + const info: InfoResponse = await response.json(); const utmSource = window.localStorage.getItem('utm_source') as | 'ios' | 'trusted-web-activity'; diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 578d9cec8..eac5db68c 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -15,7 +15,6 @@ import type { Benchmark } from './benchmark.interface'; import type { Coupon } from './coupon.interface'; import type { DataProviderInfo } from './data-provider-info.interface'; import type { EnhancedSymbolProfile } from './enhanced-symbol-profile.interface'; -import type { Export } from './export.interface'; import type { FilterGroup } from './filter-group.interface'; import type { Filter } from './filter.interface'; import type { FireWealth } from './fire-wealth.interface'; @@ -38,18 +37,24 @@ import type { Product } from './product'; import type { AccessTokenResponse } from './responses/access-token-response.interface'; import type { AccountBalancesResponse } from './responses/account-balances-response.interface'; import type { AccountsResponse } from './responses/accounts-response.interface'; +import type { ActivitiesResponse } from './responses/activities-response.interface'; +import type { ActivityResponse } from './responses/activity-response.interface'; import type { AiPromptResponse } from './responses/ai-prompt-response.interface'; import type { ApiKeyResponse } from './responses/api-key-response.interface'; +import type { AssetResponse } from './responses/asset-response.interface'; import type { BenchmarkMarketDataDetailsResponse } from './responses/benchmark-market-data-details-response.interface'; import type { BenchmarkResponse } from './responses/benchmark-response.interface'; +import type { CreateStripeCheckoutSessionResponse } from './responses/create-stripe-checkout-session-response.interface'; import type { DataEnhancerHealthResponse } from './responses/data-enhancer-health-response.interface'; import type { DataProviderGhostfolioAssetProfileResponse } from './responses/data-provider-ghostfolio-asset-profile-response.interface'; import type { DataProviderGhostfolioStatusResponse } from './responses/data-provider-ghostfolio-status-response.interface'; import type { DataProviderHealthResponse } from './responses/data-provider-health-response.interface'; import type { DividendsResponse } from './responses/dividends-response.interface'; import type { ResponseError } from './responses/errors.interface'; +import type { ExportResponse } from './responses/export-response.interface'; import type { HistoricalResponse } from './responses/historical-response.interface'; import type { ImportResponse } from './responses/import-response.interface'; +import type { InfoResponse } from './responses/info-response.interface'; import type { LookupResponse } from './responses/lookup-response.interface'; import type { MarketDataDetailsResponse } from './responses/market-data-details-response.interface'; import type { MarketDataOfMarketsResponse } from './responses/market-data-of-markets-response.interface'; @@ -80,6 +85,8 @@ export { AccountBalance, AccountBalancesResponse, AccountsResponse, + ActivitiesResponse, + ActivityResponse, AdminData, AdminJobs, AdminMarketData, @@ -90,11 +97,13 @@ export { ApiKeyResponse, AssetClassSelectorOption, AssetProfileIdentifier, + AssetResponse, Benchmark, BenchmarkMarketDataDetailsResponse, BenchmarkProperty, BenchmarkResponse, Coupon, + CreateStripeCheckoutSessionResponse, DataEnhancerHealthResponse, DataProviderGhostfolioAssetProfileResponse, DataProviderGhostfolioStatusResponse, @@ -102,7 +111,7 @@ export { DataProviderInfo, DividendsResponse, EnhancedSymbolProfile, - Export, + ExportResponse, Filter, FilterGroup, FireWealth, @@ -112,6 +121,7 @@ export { HoldingWithParents, ImportResponse, InfoItem, + InfoResponse, InvestmentItem, LineChartItem, LookupItem, diff --git a/libs/common/src/lib/interfaces/responses/activities-response.interface.ts b/libs/common/src/lib/interfaces/responses/activities-response.interface.ts new file mode 100644 index 000000000..e6abe4618 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/activities-response.interface.ts @@ -0,0 +1,6 @@ +import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; + +export interface ActivitiesResponse { + activities: Activity[]; + count: number; +} diff --git a/libs/common/src/lib/interfaces/responses/activity-response.interface.ts b/libs/common/src/lib/interfaces/responses/activity-response.interface.ts new file mode 100644 index 000000000..5dd338627 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/activity-response.interface.ts @@ -0,0 +1,3 @@ +import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; + +export interface ActivityResponse extends Activity {} diff --git a/libs/common/src/lib/interfaces/responses/asset-response.interface.ts b/libs/common/src/lib/interfaces/responses/asset-response.interface.ts new file mode 100644 index 000000000..452ec0d3d --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/asset-response.interface.ts @@ -0,0 +1,3 @@ +import type { AdminMarketDataDetails } from '../admin-market-data-details.interface'; + +export interface AssetResponse extends AdminMarketDataDetails {} diff --git a/libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts b/libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts new file mode 100644 index 000000000..18c9e4400 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/create-stripe-checkout-session-response.interface.ts @@ -0,0 +1,3 @@ +export interface CreateStripeCheckoutSessionResponse { + sessionId: string; +} diff --git a/libs/common/src/lib/interfaces/responses/dividends-response.interface.ts b/libs/common/src/lib/interfaces/responses/dividends-response.interface.ts index f7cacf89a..15afc54c9 100644 --- a/libs/common/src/lib/interfaces/responses/dividends-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/dividends-response.interface.ts @@ -1,7 +1,7 @@ -import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; export interface DividendsResponse { dividends: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; }; } diff --git a/libs/common/src/lib/interfaces/export.interface.ts b/libs/common/src/lib/interfaces/responses/export-response.interface.ts similarity index 64% rename from libs/common/src/lib/interfaces/export.interface.ts rename to libs/common/src/lib/interfaces/responses/export-response.interface.ts index 16a49b0ef..8b1697ca4 100644 --- a/libs/common/src/lib/interfaces/export.interface.ts +++ b/libs/common/src/lib/interfaces/responses/export-response.interface.ts @@ -7,10 +7,11 @@ import { Tag } from '@prisma/client'; -import { AccountBalance } from './account-balance.interface'; -import { MarketData } from './market-data.interface'; +import { AccountBalance } from '../account-balance.interface'; +import { MarketData } from '../market-data.interface'; +import { UserSettings } from '../user-settings.interface'; -export interface Export { +export interface ExportResponse { accounts: (Omit & { balances: AccountBalance[]; })[]; @@ -36,5 +37,10 @@ export interface Export { }; platforms: Platform[]; tags: Omit[]; - user: { settings: { currency: string } }; + user: { + settings: { + currency: UserSettings['baseCurrency']; + performanceCalculationType: UserSettings['performanceCalculationType']; + }; + }; } diff --git a/libs/common/src/lib/interfaces/responses/historical-response.interface.ts b/libs/common/src/lib/interfaces/responses/historical-response.interface.ts index 12309a352..24383ab07 100644 --- a/libs/common/src/lib/interfaces/responses/historical-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/historical-response.interface.ts @@ -1,7 +1,7 @@ -import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; export interface HistoricalResponse { historicalData: { - [date: string]: IDataProviderHistoricalResponse; + [date: string]: DataProviderHistoricalResponse; }; } diff --git a/libs/common/src/lib/interfaces/responses/info-response.interface.ts b/libs/common/src/lib/interfaces/responses/info-response.interface.ts new file mode 100644 index 000000000..45e62db73 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/info-response.interface.ts @@ -0,0 +1,3 @@ +import { InfoItem } from '../index'; + +export interface InfoResponse extends InfoItem {} diff --git a/libs/common/src/lib/interfaces/responses/quotes-response.interface.ts b/libs/common/src/lib/interfaces/responses/quotes-response.interface.ts index 79c9d3024..8b9b09cb8 100644 --- a/libs/common/src/lib/interfaces/responses/quotes-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/quotes-response.interface.ts @@ -1,5 +1,5 @@ -import { IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; +import { DataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; export interface QuotesResponse { - quotes: { [symbol: string]: IDataProviderResponse }; + quotes: { [symbol: string]: DataProviderResponse }; } diff --git a/libs/common/src/lib/interfaces/user.interface.ts b/libs/common/src/lib/interfaces/user.interface.ts index a48317fad..2e0906895 100644 --- a/libs/common/src/lib/interfaces/user.interface.ts +++ b/libs/common/src/lib/interfaces/user.interface.ts @@ -1,6 +1,9 @@ -import { SubscriptionType } from '@ghostfolio/common/types/subscription-type.type'; +import { + AccountWithPlatform, + SubscriptionType +} from '@ghostfolio/common/types'; -import { Access, Account, Tag } from '@prisma/client'; +import { Access, Tag } from '@prisma/client'; import { SubscriptionOffer } from './subscription-offer.interface'; import { SystemMessage } from './system-message.interface'; @@ -9,7 +12,7 @@ import { UserSettings } from './user-settings.interface'; // TODO: Compare with UserWithSettings export interface User { access: Pick[]; - accounts: Account[]; + accounts: AccountWithPlatform[]; activitiesCount: number; dateOfFirstActivity: Date; id: string; diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html index 609c76ee1..e9e0337c9 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -320,11 +320,7 @@ - + diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index 8079a6258..843832e1a 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -143,7 +143,10 @@ }
- @if (!isUUID(element.SymbolProfile?.symbol)) { + @if ( + element.SymbolProfile?.dataSource !== 'MANUAL' && + !isUUID(element.SymbolProfile?.symbol) + ) {
{{ element.SymbolProfile?.symbol | gfSymbol 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 f75aaea01..f9034df71 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 @@ -18,8 +18,8 @@ import { Params, RouterModule } from '@angular/router'; import { SearchMode } from '../enums/search-mode'; import { - IAssetSearchResultItem, - ISearchResultItem + AssetSearchResultItem, + SearchResultItem } from '../interfaces/interfaces'; @Component({ @@ -37,7 +37,7 @@ export class GfAssistantListItemComponent return this.hasFocus; } - @Input() item: ISearchResultItem; + @Input() item: SearchResultItem; @Output() clicked = new EventEmitter(); @@ -86,7 +86,7 @@ export class GfAssistantListItemComponent this.changeDetectorRef.markForCheck(); } - public isAsset(item: ISearchResultItem): item is IAssetSearchResultItem { + public isAsset(item: SearchResultItem): item is AssetSearchResultItem { return ( (item.mode === SearchMode.ASSET_PROFILE || item.mode === SearchMode.HOLDING) && diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index 3fc1cc232..eaf96f496 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -1,11 +1,10 @@ -import { GfSymbolPipe } from '@ghostfolio/client/pipes/symbol/symbol.pipe'; import { AdminService } from '@ghostfolio/client/services/admin.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { Filter, PortfolioPosition, User } from '@ghostfolio/common/interfaces'; import { InternalRoute } from '@ghostfolio/common/routes/interfaces/internal-route.interface'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; -import { DateRange } from '@ghostfolio/common/types'; +import { AccountWithPlatform, DateRange } from '@ghostfolio/common/types'; import { FocusKeyManager } from '@angular/cdk/a11y'; import { @@ -25,19 +24,14 @@ import { ViewChild, ViewChildren } from '@angular/core'; -import { - FormBuilder, - FormControl, - FormsModule, - ReactiveFormsModule -} from '@angular/forms'; +import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatMenuTrigger } from '@angular/material/menu'; import { MatSelectModule } from '@angular/material/select'; import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; -import { Account, AssetClass, DataSource } from '@prisma/client'; +import { AssetClass, DataSource } from '@prisma/client'; import { differenceInYears } from 'date-fns'; import Fuse from 'fuse.js'; import { addIcons } from 'ionicons'; @@ -60,14 +54,17 @@ import { tap } from 'rxjs/operators'; -import { GfEntityLogoComponent } from '../entity-logo/entity-logo.component'; import { translate } from '../i18n'; +import { + GfPortfolioFilterFormComponent, + PortfolioFilterFormValue +} from '../portfolio-filter-form'; import { GfAssistantListItemComponent } from './assistant-list-item/assistant-list-item.component'; import { SearchMode } from './enums/search-mode'; import { - IDateRangeOption, - ISearchResultItem, - ISearchResults + DateRangeOption, + SearchResultItem, + SearchResults } from './interfaces/interfaces'; @Component({ @@ -75,8 +72,7 @@ import { imports: [ FormsModule, GfAssistantListItemComponent, - GfEntityLogoComponent, - GfSymbolPipe, + GfPortfolioFilterFormComponent, IonIcon, MatButtonModule, MatFormFieldModule, @@ -141,16 +137,10 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { public static readonly SEARCH_RESULTS_DEFAULT_LIMIT = 5; - public accounts: Account[] = []; + public accounts: AccountWithPlatform[] = []; public assetClasses: Filter[] = []; public dateRangeFormControl = new FormControl(undefined); - public dateRangeOptions: IDateRangeOption[] = []; - public filterForm = this.formBuilder.group({ - account: new FormControl(undefined), - assetClass: new FormControl(undefined), - holding: new FormControl(undefined), - tag: new FormControl(undefined) - }); + public dateRangeOptions: DateRangeOption[] = []; public holdings: PortfolioPosition[] = []; public isLoading = { accounts: false, @@ -160,8 +150,16 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }; public isOpen = false; public placeholder = $localize`Find account, holding or page...`; + public portfolioFilterFormControl = new FormControl( + { + account: null, + assetClass: null, + holding: null, + tag: null + } + ); public searchFormControl = new FormControl(''); - public searchResults: ISearchResults = { + public searchResults: SearchResults = { accounts: [], assetProfiles: [], holdings: [], @@ -186,8 +184,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { public constructor( private adminService: AdminService, private changeDetectorRef: ChangeDetectorRef, - private dataService: DataService, - private formBuilder: FormBuilder + private dataService: DataService ) { addIcons({ closeCircleOutline, closeOutline, searchOutline }); } @@ -229,7 +226,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { assetProfiles: [], holdings: [], quickLinks: [] - } as ISearchResults; + } as SearchResults; if (!searchTerm) { return of(results).pipe( @@ -244,8 +241,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { ); } - // Accounts - const accounts$: Observable> = + const accounts$: Observable> = this.searchAccounts(searchTerm).pipe( map((accounts) => ({ accounts: accounts.slice( @@ -255,7 +251,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { })), catchError((error) => { console.error('Error fetching accounts for assistant:', error); - return of({ accounts: [] as ISearchResultItem[] }); + return of({ accounts: [] as SearchResultItem[] }); }), tap(() => { this.isLoading.accounts = false; @@ -263,8 +259,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }) ); - // Asset profiles - const assetProfiles$: Observable> = this + const assetProfiles$: Observable> = this .hasPermissionToAccessAdminControl ? this.searchAssetProfiles(searchTerm).pipe( map((assetProfiles) => ({ @@ -278,22 +273,21 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { 'Error fetching asset profiles for assistant:', error ); - return of({ assetProfiles: [] as ISearchResultItem[] }); + return of({ assetProfiles: [] as SearchResultItem[] }); }), tap(() => { this.isLoading.assetProfiles = false; this.changeDetectorRef.markForCheck(); }) ) - : of({ assetProfiles: [] as ISearchResultItem[] }).pipe( + : of({ assetProfiles: [] as SearchResultItem[] }).pipe( tap(() => { this.isLoading.assetProfiles = false; this.changeDetectorRef.markForCheck(); }) ); - // Holdings - const holdings$: Observable> = + const holdings$: Observable> = this.searchHoldings(searchTerm).pipe( map((holdings) => ({ holdings: holdings.slice( @@ -303,7 +297,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { })), catchError((error) => { console.error('Error fetching holdings for assistant:', error); - return of({ holdings: [] as ISearchResultItem[] }); + return of({ holdings: [] as SearchResultItem[] }); }), tap(() => { this.isLoading.holdings = false; @@ -311,8 +305,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }) ); - // Quick links - const quickLinks$: Observable> = of( + const quickLinks$: Observable> = of( this.searchQuickLinks(searchTerm) ).pipe( map((quickLinks) => ({ @@ -327,10 +320,9 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }) ); - // Merge all results return merge(accounts$, assetProfiles$, holdings$, quickLinks$).pipe( scan( - (acc: ISearchResults, curr: Partial) => ({ + (acc: SearchResults, curr: Partial) => ({ ...acc, ...curr }), @@ -339,7 +331,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { assetProfiles: [], holdings: [], quickLinks: [] - } as ISearchResults + } as SearchResults ) ); }), @@ -362,22 +354,11 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { quickLinks: [] }; this.changeDetectorRef.markForCheck(); - }, - complete: () => { - this.isLoading = { - accounts: false, - assetProfiles: false, - holdings: false, - quickLinks: false - }; - this.changeDetectorRef.markForCheck(); } }); } public ngOnChanges() { - this.accounts = this.user?.accounts ?? []; - this.dateRangeOptions = [ { label: $localize`Today`, @@ -445,7 +426,11 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { this.dateRangeFormControl.setValue(this.user?.settings?.dateRange ?? null); - this.filterForm.disable({ emitEvent: false }); + if (this.hasPermissionToChangeFilters) { + this.portfolioFilterFormControl.enable({ emitEvent: false }); + } else { + this.portfolioFilterFormControl.disable({ emitEvent: false }); + } this.tags = this.user?.tags @@ -459,29 +444,6 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { type: 'TAG' }; }) ?? []; - - if (this.tags.length === 0) { - this.filterForm.get('tag').disable({ emitEvent: false }); - } - } - - public hasFilter(aFormValue: { [key: string]: string }) { - return Object.values(aFormValue).some((value) => { - return !!value; - }); - } - - public holdingComparisonFunction( - option: PortfolioPosition, - value: PortfolioPosition - ): boolean { - if (value === null) { - return false; - } - - return ( - getAssetProfileIdentifier(option) === getAssetProfileIdentifier(value) - ); } public initialize() { @@ -527,36 +489,35 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { .sort((a, b) => { return a.name?.localeCompare(b.name); }); - this.setFilterFormValues(); - if (this.hasPermissionToChangeFilters) { - this.filterForm.enable({ emitEvent: false }); - } + this.setPortfolioFilterFormValues(); this.changeDetectorRef.markForCheck(); }); } public onApplyFilters() { + const filterValue = this.portfolioFilterFormControl.value; + this.filtersChanged.emit([ { - id: this.filterForm.get('account').value, + id: filterValue?.account, type: 'ACCOUNT' }, { - id: this.filterForm.get('assetClass').value, + id: filterValue?.assetClass, type: 'ASSET_CLASS' }, { - id: this.filterForm.get('holding').value?.dataSource, + id: filterValue?.holding?.dataSource, type: 'DATA_SOURCE' }, { - id: this.filterForm.get('holding').value?.symbol, + id: filterValue?.holding?.symbol, type: 'SYMBOL' }, { - id: this.filterForm.get('tag').value, + id: filterValue?.tag, type: 'TAG' } ]); @@ -569,12 +530,15 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { } public onCloseAssistant() { + this.portfolioFilterFormControl.reset(); this.setIsOpen(false); this.closed.emit(); } public onResetFilters() { + this.portfolioFilterFormControl.reset(); + this.filtersChanged.emit( this.filterTypes.map((type) => { return { @@ -658,7 +622,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }, this.PRESELECTION_DELAY); } - private searchAccounts(aSearchTerm: string): Observable { + private searchAccounts(aSearchTerm: string): Observable { return this.dataService .fetchAccounts({ filters: [ @@ -688,7 +652,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { private searchAssetProfiles( aSearchTerm: string - ): Observable { + ): Observable { return this.adminService .fetchAdminMarketData({ filters: [ @@ -721,7 +685,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { ); } - private searchHoldings(aSearchTerm: string): Observable { + private searchHoldings(aSearchTerm: string): Observable { return this.dataService .fetchPortfolioHoldings({ filters: [ @@ -753,7 +717,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { ); } - private searchQuickLinks(aSearchTerm: string): ISearchResultItem[] { + private searchQuickLinks(aSearchTerm: string): SearchResultItem[] { const searchTerm = aSearchTerm.toLowerCase(); const allRoutes = Object.values(internalRoutes) @@ -786,7 +750,7 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }); } - private setFilterFormValues() { + private setPortfolioFilterFormValues() { const dataSource = this.user?.settings?.[ 'filters.dataSource' ] as DataSource; @@ -800,16 +764,11 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { ); }); - this.filterForm.setValue( - { - account: this.user?.settings?.['filters.accounts']?.[0] ?? null, - assetClass: this.user?.settings?.['filters.assetClasses']?.[0] ?? null, - holding: selectedHolding ?? null, - tag: this.user?.settings?.['filters.tags']?.[0] ?? null - }, - { - emitEvent: false - } - ); + this.portfolioFilterFormControl.setValue({ + account: this.user?.settings?.['filters.accounts']?.[0] ?? null, + assetClass: this.user?.settings?.['filters.assetClasses']?.[0] ?? null, + holding: selectedHolding ?? null, + tag: this.user?.settings?.['filters.tags']?.[0] ?? null + }); } } diff --git a/libs/ui/src/lib/assistant/assistant.html b/libs/ui/src/lib/assistant/assistant.html index 5954ce369..e0a8f2fc9 100644 --- a/libs/ui/src/lib/assistant/assistant.html +++ b/libs/ui/src/lib/assistant/assistant.html @@ -164,119 +164,61 @@
}
-
- @if (!searchFormControl.value) { -
- - Date Range - - @for (range of dateRangeOptions; track range) { - {{ range.label }} - } - - -
-
-
- - Account - - - @for (account of accounts; track account.id) { - -
- @if (account.platform?.url) { - - } - {{ account.name }} -
-
- } -
-
-
-
- - Holding - - {{ - filterForm.get('holding')?.value?.name - }} - - @for (holding of holdings; track holding.name) { - -
- {{ holding.name }} -
- {{ holding.symbol | gfSymbol }} · - {{ holding.currency }} -
-
- } -
-
-
-
- - Tag - - - @for (tag of tags; track tag.id) { - {{ tag.label }} - } - - -
-
- - Asset Class - - - @for (assetClass of assetClasses; track assetClass.id) { - {{ - assetClass.label - }} - } - - -
-
- - - -
+ @if (!searchFormControl.value) { +
+ + Date Range + + @for ( + dateRangeOption of dateRangeOptions; + track dateRangeOption.value + ) { + {{ + dateRangeOption.label + }} + } + + +
+
+ +
+ + +
- } - +
+ }
diff --git a/libs/ui/src/lib/assistant/interfaces/interfaces.ts b/libs/ui/src/lib/assistant/interfaces/interfaces.ts index 247641094..e018e0eb6 100644 --- a/libs/ui/src/lib/assistant/interfaces/interfaces.ts +++ b/libs/ui/src/lib/assistant/interfaces/interfaces.ts @@ -3,38 +3,38 @@ import { AccountWithValue, DateRange } from '@ghostfolio/common/types'; import { SearchMode } from '../enums/search-mode'; -export interface IAccountSearchResultItem +export interface AccountSearchResultItem extends Pick { mode: SearchMode.ACCOUNT; routerLink: string[]; } -export interface IAssetSearchResultItem extends AssetProfileIdentifier { +export interface AssetSearchResultItem extends AssetProfileIdentifier { assetSubClassString: string; currency: string; mode: SearchMode.ASSET_PROFILE | SearchMode.HOLDING; name: string; } -export interface IDateRangeOption { +export interface DateRangeOption { label: string; value: DateRange; } -export interface IQuickLinkSearchResultItem { +export interface QuickLinkSearchResultItem { mode: SearchMode.QUICK_LINK; name: string; routerLink: string[]; } -export type ISearchResultItem = - | IAccountSearchResultItem - | IAssetSearchResultItem - | IQuickLinkSearchResultItem; +export type SearchResultItem = + | AccountSearchResultItem + | AssetSearchResultItem + | QuickLinkSearchResultItem; -export interface ISearchResults { - accounts: ISearchResultItem[]; - assetProfiles: ISearchResultItem[]; - holdings: ISearchResultItem[]; - quickLinks: ISearchResultItem[]; +export interface SearchResults { + accounts: SearchResultItem[]; + assetProfiles: SearchResultItem[]; + holdings: SearchResultItem[]; + quickLinks: SearchResultItem[]; } diff --git a/libs/ui/src/lib/portfolio-filter-form/index.ts b/libs/ui/src/lib/portfolio-filter-form/index.ts new file mode 100644 index 000000000..51d22c034 --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/index.ts @@ -0,0 +1,2 @@ +export * from './interfaces'; +export * from './portfolio-filter-form.component'; diff --git a/libs/ui/src/lib/portfolio-filter-form/interfaces/index.ts b/libs/ui/src/lib/portfolio-filter-form/interfaces/index.ts new file mode 100644 index 000000000..62feaa56a --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/interfaces/index.ts @@ -0,0 +1 @@ +export * from './portfolio-filter-form-value.interface'; diff --git a/libs/ui/src/lib/portfolio-filter-form/interfaces/portfolio-filter-form-value.interface.ts b/libs/ui/src/lib/portfolio-filter-form/interfaces/portfolio-filter-form-value.interface.ts new file mode 100644 index 000000000..21ff0ae3b --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/interfaces/portfolio-filter-form-value.interface.ts @@ -0,0 +1,8 @@ +import { PortfolioPosition } from '@ghostfolio/common/interfaces'; + +export interface PortfolioFilterFormValue { + account: string; + assetClass: string; + holding: PortfolioPosition; + tag: string; +} diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html new file mode 100644 index 000000000..e017d33d6 --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -0,0 +1,75 @@ +
+
+ + Account + + + @for (account of accounts; track account.id) { + +
+ @if (account.platform?.url) { + + } + {{ account.name }} +
+
+ } +
+
+
+
+ + Holding + + {{ + filterForm.get('holding')?.value?.name + }} + + @for (holding of holdings; track holding.name) { + +
+ {{ holding.name }} +
+ {{ holding.symbol | gfSymbol }} · {{ holding.currency }} +
+
+ } +
+
+
+
+ + Tag + + + @for (tag of tags; track tag.id) { + {{ tag.label }} + } + + +
+
+ + Asset Class + + + @for (assetClass of assetClasses; track assetClass.id) { + {{ + assetClass.label + }} + } + + +
+
diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.scss b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.scss new file mode 100644 index 000000000..5d4e87f30 --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.stories.ts b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.stories.ts new file mode 100644 index 000000000..710a4e9c5 --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.stories.ts @@ -0,0 +1,79 @@ +import '@angular/localize/init'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; + +import { GfPortfolioFilterFormComponent } from './portfolio-filter-form.component'; + +const meta: Meta = { + title: 'Portfolio Filter Form', + component: GfPortfolioFilterFormComponent, + decorators: [ + moduleMetadata({ + imports: [GfPortfolioFilterFormComponent] + }) + ] +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + accounts: [ + { + id: '733110b6-7c55-44eb-8cc5-c4c3e9d48a79', + name: 'Trading Account', + platform: { + name: 'Interactive Brokers', + url: 'https://interactivebrokers.com' + } + }, + { + id: '24ba27d6-e04b-4fb4-b856-b24c2ef0422a', + name: 'Investment Account', + platform: { + name: 'Fidelity', + url: 'https://fidelity.com' + } + } + ] as any, + assetClasses: [ + { id: 'COMMODITY', label: 'Commodity', type: 'ASSET_CLASS' }, + { id: 'EQUITY', label: 'Equity', type: 'ASSET_CLASS' }, + { id: 'FIXED_INCOME', label: 'Fixed Income', type: 'ASSET_CLASS' } + ] as any, + holdings: [ + { + currency: 'USD', + dataSource: 'YAHOO', + name: 'Apple Inc.', + symbol: 'AAPL' + }, + { + currency: 'USD', + dataSource: 'YAHOO', + name: 'Microsoft Corporation', + symbol: 'MSFT' + } + ] as any, + tags: [ + { + id: 'EMERGENCY_FUND', + label: 'Emergency Fund', + type: 'TAG' + }, + { + id: 'RETIREMENT_FUND', + label: 'Retirement Fund', + type: 'TAG' + } + ] as any, + disabled: false + } +}; + +export const Disabled: Story = { + args: { + ...Default.args, + disabled: true + } +}; diff --git a/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.ts b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.ts new file mode 100644 index 000000000..794f43d4d --- /dev/null +++ b/libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.ts @@ -0,0 +1,177 @@ +import { GfSymbolPipe } from '@ghostfolio/client/pipes/symbol/symbol.pipe'; +import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; +import { Filter, PortfolioPosition } from '@ghostfolio/common/interfaces'; +import { AccountWithPlatform } from '@ghostfolio/common/types'; + +import { + CUSTOM_ELEMENTS_SCHEMA, + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Input, + OnChanges, + OnDestroy, + OnInit, + forwardRef +} from '@angular/core'; +import { + ControlValueAccessor, + FormBuilder, + FormControl, + FormGroup, + FormsModule, + NG_VALUE_ACCESSOR, + ReactiveFormsModule +} from '@angular/forms'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatSelectModule } from '@angular/material/select'; +import { Subject, takeUntil } from 'rxjs'; + +import { GfEntityLogoComponent } from '../entity-logo/entity-logo.component'; +import { PortfolioFilterFormValue } from './interfaces'; + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + FormsModule, + GfEntityLogoComponent, + GfSymbolPipe, + MatFormFieldModule, + MatSelectModule, + ReactiveFormsModule + ], + providers: [ + { + multi: true, + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => GfPortfolioFilterFormComponent) + } + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + selector: 'gf-portfolio-filter-form', + styleUrls: ['./portfolio-filter-form.component.scss'], + templateUrl: './portfolio-filter-form.component.html' +}) +export class GfPortfolioFilterFormComponent + implements ControlValueAccessor, OnInit, OnChanges, OnDestroy +{ + @Input() accounts: AccountWithPlatform[] = []; + @Input() assetClasses: Filter[] = []; + @Input() holdings: PortfolioPosition[] = []; + @Input() tags: Filter[] = []; + @Input() disabled = false; + + public filterForm: FormGroup; + + private unsubscribeSubject = new Subject(); + + public constructor( + private changeDetectorRef: ChangeDetectorRef, + private formBuilder: FormBuilder + ) { + this.filterForm = this.formBuilder.group({ + account: new FormControl(null), + assetClass: new FormControl(null), + holding: new FormControl(null), + tag: new FormControl(null) + }); + } + + public ngOnInit() { + this.filterForm.valueChanges + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe((value) => { + this.onChange(value as PortfolioFilterFormValue); + this.onTouched(); + }); + } + + public hasFilters() { + const formValue = this.filterForm.value; + + return Object.values(formValue).some((value) => { + return !!value; + }); + } + + public holdingComparisonFunction( + option: PortfolioPosition, + value: PortfolioPosition + ) { + if (value === null) { + return false; + } + + return ( + getAssetProfileIdentifier(option) === getAssetProfileIdentifier(value) + ); + } + + public ngOnChanges() { + if (this.disabled) { + this.filterForm.disable({ emitEvent: false }); + } else { + this.filterForm.enable({ emitEvent: false }); + } + + const tagControl = this.filterForm.get('tag'); + + if (this.tags.length === 0) { + tagControl?.disable({ emitEvent: false }); + } else if (!this.disabled) { + tagControl?.enable({ emitEvent: false }); + } + + this.changeDetectorRef.markForCheck(); + } + + public registerOnChange(fn: (value: PortfolioFilterFormValue) => void) { + this.onChange = fn; + } + + public registerOnTouched(fn: () => void) { + this.onTouched = fn; + } + + public setDisabledState(isDisabled: boolean) { + this.disabled = isDisabled; + + if (this.disabled) { + this.filterForm.disable({ emitEvent: false }); + } else { + this.filterForm.enable({ emitEvent: false }); + } + + this.changeDetectorRef.markForCheck(); + } + + public writeValue(value: PortfolioFilterFormValue | null) { + if (value) { + this.filterForm.setValue( + { + account: value.account ?? null, + assetClass: value.assetClass ?? null, + holding: value.holding ?? null, + tag: value.tag ?? null + }, + { emitEvent: false } + ); + } else { + this.filterForm.reset({}, { emitEvent: false }); + } + } + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + private onChange = (_value: PortfolioFilterFormValue): void => { + // ControlValueAccessor onChange callback + }; + + private onTouched = (): void => { + // ControlValueAccessor onTouched callback + }; +} diff --git a/package-lock.json b/package-lock.json index bcd6300e5..de1be8c3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.209.0", + "version": "2.211.0-beta.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.209.0", + "version": "2.211.0-beta.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { @@ -43,7 +43,7 @@ "@nestjs/schedule": "6.0.0", "@nestjs/serve-static": "5.0.3", "@openrouter/ai-sdk-provider": "0.7.2", - "@prisma/client": "6.17.1", + "@prisma/client": "6.18.0", "@simplewebauthn/browser": "13.1.0", "@simplewebauthn/server": "13.1.1", "@stripe/stripe-js": "7.9.0", @@ -65,6 +65,8 @@ "countries-list": "3.1.1", "countup.js": "2.9.0", "date-fns": "4.1.0", + "dotenv": "17.2.3", + "dotenv-expand": "12.0.3", "envalid": "8.1.0", "fuse.js": "7.1.0", "google-spreadsheet": "3.2.0", @@ -90,6 +92,7 @@ "rxjs": "7.8.1", "stripe": "18.5.0", "svgmap": "2.12.2", + "tablemark": "4.1.0", "twitter-api-v2": "1.23.0", "uuid": "11.1.0", "yahoo-finance2": "3.10.0", @@ -148,7 +151,7 @@ "nx": "21.5.1", "prettier": "3.6.2", "prettier-plugin-organize-attributes": "1.0.0", - "prisma": "6.17.1", + "prisma": "6.18.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "8.3.0", @@ -6112,9 +6115,9 @@ } }, "node_modules/@ioredis/commands": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.3.0.tgz", - "integrity": "sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.4.0.tgz", + "integrity": "sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==", "license": "MIT" }, "node_modules/@isaacs/balanced-match": { @@ -9080,6 +9083,33 @@ "rxjs": "^7.1.0" } }, + "node_modules/@nestjs/config/node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/@nestjs/config/node_modules/dotenv-expand": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.1.tgz", + "integrity": "sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==", + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/@nestjs/core": { "version": "11.1.3", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.3.tgz", @@ -11953,9 +11983,9 @@ "license": "MIT" }, "node_modules/@prisma/client": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.17.1.tgz", - "integrity": "sha512-zL58jbLzYamjnNnmNA51IOZdbk5ci03KviXCuB0Tydc9btH2kDWsi1pQm2VecviRTM7jGia0OPPkgpGnT3nKvw==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.18.0.tgz", + "integrity": "sha512-jnL2I9gDnPnw4A+4h5SuNn8Gc+1mL1Z79U/3I9eE2gbxJG1oSA+62ByPW4xkeDgwE0fqMzzpAZ7IHxYnLZ4iQA==", "hasInstallScript": true, "license": "Apache-2.0", "engines": { @@ -11975,66 +12005,66 @@ } }, "node_modules/@prisma/config": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.17.1.tgz", - "integrity": "sha512-fs8wY6DsvOCzuiyWVckrVs1LOcbY4LZNz8ki4uUIQ28jCCzojTGqdLhN2Jl5lDnC1yI8/gNIKpsWDM8pLhOdwA==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.18.0.tgz", + "integrity": "sha512-rgFzspCpwsE+q3OF/xkp0fI2SJ3PfNe9LLMmuSVbAZ4nN66WfBiKqJKo/hLz3ysxiPQZf8h1SMf2ilqPMeWATQ==", "devOptional": true, "license": "Apache-2.0", "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", - "effect": "3.16.12", + "effect": "3.18.4", "empathic": "2.0.0" } }, "node_modules/@prisma/debug": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.17.1.tgz", - "integrity": "sha512-Vf7Tt5Wh9XcndpbmeotuqOMLWPTjEKCsgojxXP2oxE1/xYe7PtnP76hsouG9vis6fctX+TxgmwxTuYi/+xc7dQ==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.18.0.tgz", + "integrity": "sha512-PMVPMmxPj0ps1VY75DIrT430MoOyQx9hmm174k6cmLZpcI95rAPXOQ+pp8ANQkJtNyLVDxnxVJ0QLbrm/ViBcg==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/engines": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.17.1.tgz", - "integrity": "sha512-D95Ik3GYZkqZ8lSR4EyFOJ/tR33FcYRP8kK61o+WMsyD10UfJwd7+YielflHfKwiGodcqKqoraWw8ElAgMDbPw==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.18.0.tgz", + "integrity": "sha512-i5RzjGF/ex6AFgqEe2o1IW8iIxJGYVQJVRau13kHPYEL1Ck8Zvwuzamqed/1iIljs5C7L+Opiz5TzSsUebkriA==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.17.1", - "@prisma/engines-version": "6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac", - "@prisma/fetch-engine": "6.17.1", - "@prisma/get-platform": "6.17.1" + "@prisma/debug": "6.18.0", + "@prisma/engines-version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "@prisma/fetch-engine": "6.18.0", + "@prisma/get-platform": "6.18.0" } }, "node_modules/@prisma/engines-version": { - "version": "6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac.tgz", - "integrity": "sha512-17140E3huOuD9lMdJ9+SF/juOf3WR3sTJMVyyenzqUPbuH+89nPhSWcrY+Mf7tmSs6HvaO+7S+HkELinn6bhdg==", + "version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f.tgz", + "integrity": "sha512-T7Af4QsJQnSgWN1zBbX+Cha5t4qjHRxoeoWpK4JugJzG/ipmmDMY5S+O0N1ET6sCBNVkf6lz+Y+ZNO9+wFU8pQ==", "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/fetch-engine": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.17.1.tgz", - "integrity": "sha512-AYZiHOs184qkDMiTeshyJCtyL4yERkjfTkJiSJdYuSfc24m94lTNL5+GFinZ6vVz+ktX4NJzHKn1zIFzGTWrWg==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.18.0.tgz", + "integrity": "sha512-TdaBvTtBwP3IoqVYoGIYpD4mWlk0pJpjTJjir/xLeNWlwog7Sl3bD2J0jJ8+5+q/6RBg+acb9drsv5W6lqae7A==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.17.1", - "@prisma/engines-version": "6.17.1-1.272a37d34178c2894197e17273bf937f25acdeac", - "@prisma/get-platform": "6.17.1" + "@prisma/debug": "6.18.0", + "@prisma/engines-version": "6.18.0-8.34b5a692b7bd79939a9a2c3ef97d816e749cda2f", + "@prisma/get-platform": "6.18.0" } }, "node_modules/@prisma/get-platform": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.17.1.tgz", - "integrity": "sha512-AKEn6fsfz0r482S5KRDFlIGEaq9wLNcgalD1adL+fPcFFblIKs1sD81kY/utrHdqKuVC6E1XSRpegDK3ZLL4Qg==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.18.0.tgz", + "integrity": "sha512-uXNJCJGhxTCXo2B25Ta91Rk1/Nmlqg9p7G9GKh8TPhxvAyXCvMNQoogj4JLEUy+3ku8g59cpyQIKFhqY2xO2bg==", "devOptional": true, "license": "Apache-2.0", "dependencies": { - "@prisma/debug": "6.17.1" + "@prisma/debug": "6.18.0" } }, "node_modules/@redis/client": { @@ -17565,6 +17595,12 @@ "node": ">=8" } }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "license": "MIT" + }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", @@ -21036,9 +21072,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -21048,9 +21084,9 @@ } }, "node_modules/dotenv-expand": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.1.tgz", - "integrity": "sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.3.tgz", + "integrity": "sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==", "license": "BSD-2-Clause", "dependencies": { "dotenv": "^16.4.5" @@ -21062,6 +21098,18 @@ "url": "https://dotenvx.com" } }, + "node_modules/dotenv-expand/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -21124,9 +21172,9 @@ "license": "MIT" }, "node_modules/effect": { - "version": "3.16.12", - "resolved": "https://registry.npmjs.org/effect/-/effect-3.16.12.tgz", - "integrity": "sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==", + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -25057,12 +25105,12 @@ } }, "node_modules/ioredis": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.1.tgz", - "integrity": "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.8.2.tgz", + "integrity": "sha512-C6uC+kleiIMmjViJINWk80sOQw5lEzse1ZmvD+S/s8p8CWapftSaC+kocGTx6xrbrJ4WmYQGC08ffHLr6ToR6Q==", "license": "MIT", "dependencies": { - "@ioredis/commands": "^1.1.1", + "@ioredis/commands": "1.4.0", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", @@ -33451,6 +33499,19 @@ "node": ">=8" } }, + "node_modules/nx/node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/nx/node_modules/dotenv-expand": { "version": "11.0.7", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", @@ -35740,15 +35801,15 @@ } }, "node_modules/prisma": { - "version": "6.17.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.17.1.tgz", - "integrity": "sha512-ac6h0sM1Tg3zu8NInY+qhP/S9KhENVaw9n1BrGKQVFu05JT5yT5Qqqmb8tMRIE3ZXvVj4xcRA5yfrsy4X7Yy5g==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.18.0.tgz", + "integrity": "sha512-bXWy3vTk8mnRmT+SLyZBQoC2vtV9Z8u7OHvEu+aULYxwiop/CPiFZ+F56KsNRNf35jw+8wcu8pmLsjxpBxAO9g==", "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@prisma/config": "6.17.1", - "@prisma/engines": "6.17.1" + "@prisma/config": "6.18.0", + "@prisma/engines": "6.18.0" }, "bin": { "prisma": "build/index.js" @@ -39046,6 +39107,117 @@ "url": "https://opencollective.com/synckit" } }, + "node_modules/tablemark": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tablemark/-/tablemark-4.1.0.tgz", + "integrity": "sha512-B3LDjbDo+ac+D5RwkBOPZZ6ua8716KdT+6NO3DKOCHJq0ezE6vV2r92rjrC1ci2H+ocuysl5ytf1T0QqV65yoA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2", + "change-case": "^5.4.4", + "string-width": "^8.1.0", + "wordwrapjs": "^5.1.0", + "wrap-ansi": "^9.0.2" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/tablemark/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/tablemark/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tablemark/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/tablemark/node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tablemark/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/tablemark/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/tablemark/node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tapable": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", @@ -41928,6 +42100,15 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrapjs": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.1.tgz", + "integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==", + "license": "MIT", + "engines": { + "node": ">=12.17" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/package.json b/package.json index a7fc8728b..6abe23cf4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.209.0", + "version": "2.211.0-beta.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", @@ -89,7 +89,7 @@ "@nestjs/schedule": "6.0.0", "@nestjs/serve-static": "5.0.3", "@openrouter/ai-sdk-provider": "0.7.2", - "@prisma/client": "6.17.1", + "@prisma/client": "6.18.0", "@simplewebauthn/browser": "13.1.0", "@simplewebauthn/server": "13.1.1", "@stripe/stripe-js": "7.9.0", @@ -111,6 +111,8 @@ "countries-list": "3.1.1", "countup.js": "2.9.0", "date-fns": "4.1.0", + "dotenv": "17.2.3", + "dotenv-expand": "12.0.3", "envalid": "8.1.0", "fuse.js": "7.1.0", "google-spreadsheet": "3.2.0", @@ -136,6 +138,7 @@ "rxjs": "7.8.1", "stripe": "18.5.0", "svgmap": "2.12.2", + "tablemark": "4.1.0", "twitter-api-v2": "1.23.0", "uuid": "11.1.0", "yahoo-finance2": "3.10.0", @@ -194,7 +197,7 @@ "nx": "21.5.1", "prettier": "3.6.2", "prettier-plugin-organize-attributes": "1.0.0", - "prisma": "6.17.1", + "prisma": "6.18.0", "react": "18.2.0", "react-dom": "18.2.0", "replace-in-file": "8.3.0", diff --git a/prisma.config.ts b/prisma.config.ts deleted file mode 100644 index 24da6d886..000000000 --- a/prisma.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import 'dotenv/config'; -import { join } from 'node:path'; -import { defineConfig } from 'prisma/config'; - -export default defineConfig({ - migrations: { - path: join('prisma', 'migrations'), - seed: `node ${join('prisma', 'seed.mts')}` - }, - schema: join('prisma', 'schema.prisma') -});