diff --git a/CHANGELOG.md b/CHANGELOG.md index 594461c42..fff9bb217 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,14 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Introduced a sidebar navigation on desktop + ### Changed -- Harmonized the logger output: () -- Improved the language localization for Dutch (`nl`) - Upgraded _Postgres_ from version `12` to `15` in the `docker-compose` files +## 2.1.0 - 2023-09-15 + +### Added + +- Added support to drop a file in the import activities dialog +- Added a timeout to all data source requests + +### Changed + +- Harmonized the style of the user interface for granting and revoking public access to share the portfolio +- Removed the account type from the user interface as a preparation to remove it from the `Account` database schema +- Improved the logger output of the info service +- Harmonized the logger output: ` ()` +- Improved the language localization for German (`de`) +- Improved the language localization for Italian (`it`) +- Improved the language localization for Dutch (`nl`) +- Improved the read-only mode + ### Fixed +- Fixed the timeout in _EOD Historical Data_ requests - Fixed an issue with the portfolio summary caused by the language localization for Dutch (`nl`) ## 2.0.0 - 2023-09-09 @@ -1521,7 +1542,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Set up the language localization for Italiano (`it`) +- Set up the language localization for Italian (`it`) - Extended the landing page ## 1.195.0 - 20.09.2022 @@ -2944,7 +2965,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Supported the management of additional currencies in the admin control panel - Introduced the system message -- Introduced the read only mode +- Introduced the read-only mode ### Changed diff --git a/apps/api/src/app/account/create-account.dto.ts b/apps/api/src/app/account/create-account.dto.ts index c700e7fa9..eb24d959a 100644 --- a/apps/api/src/app/account/create-account.dto.ts +++ b/apps/api/src/app/account/create-account.dto.ts @@ -10,6 +10,7 @@ import { import { isString } from 'lodash'; export class CreateAccountDto { + @IsOptional() @IsString() accountType: AccountType; diff --git a/apps/api/src/app/account/update-account.dto.ts b/apps/api/src/app/account/update-account.dto.ts index d8c62aff7..a91914482 100644 --- a/apps/api/src/app/account/update-account.dto.ts +++ b/apps/api/src/app/account/update-account.dto.ts @@ -10,6 +10,7 @@ import { import { isString } from 'lodash'; export class UpdateAccountDto { + @IsOptional() @IsString() accountType: AccountType; diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index b1b6b9418..a45fbe634 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -8,7 +8,9 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { DEFAULT_CURRENCY, - PROPERTY_CURRENCIES + PROPERTY_CURRENCIES, + PROPERTY_IS_READ_ONLY_MODE, + PROPERTY_IS_USER_SIGNUP_ENABLED } from '@ghostfolio/common/config'; import { AdminData, @@ -305,7 +307,9 @@ export class AdminService { response = await this.propertyService.delete({ key }); } - if (key === PROPERTY_CURRENCIES) { + if (key === PROPERTY_IS_READ_ONLY_MODE && value === 'true') { + await this.putSetting(PROPERTY_IS_USER_SIGNUP_ENABLED, 'false'); + } else if (key === PROPERTY_CURRENCIES) { await this.exchangeRateDataService.initialize(); } diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts index abeaf389d..fb7e09d41 100644 --- a/apps/api/src/app/export/export.service.ts +++ b/apps/api/src/app/export/export.service.ts @@ -26,18 +26,8 @@ export class ExportService { where: { userId } }) ).map( - ({ - accountType, - balance, - comment, - currency, - id, - isExcluded, - name, - platformId - }) => { + ({ balance, comment, currency, id, isExcluded, name, platformId }) => { return { - accountType, balance, comment, currency, diff --git a/apps/api/src/app/info/info.service.ts b/apps/api/src/app/info/info.service.ts index ec294bc25..f2c45a72b 100644 --- a/apps/api/src/app/info/info.service.ts +++ b/apps/api/src/app/info/info.service.ts @@ -8,6 +8,7 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv import { TagService } from '@ghostfolio/api/services/tag/tag.service'; import { DEFAULT_CURRENCY, + DEFAULT_REQUEST_TIMEOUT, PROPERTY_BETTER_UPTIME_MONITOR_ID, PROPERTY_COUNTRIES_OF_SUBSCRIBERS, PROPERTY_DEMO_USER_ID, @@ -168,16 +169,24 @@ export class InfoService { private async countDockerHubPulls(): Promise { try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const { pull_count } = await got( `https://hub.docker.com/v2/repositories/ghostfolio/ghostfolio`, { - headers: { 'User-Agent': 'request' } + headers: { 'User-Agent': 'request' }, + // @ts-ignore + signal: abortController.signal } ).json(); return pull_count; } catch (error) { - Logger.error(error, 'InfoService'); + Logger.error(error, 'InfoService - DockerHub'); return undefined; } @@ -185,7 +194,16 @@ export class InfoService { private async countGitHubContributors(): Promise { try { - const { body } = await got('https://github.com/ghostfolio/ghostfolio'); + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + + const { body } = await got('https://github.com/ghostfolio/ghostfolio', { + // @ts-ignore + signal: abortController.signal + }); const $ = cheerio.load(body); @@ -195,7 +213,7 @@ export class InfoService { ).text() ); } catch (error) { - Logger.error(error, 'InfoService'); + Logger.error(error, 'InfoService - GitHub'); return undefined; } @@ -203,16 +221,24 @@ export class InfoService { private async countGitHubStargazers(): Promise { try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const { stargazers_count } = await got( `https://api.github.com/repos/ghostfolio/ghostfolio`, { - headers: { 'User-Agent': 'request' } + headers: { 'User-Agent': 'request' }, + // @ts-ignore + signal: abortController.signal } ).json(); return stargazers_count; } catch (error) { - Logger.error(error, 'InfoService'); + Logger.error(error, 'InfoService - GitHub'); return undefined; } @@ -323,24 +349,31 @@ export class InfoService { PROPERTY_BETTER_UPTIME_MONITOR_ID )) as string; + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const { data } = await got( - `https://betteruptime.com/api/v2/monitors/${monitorId}/sla?from=${format( + `https://uptime.betterstack.com/api/v2/monitors/${monitorId}/sla?from=${format( subDays(new Date(), 90), DATE_FORMAT )}&to${format(new Date(), DATE_FORMAT)}`, - { headers: { Authorization: `Bearer ${this.configurationService.get( 'BETTER_UPTIME_API_KEY' )}` - } + }, + // @ts-ignore + signal: abortController.signal } ).json(); return data.attributes.availability / 100; } catch (error) { - Logger.error(error, 'InfoService'); + Logger.error(error, 'InfoService - Better Stack'); return undefined; } diff --git a/apps/api/src/app/logo/logo.service.ts b/apps/api/src/app/logo/logo.service.ts index 166143a75..80ae1d6a9 100644 --- a/apps/api/src/app/logo/logo.service.ts +++ b/apps/api/src/app/logo/logo.service.ts @@ -1,4 +1,5 @@ import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { DEFAULT_REQUEST_TIMEOUT } from '@ghostfolio/common/config'; import { UniqueAsset } from '@ghostfolio/common/interfaces'; import { HttpException, Injectable } from '@nestjs/common'; import { DataSource } from '@prisma/client'; @@ -41,10 +42,18 @@ export class LogoService { } private getBuffer(aUrl: string) { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + return got( `https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=${aUrl}&size=64`, { - headers: { 'User-Agent': 'request' } + headers: { 'User-Agent': 'request' }, + // @ts-ignore + signal: abortController.signal } ).buffer(); } diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index c5cc3c8ce..a2710bfd5 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -19,7 +19,7 @@ import { UserWithSettings } from '@ghostfolio/common/types'; import { Injectable } from '@nestjs/common'; import { Prisma, Role, User } from '@prisma/client'; import { differenceInDays } from 'date-fns'; -import { sortBy } from 'lodash'; +import { sortBy, without } from 'lodash'; const crypto = require('crypto'); @@ -188,6 +188,11 @@ export class UserService { currentPermissions.push(permissions.enableSubscriptionInterstitial); } + currentPermissions = without( + currentPermissions, + permissions.createAccess + ); + // Reset benchmark user.Settings.settings.benchmark = undefined; } diff --git a/apps/api/src/assets/sitemap.xml b/apps/api/src/assets/sitemap.xml index 9a357a777..5590f1909 100644 --- a/apps/api/src/assets/sitemap.xml +++ b/apps/api/src/assets/sitemap.xml @@ -1,9 +1,9 @@ + xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 + http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> https://ghostfol.io/de ${currentDate}T00:00:00+00:00 @@ -550,6 +550,110 @@ https://ghostfol.io/it/risorse ${currentDate}T00:00:00+00:00 + + https://ghostfol.io/it/risorse/personal-finance-tools + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-altoo + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-copilot-money + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-delta + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-divvydiary + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-exirio + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-folishare + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-getquin + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-gospatz + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-justetf + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-kubera + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-markets.sh + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-maybe-finance + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-monse + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-parqet + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-plannix + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-portfolio-dividend-tracker + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-portseido + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-projectionlab + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-seeking-alpha + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-sharesight + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-simple-portfolio + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-snowball-analytics + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-sumio + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-utluna + ${currentDate}T00:00:00+00:00 + + + https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-yeekatee + ${currentDate}T00:00:00+00:00 + https://ghostfol.io/nl ${currentDate}T00:00:00+00:00 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 56594ca40..4360822f0 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -4,7 +4,10 @@ import { IDataProviderHistoricalResponse, IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; -import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; +import { + DEFAULT_CURRENCY, + DEFAULT_REQUEST_TIMEOUT +} from '@ghostfolio/common/config'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { DataProviderInfo } from '@ghostfolio/common/interfaces'; import { Granularity } from '@ghostfolio/common/types'; @@ -40,7 +43,16 @@ export class CoinGeckoService implements DataProviderInterface { }; try { - const { name } = await got(`${this.URL}/coins/${aSymbol}`).json(); + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + + const { name } = await got(`${this.URL}/coins/${aSymbol}`, { + // @ts-ignore + signal: abortController.signal + }).json(); response.name = name; } catch (error) { @@ -73,12 +85,22 @@ export class CoinGeckoService implements DataProviderInterface { [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; }> { try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const { prices } = await got( `${ this.URL }/coins/${aSymbol}/market_chart/range?vs_currency=${DEFAULT_CURRENCY.toLowerCase()}&from=${getUnixTime( from - )}&to=${getUnixTime(to)}` + )}&to=${getUnixTime(to)}`, + { + // @ts-ignore + signal: abortController.signal + } ).json(); const result: { @@ -122,10 +144,20 @@ export class CoinGeckoService implements DataProviderInterface { } try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const response = await got( `${this.URL}/simple/price?ids=${aSymbols.join( ',' - )}&vs_currencies=${DEFAULT_CURRENCY.toLowerCase()}` + )}&vs_currencies=${DEFAULT_CURRENCY.toLowerCase()}`, + { + // @ts-ignore + signal: abortController.signal + } ).json(); for (const symbol in response) { @@ -160,9 +192,16 @@ export class CoinGeckoService implements DataProviderInterface { let items: LookupItem[] = []; try { - const { coins } = await got( - `${this.URL}/search?query=${query}` - ).json(); + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + + const { coins } = await got(`${this.URL}/search?query=${query}`, { + // @ts-ignore + signal: abortController.signal + }).json(); items = coins.map(({ id: symbol, name }) => { return { diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts index 07c0234b6..36eb22dad 100644 --- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts @@ -1,4 +1,5 @@ import { DataEnhancerInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-enhancer.interface'; +import { DEFAULT_REQUEST_TIMEOUT } from '@ghostfolio/common/config'; import { Country } from '@ghostfolio/common/interfaces/country.interface'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; import { Injectable } from '@nestjs/common'; @@ -32,15 +33,35 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { return response; } + let abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const profile = await got( - `${TrackinsightDataEnhancerService.baseUrl}/funds/${symbol}.json` + `${TrackinsightDataEnhancerService.baseUrl}/funds/${symbol}.json`, + { + // @ts-ignore + signal: abortController.signal + } ) .json() .catch(() => { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + return got( `${TrackinsightDataEnhancerService.baseUrl}/funds/${symbol.split( '.' - )?.[0]}.json` + )?.[0]}.json`, + { + // @ts-ignore + signal: abortController.signal + } ) .json() .catch(() => { @@ -54,15 +75,35 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { response.isin = isin; } + abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const holdings = await got( - `${TrackinsightDataEnhancerService.baseUrl}/holdings/${symbol}.json` + `${TrackinsightDataEnhancerService.baseUrl}/holdings/${symbol}.json`, + { + // @ts-ignore + signal: abortController.signal + } ) .json() .catch(() => { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + return got( `${TrackinsightDataEnhancerService.baseUrl}/holdings/${symbol.split( '.' - )?.[0]}.json` + )?.[0]}.json`, + { + // @ts-ignore + signal: abortController.signal + } ) .json() .catch(() => { 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 fd8114ad6..307f6127a 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 @@ -78,6 +78,12 @@ export class EodHistoricalDataService implements DataProviderInterface { const symbol = this.convertToEodSymbol(aSymbol); try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const response = await got( `${this.URL}/eod/${symbol}?api_token=${ this.apiKey @@ -86,9 +92,8 @@ export class EodHistoricalDataService implements DataProviderInterface { DATE_FORMAT )}&period={aGranularity}`, { - timeout: { - request: DEFAULT_REQUEST_TIMEOUT - } + // @ts-ignore + signal: abortController.signal } ).json(); @@ -138,14 +143,19 @@ export class EodHistoricalDataService implements DataProviderInterface { } try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const realTimeResponse = await got( `${this.URL}/real-time/${symbols[0]}?api_token=${ this.apiKey }&fmt=json&s=${symbols.join(',')}`, { - timeout: { - request: DEFAULT_REQUEST_TIMEOUT - } + // @ts-ignore + signal: abortController.signal } ).json(); @@ -331,12 +341,17 @@ export class EodHistoricalDataService implements DataProviderInterface { let searchResult = []; try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const response = await got( `${this.URL}/search/${aQuery}?api_token=${this.apiKey}`, { - timeout: { - request: DEFAULT_REQUEST_TIMEOUT - } + // @ts-ignore + signal: abortController.signal } ).json(); 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 c5d163456..4fd1d4ebd 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 @@ -5,7 +5,10 @@ import { IDataProviderHistoricalResponse, IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; -import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; +import { + DEFAULT_CURRENCY, + DEFAULT_REQUEST_TIMEOUT +} from '@ghostfolio/common/config'; import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper'; import { DataProviderInfo } from '@ghostfolio/common/interfaces'; import { Granularity } from '@ghostfolio/common/types'; @@ -63,8 +66,18 @@ export class FinancialModelingPrepService implements DataProviderInterface { [symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; }> { try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const { historical } = await got( - `${this.URL}/historical-price-full/${aSymbol}?apikey=${this.apiKey}` + `${this.URL}/historical-price-full/${aSymbol}?apikey=${this.apiKey}`, + { + // @ts-ignore + signal: abortController.signal + } ).json(); const result: { @@ -110,8 +123,18 @@ export class FinancialModelingPrepService implements DataProviderInterface { } try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const response = await got( - `${this.URL}/quote/${aSymbols.join(',')}?apikey=${this.apiKey}` + `${this.URL}/quote/${aSymbols.join(',')}?apikey=${this.apiKey}`, + { + // @ts-ignore + signal: abortController.signal + } ).json(); for (const { price, symbol } of response) { @@ -144,8 +167,18 @@ export class FinancialModelingPrepService implements DataProviderInterface { let items: LookupItem[] = []; try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const result = await got( - `${this.URL}/search?query=${query}&apikey=${this.apiKey}` + `${this.URL}/search?query=${query}&apikey=${this.apiKey}`, + { + // @ts-ignore + signal: abortController.signal + } ).json(); items = result.map(({ currency, name, symbol }) => { 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 adf14e43f..5c84a9c92 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -6,6 +6,7 @@ import { } 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'; +import { DEFAULT_REQUEST_TIMEOUT } from '@ghostfolio/common/config'; import { DATE_FORMAT, extractNumberFromString, @@ -95,7 +96,17 @@ export class ManualService implements DataProviderInterface { return {}; } - const { body } = await got(url, { headers }); + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + + const { body } = await got(url, { + headers, + // @ts-ignore + signal: abortController.signal + }); const $ = cheerio.load(body); 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 307855aaf..7743d7805 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 @@ -5,7 +5,10 @@ import { IDataProviderHistoricalResponse, IDataProviderResponse } from '@ghostfolio/api/services/interfaces/interfaces'; -import { ghostfolioFearAndGreedIndexSymbol } from '@ghostfolio/common/config'; +import { + DEFAULT_REQUEST_TIMEOUT, + ghostfolioFearAndGreedIndexSymbol +} from '@ghostfolio/common/config'; import { DATE_FORMAT, getYesterday } from '@ghostfolio/common/helper'; import { Granularity } from '@ghostfolio/common/types'; import { Injectable, Logger } from '@nestjs/common'; @@ -135,6 +138,12 @@ export class RapidApiService implements DataProviderInterface { oneYearAgo: { value: number; valueText: string }; }> { try { + const abortController = new AbortController(); + + setTimeout(() => { + abortController.abort(); + }, DEFAULT_REQUEST_TIMEOUT); + const { fgi } = await got( `https://fear-and-greed-index.p.rapidapi.com/v1/fgi`, { @@ -142,7 +151,9 @@ export class RapidApiService implements DataProviderInterface { useQueryString: 'true', 'x-rapidapi-host': 'fear-and-greed-index.p.rapidapi.com', 'x-rapidapi-key': this.configurationService.get('RAPID_API_API_KEY') - } + }, + // @ts-ignore + signal: abortController.signal } ).json(); diff --git a/apps/client/src/app/components/access-table/access-table.component.html b/apps/client/src/app/components/access-table/access-table.component.html index 589c67e1f..498e73bf0 100644 --- a/apps/client/src/app/components/access-table/access-table.component.html +++ b/apps/client/src/app/components/access-table/access-table.component.html @@ -1,3 +1,15 @@ + + diff --git a/apps/client/src/app/components/access-table/access-table.component.ts b/apps/client/src/app/components/access-table/access-table.component.ts index c0db8fb2f..298a02069 100644 --- a/apps/client/src/app/components/access-table/access-table.component.ts +++ b/apps/client/src/app/components/access-table/access-table.component.ts @@ -19,6 +19,7 @@ import { Access } from '@ghostfolio/common/interfaces'; }) export class AccessTableComponent implements OnChanges, OnInit { @Input() accesses: Access[]; + @Input() hasPermissionToCreateAccess = false; @Input() showActions: boolean; @Output() accessDeleted = new EventEmitter(); diff --git a/apps/client/src/app/components/access-table/access-table.module.ts b/apps/client/src/app/components/access-table/access-table.module.ts index 111f0e2f4..2ace3cfc1 100644 --- a/apps/client/src/app/components/access-table/access-table.module.ts +++ b/apps/client/src/app/components/access-table/access-table.module.ts @@ -3,13 +3,20 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatMenuModule } from '@angular/material/menu'; import { MatTableModule } from '@angular/material/table'; +import { RouterModule } from '@angular/router'; import { AccessTableComponent } from './access-table.component'; @NgModule({ declarations: [AccessTableComponent], exports: [AccessTableComponent], - imports: [CommonModule, MatButtonModule, MatMenuModule, MatTableModule], + imports: [ + CommonModule, + MatButtonModule, + MatMenuModule, + MatTableModule, + RouterModule + ], schemas: [CUSTOM_ELEMENTS_SCHEMA] }) export class GfPortfolioAccessTableModule {} diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts index 06e4cebf6..3a4746b6b 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts @@ -29,13 +29,13 @@ import { AccountDetailDialogParams } from './interfaces/interfaces'; styleUrls: ['./account-detail-dialog.component.scss'] }) export class AccountDetailDialog implements OnDestroy, OnInit { - public accountType: string; public balance: number; public currency: string; public equity: number; public name: string; public orders: OrderWithAccount[]; public platformName: string; + public transactionCount: number; public user: User; public valueInBaseCurrency: number; @@ -65,15 +65,14 @@ export class AccountDetailDialog implements OnDestroy, OnInit { .pipe(takeUntil(this.unsubscribeSubject)) .subscribe( ({ - accountType, balance, currency, name, Platform, + transactionCount, value, valueInBaseCurrency }) => { - this.accountType = translate(accountType); this.balance = balance; this.currency = currency; @@ -85,6 +84,7 @@ export class AccountDetailDialog implements OnDestroy, OnInit { this.name = name; this.platformName = Platform?.name ?? '-'; + this.transactionCount = transactionCount; this.valueInBaseCurrency = valueInBaseCurrency; this.changeDetectorRef.markForCheck(); diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html index 126c33ac5..46a5ee7b0 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html @@ -44,8 +44,8 @@ >
- Account TypeActivities
diff --git a/apps/client/src/app/components/accounts-table/accounts-table.component.html b/apps/client/src/app/components/accounts-table/accounts-table.component.html index 0b859321f..d3ece8977 100644 --- a/apps/client/src/app/components/accounts-table/accounts-table.component.html +++ b/apps/client/src/app/components/accounts-table/accounts-table.component.html @@ -85,7 +85,7 @@
Alias @@ -93,9 +93,7 @@ Activities - {{ - element.transactionCount - }} + {{ element.transactionCount }} {{ transactionCount }} diff --git a/apps/client/src/app/directives/file-drop/file-drop.directive.ts b/apps/client/src/app/directives/file-drop/file-drop.directive.ts new file mode 100644 index 000000000..65f3ed23a --- /dev/null +++ b/apps/client/src/app/directives/file-drop/file-drop.directive.ts @@ -0,0 +1,28 @@ +import { Directive, HostListener, Output, EventEmitter } from '@angular/core'; + +@Directive({ + selector: '[gfFileDrop]' +}) +export class FileDropDirective { + @Output() filesDropped = new EventEmitter(); + + @HostListener('dragenter', ['$event']) onDragEnter(event: DragEvent) { + event.preventDefault(); + event.stopPropagation(); + } + + @HostListener('dragover', ['$event']) onDragOver(event: DragEvent) { + event.preventDefault(); + event.stopPropagation(); + } + + @HostListener('drop', ['$event']) onDrop(event: DragEvent) { + event.preventDefault(); + event.stopPropagation(); + + // Prevent the browser's default behavior for handling the file drop + event.dataTransfer.dropEffect = 'copy'; + + this.filesDropped.emit(event.dataTransfer.files); + } +} diff --git a/apps/client/src/app/directives/file-drop/file-drop.module.ts b/apps/client/src/app/directives/file-drop/file-drop.module.ts new file mode 100644 index 000000000..a0148516e --- /dev/null +++ b/apps/client/src/app/directives/file-drop/file-drop.module.ts @@ -0,0 +1,9 @@ +import { NgModule } from '@angular/core'; + +import { FileDropDirective } from './file-drop.directive'; + +@NgModule({ + declarations: [FileDropDirective], + exports: [FileDropDirective] +}) +export class GfFileDropModule {} diff --git a/apps/client/src/app/pages/about/about-page.component.ts b/apps/client/src/app/pages/about/about-page.component.ts index ef000d49b..6d9887dde 100644 --- a/apps/client/src/app/pages/about/about-page.component.ts +++ b/apps/client/src/app/pages/about/about-page.component.ts @@ -9,10 +9,12 @@ import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { TabConfiguration, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @Component({ + host: { class: 'page with-tabs' }, selector: 'gf-about-page', styleUrls: ['./about-page.scss'], templateUrl: './about-page.html' @@ -22,6 +24,7 @@ export class AboutPageComponent implements OnDestroy, OnInit { return this.hasMessage; } + public deviceType: string; public hasMessage: boolean; public hasPermissionForSubscription: boolean; public tabs: TabConfiguration[] = []; @@ -32,6 +35,7 @@ export class AboutPageComponent implements OnDestroy, OnInit { public constructor( private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, + private deviceService: DeviceDetectorService, private userService: UserService ) { const { globalPermissions, systemMessage } = this.dataService.fetchInfo(); @@ -88,7 +92,9 @@ export class AboutPageComponent implements OnDestroy, OnInit { }); } - public ngOnInit() {} + public ngOnInit() { + this.deviceType = this.deviceService.getDeviceInfo().deviceType; + } public ngOnDestroy() { this.unsubscribeSubject.next(); diff --git a/apps/client/src/app/pages/about/about-page.html b/apps/client/src/app/pages/about/about-page.html index ce1d84851..014f68b9f 100644 --- a/apps/client/src/app/pages/about/about-page.html +++ b/apps/client/src/app/pages/about/about-page.html @@ -14,7 +14,10 @@ [routerLink]="tab.path" [routerLinkActiveOptions]="{ exact: true }" > - +
{{ tab.label }}
diff --git a/apps/client/src/app/pages/about/about-page.scss b/apps/client/src/app/pages/about/about-page.scss index daeb6fc94..6a0b74854 100644 --- a/apps/client/src/app/pages/about/about-page.scss +++ b/apps/client/src/app/pages/about/about-page.scss @@ -2,27 +2,6 @@ :host { color: rgb(var(--dark-primary-text)); - display: flex; - flex-direction: column; - height: calc(100vh - 5rem); - overflow-y: auto; - - padding-bottom: env(safe-area-inset-bottom); - padding-bottom: constant(safe-area-inset-bottom); - - ::ng-deep { - .mat-mdc-tab-link-container { - --mat-tab-header-active-focus-indicator-color: transparent; - --mat-tab-header-active-hover-indicator-color: transparent; - --mdc-tab-indicator-active-indicator-color: transparent; - - .mat-mdc-tab-link { - &:hover { - opacity: 0.75; - } - } - } - } } :host-context(.is-dark-theme) { diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts index 96bd06816..ab03340df 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -10,7 +10,7 @@ import { ImpersonationStorageService } from '@ghostfolio/client/services/imperso import { UserService } from '@ghostfolio/client/services/user/user.service'; import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; -import { Account as AccountModel, AccountType } from '@prisma/client'; +import { Account as AccountModel } from '@prisma/client'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject, Subscription } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @@ -151,7 +151,6 @@ export class AccountsPageComponent implements OnDestroy, OnInit { } public openUpdateAccountDialog({ - accountType, balance, comment, currency, @@ -163,7 +162,6 @@ export class AccountsPageComponent implements OnDestroy, OnInit { const dialogRef = this.dialog.open(CreateOrUpdateAccountDialog, { data: { account: { - accountType, balance, comment, currency, @@ -232,7 +230,6 @@ export class AccountsPageComponent implements OnDestroy, OnInit { const dialogRef = this.dialog.open(CreateOrUpdateAccountDialog, { data: { account: { - accountType: AccountType.SECURITIES, balance: 0, comment: null, currency: this.user?.settings?.baseCurrency, diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html index 7c1768f1a..7b6f399a0 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -8,15 +8,6 @@ -
- - Type - - Cash - Securities - - -
Currency diff --git a/apps/client/src/app/pages/admin/admin-page.component.ts b/apps/client/src/app/pages/admin/admin-page.component.ts index c95630726..6ba5d0ac8 100644 --- a/apps/client/src/app/pages/admin/admin-page.component.ts +++ b/apps/client/src/app/pages/admin/admin-page.component.ts @@ -1,9 +1,11 @@ import { Component, HostBinding, OnDestroy, OnInit } from '@angular/core'; import { DataService } from '@ghostfolio/client/services/data.service'; import { TabConfiguration } from '@ghostfolio/common/interfaces'; +import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; @Component({ + host: { class: 'page with-tabs' }, selector: 'gf-admin-page', styleUrls: ['./admin-page.scss'], templateUrl: './admin-page.html' @@ -13,18 +15,24 @@ export class AdminPageComponent implements OnDestroy, OnInit { return this.hasMessage; } + public deviceType: string; public hasMessage: boolean; public tabs: TabConfiguration[] = []; private unsubscribeSubject = new Subject(); - public constructor(private dataService: DataService) { + public constructor( + private dataService: DataService, + private deviceService: DeviceDetectorService + ) { const { systemMessage } = this.dataService.fetchInfo(); this.hasMessage = !!systemMessage; } public ngOnInit() { + this.deviceType = this.deviceService.getDeviceInfo().deviceType; + this.tabs = [ { iconName: 'reader-outline', diff --git a/apps/client/src/app/pages/admin/admin-page.html b/apps/client/src/app/pages/admin/admin-page.html index ce1d84851..014f68b9f 100644 --- a/apps/client/src/app/pages/admin/admin-page.html +++ b/apps/client/src/app/pages/admin/admin-page.html @@ -14,7 +14,10 @@ [routerLink]="tab.path" [routerLinkActiveOptions]="{ exact: true }" > - +
{{ tab.label }}
diff --git a/apps/client/src/app/pages/admin/admin-page.scss b/apps/client/src/app/pages/admin/admin-page.scss index daeb6fc94..6a0b74854 100644 --- a/apps/client/src/app/pages/admin/admin-page.scss +++ b/apps/client/src/app/pages/admin/admin-page.scss @@ -2,27 +2,6 @@ :host { color: rgb(var(--dark-primary-text)); - display: flex; - flex-direction: column; - height: calc(100vh - 5rem); - overflow-y: auto; - - padding-bottom: env(safe-area-inset-bottom); - padding-bottom: constant(safe-area-inset-bottom); - - ::ng-deep { - .mat-mdc-tab-link-container { - --mat-tab-header-active-focus-indicator-color: transparent; - --mat-tab-header-active-hover-indicator-color: transparent; - --mdc-tab-indicator-active-indicator-color: transparent; - - .mat-mdc-tab-link { - &:hover { - opacity: 0.75; - } - } - } - } } :host-context(.is-dark-theme) { diff --git a/apps/client/src/app/pages/home/home-page.component.ts b/apps/client/src/app/pages/home/home-page.component.ts index 77c318395..13904e037 100644 --- a/apps/client/src/app/pages/home/home-page.component.ts +++ b/apps/client/src/app/pages/home/home-page.component.ts @@ -9,10 +9,12 @@ import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { TabConfiguration, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @Component({ + host: { class: 'page with-tabs' }, selector: 'gf-home-page', styleUrls: ['./home-page.scss'], templateUrl: './home-page.html' @@ -22,6 +24,7 @@ export class HomePageComponent implements OnDestroy, OnInit { return this.hasMessage; } + public deviceType: string; public hasMessage: boolean; public hasPermissionToAccessFearAndGreedIndex: boolean; public tabs: TabConfiguration[] = []; @@ -32,6 +35,7 @@ export class HomePageComponent implements OnDestroy, OnInit { public constructor( private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, + private deviceService: DeviceDetectorService, private userService: UserService ) { const { globalPermissions, systemMessage } = this.dataService.fetchInfo(); @@ -81,7 +85,9 @@ export class HomePageComponent implements OnDestroy, OnInit { }); } - public ngOnInit() {} + public ngOnInit() { + this.deviceType = this.deviceService.getDeviceInfo().deviceType; + } public ngOnDestroy() { this.unsubscribeSubject.next(); diff --git a/apps/client/src/app/pages/home/home-page.html b/apps/client/src/app/pages/home/home-page.html index ce1d84851..014f68b9f 100644 --- a/apps/client/src/app/pages/home/home-page.html +++ b/apps/client/src/app/pages/home/home-page.html @@ -14,7 +14,10 @@ [routerLink]="tab.path" [routerLinkActiveOptions]="{ exact: true }" > - +
{{ tab.label }}
diff --git a/apps/client/src/app/pages/home/home-page.scss b/apps/client/src/app/pages/home/home-page.scss index daeb6fc94..6a0b74854 100644 --- a/apps/client/src/app/pages/home/home-page.scss +++ b/apps/client/src/app/pages/home/home-page.scss @@ -2,27 +2,6 @@ :host { color: rgb(var(--dark-primary-text)); - display: flex; - flex-direction: column; - height: calc(100vh - 5rem); - overflow-y: auto; - - padding-bottom: env(safe-area-inset-bottom); - padding-bottom: constant(safe-area-inset-bottom); - - ::ng-deep { - .mat-mdc-tab-link-container { - --mat-tab-header-active-focus-indicator-color: transparent; - --mat-tab-header-active-hover-indicator-color: transparent; - --mdc-tab-indicator-active-indicator-color: transparent; - - .mat-mdc-tab-link { - &:hover { - opacity: 0.75; - } - } - } - } } :host-context(.is-dark-theme) { diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts index baa68f795..c89b6c490 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts @@ -238,9 +238,7 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit { const dialogRef = this.dialog.open(CreateOrUpdateActivityDialog, { data: { activity, - accounts: this.user?.accounts?.filter((account) => { - return account.accountType === 'SECURITIES'; - }), + accounts: this.user?.accounts, user: this.user }, height: this.deviceType === 'mobile' ? '97.5vh' : '80vh', @@ -282,9 +280,7 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit { const dialogRef = this.dialog.open(CreateOrUpdateActivityDialog, { data: { - accounts: this.user?.accounts?.filter((account) => { - return account.accountType === 'SECURITIES'; - }), + accounts: this.user?.accounts, activity: { ...aActivity, accountId: aActivity?.accountId ?? this.defaultAccountId, diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts index 46a307318..d11cafdb9 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts @@ -137,6 +137,20 @@ export class ImportActivitiesDialog implements OnDestroy { } } + public onFilesDropped({ + files, + stepper + }: { + files: FileList; + stepper: MatStepper; + }): void { + if (files.length === 0) { + return; + } + + this.handleFile({ stepper, file: files[0] }); + } + public onImportStepChange(event: StepperSelectionEvent) { if (event.selectedIndex === ImportStep.UPLOAD_FILE) { this.importStep = ImportStep.UPLOAD_FILE; @@ -175,111 +189,120 @@ export class ImportActivitiesDialog implements OnDestroy { aStepper.reset(); } - public onSelectFile(aStepper: MatStepper) { + public onSelectFile(stepper: MatStepper) { const input = document.createElement('input'); input.accept = 'application/JSON, .csv'; input.type = 'file'; input.onchange = (event) => { - this.snackBar.open('⏳ ' + $localize`Validating data...`); - // Getting the file reference const file = (event.target as HTMLInputElement).files[0]; + this.handleFile({ file, stepper }); + }; - // Setting up the reader - const reader = new FileReader(); - reader.readAsText(file, 'UTF-8'); + input.click(); + } + + public updateSelection(activities: Activity[]) { + this.selectedActivities = activities.filter(({ error }) => { + return !error; + }); + } - reader.onload = async (readerEvent) => { - const fileContent = readerEvent.target.result as string; + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } - try { - if (file.name.endsWith('.json')) { - const content = JSON.parse(fileContent); + private async handleFile({ + file, + stepper + }: { + file: File; + stepper: MatStepper; + }): Promise { + this.snackBar.open('⏳ ' + $localize`Validating data...`); - this.accounts = content.accounts; + // Setting up the reader + const reader = new FileReader(); + reader.readAsText(file, 'UTF-8'); - if (!isArray(content.activities)) { - if (isArray(content.orders)) { - this.handleImportError({ - activities: [], - error: { - error: { - message: [`orders needs to be renamed to activities`] - } - } - }); - return; - } else { - throw new Error(); - } - } + reader.onload = async (readerEvent) => { + const fileContent = readerEvent.target.result as string; - try { - const { activities } = - await this.importActivitiesService.importJson({ - accounts: content.accounts, - activities: content.activities, - isDryRun: true - }); - this.activities = activities; - } catch (error) { - console.error(error); - this.handleImportError({ error, activities: content.activities }); - } + try { + if (file.name.endsWith('.json')) { + const content = JSON.parse(fileContent); - return; - } else if (file.name.endsWith('.csv')) { - try { - const data = await this.importActivitiesService.importCsv({ - fileContent, - isDryRun: true, - userAccounts: this.data.user.accounts - }); - this.activities = data.activities; - } catch (error) { - console.error(error); + this.accounts = content.accounts; + + if (!isArray(content.activities)) { + if (isArray(content.orders)) { this.handleImportError({ - activities: error?.activities ?? [], + activities: [], error: { - error: { message: error?.error?.message ?? [error?.message] } + error: { + message: [`orders needs to be renamed to activities`] + } } }); + return; + } else { + throw new Error(); } - - return; } - throw new Error(); - } catch (error) { - console.error(error); - this.handleImportError({ - activities: [], - error: { error: { message: ['Unexpected format'] } } - }); - } finally { - this.importStep = ImportStep.SELECT_ACTIVITIES; - this.snackBar.dismiss(); + try { + const { activities } = + await this.importActivitiesService.importJson({ + accounts: content.accounts, + activities: content.activities, + isDryRun: true + }); + this.activities = activities; + } catch (error) { + console.error(error); + this.handleImportError({ error, activities: content.activities }); + } - aStepper.next(); + return; + } else if (file.name.endsWith('.csv')) { + try { + const data = await this.importActivitiesService.importCsv({ + fileContent, + isDryRun: true, + userAccounts: this.data.user.accounts + }); + this.activities = data.activities; + } catch (error) { + console.error(error); + this.handleImportError({ + activities: error?.activities ?? [], + error: { + error: { message: error?.error?.message ?? [error?.message] } + } + }); + } - this.changeDetectorRef.markForCheck(); + return; } - }; - }; - input.click(); - } + throw new Error(); + } catch (error) { + console.error(error); + this.handleImportError({ + activities: [], + error: { error: { message: ['Unexpected format'] } } + }); + } finally { + this.importStep = ImportStep.SELECT_ACTIVITIES; + this.snackBar.dismiss(); - public updateSelection(activities: Activity[]) { - this.selectedActivities = activities.filter(({ error }) => { - return !error; - }); - } + stepper.next(); - public ngOnDestroy() { - this.unsubscribeSubject.next(); - this.unsubscribeSubject.complete(); + this.changeDetectorRef.markForCheck(); + } + }; } private handleImportError({ diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html index 02071c137..06cadad8e 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -70,29 +70,38 @@
-

- The following file formats are supported: - CSV - or - JSON + + Choose or drop a file here +

+ +

+ + The following file formats are supported: + CSV + or + JSON +

@@ -109,7 +118,7 @@ >
- + { - return accountType === 'SECURITIES'; - }) - .map(({ id, name }) => { + const accountFilters: Filter[] = this.user.accounts.map( + ({ id, name }) => { return { id, label: name, type: 'ACCOUNT' }; - }); + } + ); const assetClassFilters: Filter[] = []; for (const assetClass of Object.keys(AssetClass)) { diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts index a9ab22454..1fb25f44f 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -139,17 +139,15 @@ export class AnalysisPageComponent implements OnDestroy, OnInit { if (state?.user) { this.user = state.user; - const accountFilters: Filter[] = this.user.accounts - .filter(({ accountType }) => { - return accountType === 'SECURITIES'; - }) - .map(({ id, name }) => { + const accountFilters: Filter[] = this.user.accounts.map( + ({ id, name }) => { return { id, label: name, type: 'ACCOUNT' }; - }); + } + ); const assetClassFilters: Filter[] = []; for (const assetClass of Object.keys(AssetClass)) { diff --git a/apps/client/src/app/pages/portfolio/holdings/holdings-page.component.ts b/apps/client/src/app/pages/portfolio/holdings/holdings-page.component.ts index c4201a6ca..6d27b70f7 100644 --- a/apps/client/src/app/pages/portfolio/holdings/holdings-page.component.ts +++ b/apps/client/src/app/pages/portfolio/holdings/holdings-page.component.ts @@ -114,17 +114,15 @@ export class HoldingsPageComponent implements OnDestroy, OnInit { permissions.createOrder ); - const accountFilters: Filter[] = this.user.accounts - .filter(({ accountType }) => { - return accountType === 'SECURITIES'; - }) - .map(({ id, name }) => { + const accountFilters: Filter[] = this.user.accounts.map( + ({ id, name }) => { return { id, label: name, type: 'ACCOUNT' }; - }); + } + ); const assetClassFilters: Filter[] = []; for (const assetClass of Object.keys(AssetClass)) { diff --git a/apps/client/src/app/pages/portfolio/portfolio-page.component.ts b/apps/client/src/app/pages/portfolio/portfolio-page.component.ts index 2244e7af9..8d4b3b628 100644 --- a/apps/client/src/app/pages/portfolio/portfolio-page.component.ts +++ b/apps/client/src/app/pages/portfolio/portfolio-page.component.ts @@ -13,10 +13,12 @@ import { User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @Component({ + host: { class: 'page with-tabs' }, selector: 'gf-portfolio-page', styleUrls: ['./portfolio-page.scss'], templateUrl: './portfolio-page.html' @@ -26,6 +28,7 @@ export class PortfolioPageComponent implements OnDestroy, OnInit { return this.hasMessage; } + public deviceType: string; public hasMessage: boolean; public info: InfoItem; public tabs: TabConfiguration[] = []; @@ -36,6 +39,7 @@ export class PortfolioPageComponent implements OnDestroy, OnInit { public constructor( private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, + private deviceService: DeviceDetectorService, private userService: UserService ) { this.info = this.dataService.fetchInfo(); @@ -84,7 +88,9 @@ export class PortfolioPageComponent implements OnDestroy, OnInit { }); } - public ngOnInit() {} + public ngOnInit() { + this.deviceType = this.deviceService.getDeviceInfo().deviceType; + } public ngOnDestroy() { this.unsubscribeSubject.next(); diff --git a/apps/client/src/app/pages/portfolio/portfolio-page.html b/apps/client/src/app/pages/portfolio/portfolio-page.html index ce1d84851..014f68b9f 100644 --- a/apps/client/src/app/pages/portfolio/portfolio-page.html +++ b/apps/client/src/app/pages/portfolio/portfolio-page.html @@ -14,7 +14,10 @@ [routerLink]="tab.path" [routerLinkActiveOptions]="{ exact: true }" > - +
{{ tab.label }}
diff --git a/apps/client/src/app/pages/portfolio/portfolio-page.scss b/apps/client/src/app/pages/portfolio/portfolio-page.scss index daeb6fc94..6a0b74854 100644 --- a/apps/client/src/app/pages/portfolio/portfolio-page.scss +++ b/apps/client/src/app/pages/portfolio/portfolio-page.scss @@ -2,27 +2,6 @@ :host { color: rgb(var(--dark-primary-text)); - display: flex; - flex-direction: column; - height: calc(100vh - 5rem); - overflow-y: auto; - - padding-bottom: env(safe-area-inset-bottom); - padding-bottom: constant(safe-area-inset-bottom); - - ::ng-deep { - .mat-mdc-tab-link-container { - --mat-tab-header-active-focus-indicator-color: transparent; - --mat-tab-header-active-hover-indicator-color: transparent; - --mdc-tab-indicator-active-indicator-color: transparent; - - .mat-mdc-tab-link { - &:hover { - opacity: 0.75; - } - } - } - } } :host-context(.is-dark-theme) { 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 6f19a9b46..f7776f871 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -2,6 +2,7 @@ import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { User } from '@ghostfolio/common/interfaces'; +import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { translate } from '@ghostfolio/ui/i18n'; import { StripeService } from 'ngx-stripe'; import { Subject } from 'rxjs'; @@ -17,6 +18,7 @@ export class PricingPageComponent implements OnDestroy, OnInit { public baseCurrency: string; public coupon: number; public couponId: string; + public hasPermissionToUpdateUserSettings: boolean; public importAndExportTooltipBasic = translate( 'DATA_IMPORT_AND_EXPORT_TOOLTIP_BASIC' ); @@ -55,6 +57,11 @@ export class PricingPageComponent implements OnDestroy, OnInit { if (state?.user) { this.user = state.user; + this.hasPermissionToUpdateUserSettings = hasPermission( + this.user.permissions, + permissions.updateUserSettings + ); + this.coupon = subscriptions?.[this.user?.subscription?.offer]?.coupon; this.couponId = subscriptions?.[this.user.subscription.offer]?.couponId; diff --git a/apps/client/src/app/pages/pricing/pricing-page.html b/apps/client/src/app/pages/pricing/pricing-page.html index abd169a5e..1c1bb6c41 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.html +++ b/apps/client/src/app/pages/pricing/pricing-page.html @@ -333,7 +333,7 @@ >

diff --git a/apps/client/src/app/pages/user-account/user-account-page.scss b/apps/client/src/app/pages/user-account/user-account-page.scss index 6a010a85d..6dddf0e35 100644 --- a/apps/client/src/app/pages/user-account/user-account-page.scss +++ b/apps/client/src/app/pages/user-account/user-account-page.scss @@ -6,13 +6,6 @@ overflow-x: auto; } - .fab-container { - position: fixed; - right: 2rem; - bottom: 2rem; - z-index: 999; - } - .hint-text { font-size: 90%; line-height: 1.2; diff --git a/apps/client/src/app/pages/zen/zen-page.component.ts b/apps/client/src/app/pages/zen/zen-page.component.ts index 9f769e281..ab164af4c 100644 --- a/apps/client/src/app/pages/zen/zen-page.component.ts +++ b/apps/client/src/app/pages/zen/zen-page.component.ts @@ -1,33 +1,27 @@ -import { ViewportScroller } from '@angular/common'; -import { - AfterViewInit, - ChangeDetectorRef, - Component, - OnDestroy, - OnInit -} from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; +import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { TabConfiguration, User } from '@ghostfolio/common/interfaces'; +import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; -import { first, takeUntil } from 'rxjs/operators'; +import { takeUntil } from 'rxjs/operators'; @Component({ + host: { class: 'page with-tabs' }, selector: 'gf-zen-page', - templateUrl: './zen-page.html', - styleUrls: ['./zen-page.scss'] + styleUrls: ['./zen-page.scss'], + templateUrl: './zen-page.html' }) -export class ZenPageComponent implements AfterViewInit, OnDestroy, OnInit { +export class ZenPageComponent implements OnDestroy, OnInit { + public deviceType: string; public tabs: TabConfiguration[] = []; public user: User; private unsubscribeSubject = new Subject(); public constructor( - private route: ActivatedRoute, private changeDetectorRef: ChangeDetectorRef, - private userService: UserService, - private viewportScroller: ViewportScroller + private deviceService: DeviceDetectorService, + private userService: UserService ) { this.userService.stateChanged .pipe(takeUntil(this.unsubscribeSubject)) @@ -52,12 +46,8 @@ export class ZenPageComponent implements AfterViewInit, OnDestroy, OnInit { }); } - public ngOnInit() {} - - public ngAfterViewInit(): void { - this.route.fragment - .pipe(first()) - .subscribe((fragment) => this.viewportScroller.scrollToAnchor(fragment)); + public ngOnInit() { + this.deviceType = this.deviceService.getDeviceInfo().deviceType; } public ngOnDestroy() { diff --git a/apps/client/src/app/pages/zen/zen-page.html b/apps/client/src/app/pages/zen/zen-page.html index ce1d84851..014f68b9f 100644 --- a/apps/client/src/app/pages/zen/zen-page.html +++ b/apps/client/src/app/pages/zen/zen-page.html @@ -14,7 +14,10 @@ [routerLink]="tab.path" [routerLinkActiveOptions]="{ exact: true }" > - +
{{ tab.label }}
diff --git a/apps/client/src/app/pages/zen/zen-page.scss b/apps/client/src/app/pages/zen/zen-page.scss index daeb6fc94..6a0b74854 100644 --- a/apps/client/src/app/pages/zen/zen-page.scss +++ b/apps/client/src/app/pages/zen/zen-page.scss @@ -2,27 +2,6 @@ :host { color: rgb(var(--dark-primary-text)); - display: flex; - flex-direction: column; - height: calc(100vh - 5rem); - overflow-y: auto; - - padding-bottom: env(safe-area-inset-bottom); - padding-bottom: constant(safe-area-inset-bottom); - - ::ng-deep { - .mat-mdc-tab-link-container { - --mat-tab-header-active-focus-indicator-color: transparent; - --mat-tab-header-active-hover-indicator-color: transparent; - --mdc-tab-indicator-active-indicator-color: transparent; - - .mat-mdc-tab-link { - &:hover { - opacity: 0.75; - } - } - } - } } :host-context(.is-dark-theme) { diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index d64d85c7f..2aa6b7235 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -26,7 +26,7 @@ Empfänger apps/client/src/app/components/access-table/access-table.component.html - 10 + 22 @@ -34,16 +34,12 @@ Typ apps/client/src/app/components/access-table/access-table.component.html - 17 + 29 apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 13 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 @@ -62,7 +58,7 @@ Details apps/client/src/app/components/access-table/access-table.component.html - 27 + 39 @@ -70,7 +66,7 @@ Widerrufen apps/client/src/app/components/access-table/access-table.component.html - 54 + 66 @@ -78,12 +74,16 @@ Möchtest du diese Zugangsberechtigung wirklich widerrufen? apps/client/src/app/components/access-table/access-table.component.ts - 49 + 50 Activities Aktivitäten + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 48 + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 58 @@ -158,11 +158,11 @@ Wert apps/client/src/app/components/accounts-table/accounts-table.component.html - 147 + 145 apps/client/src/app/components/accounts-table/accounts-table.component.html - 182 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -198,7 +198,7 @@ Bearbeiten apps/client/src/app/components/accounts-table/accounts-table.component.html - 248 + 246 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -214,7 +214,7 @@ Löschen apps/client/src/app/components/accounts-table/accounts-table.component.html - 256 + 254 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -406,7 +406,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 88 + 79 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/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 86 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1058,7 +1058,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 98 apps/client/src/app/pages/register/register-page.html @@ -1530,7 +1530,7 @@ apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.html - 267 + 273 apps/client/src/app/pages/blog/blog-page.html @@ -1642,7 +1642,7 @@ Mitgliedschaft apps/client/src/app/pages/user-account/user-account-page.html - 15 + 12 @@ -1650,7 +1650,7 @@ Upgrade apps/client/src/app/pages/user-account/user-account-page.html - 40 + 39 @@ -1662,7 +1662,7 @@ apps/client/src/app/pages/user-account/user-account-page.html - 57 + 56 @@ -1670,7 +1670,7 @@ Premium ausprobieren apps/client/src/app/pages/user-account/user-account-page.html - 65 + 64 @@ -1746,7 +1746,7 @@ Zugangsberechtigung apps/client/src/app/pages/user-account/user-account-page.html - 290 + 291 @@ -1796,18 +1796,6 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 171 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 15 - - - - Securities - Wertschriften - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 16 - Currency @@ -1822,7 +1810,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 22 + 13 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1842,11 +1830,11 @@ apps/client/src/app/components/accounts-table/accounts-table.component.html - 112 + 110 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 32 + 23 @@ -1862,7 +1850,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 45 + 36 @@ -1870,7 +1858,7 @@ Konto ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 77 + 68 @@ -2174,7 +2162,7 @@ Verkauf libs/ui/src/lib/i18n.ts - 35 + 34 @@ -2246,7 +2234,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 56 + 47 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2830,7 +2818,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 3 + 15 apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -2877,14 +2865,6 @@ 18 - - Account Type - Kontotyp - - apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 48 - - Excluded from Analysis Von der Analyse ausgenommen @@ -2978,7 +2958,7 @@ Symbol libs/ui/src/lib/i18n.ts - 25 + 24 @@ -2986,7 +2966,7 @@ Tag libs/ui/src/lib/i18n.ts - 26 + 25 @@ -2994,7 +2974,7 @@ Bargeld libs/ui/src/lib/i18n.ts - 38 + 37 @@ -3002,7 +2982,7 @@ Rohstoff libs/ui/src/lib/i18n.ts - 39 + 38 @@ -3010,7 +2990,7 @@ Beteiligungskapital libs/ui/src/lib/i18n.ts - 40 + 39 @@ -3018,7 +2998,7 @@ Feste Einkünfte libs/ui/src/lib/i18n.ts - 41 + 40 @@ -3026,7 +3006,7 @@ Immobilien libs/ui/src/lib/i18n.ts - 42 + 41 @@ -3034,7 +3014,7 @@ Anleihe libs/ui/src/lib/i18n.ts - 45 + 44 @@ -3042,7 +3022,7 @@ Kryptowährung libs/ui/src/lib/i18n.ts - 46 + 45 @@ -3050,7 +3030,7 @@ ETF libs/ui/src/lib/i18n.ts - 47 + 46 @@ -3058,7 +3038,7 @@ Investmentfonds libs/ui/src/lib/i18n.ts - 48 + 47 @@ -3066,7 +3046,7 @@ Edelmetall libs/ui/src/lib/i18n.ts - 49 + 48 @@ -3074,7 +3054,7 @@ Privates Beteiligungskapital libs/ui/src/lib/i18n.ts - 50 + 49 @@ -3082,7 +3062,7 @@ Aktie libs/ui/src/lib/i18n.ts - 51 + 50 @@ -3122,7 +3102,7 @@ Nordamerika libs/ui/src/lib/i18n.ts - 57 + 56 @@ -3130,7 +3110,7 @@ Afrika libs/ui/src/lib/i18n.ts - 54 + 53 @@ -3138,7 +3118,7 @@ Asien libs/ui/src/lib/i18n.ts - 55 + 54 @@ -3146,7 +3126,7 @@ Europa libs/ui/src/lib/i18n.ts - 56 + 55 @@ -3154,7 +3134,7 @@ Ozeanien libs/ui/src/lib/i18n.ts - 58 + 57 @@ -3162,15 +3142,7 @@ Südamerika libs/ui/src/lib/i18n.ts - 59 - - - - Choose File - Datei auswählen - - apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 79 + 58 @@ -3178,7 +3150,7 @@ Folgende Dateiformate werden unterstützt: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 83 + 91 @@ -3186,11 +3158,11 @@ Zurück apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 132 + 141 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 169 + 178 @@ -3266,7 +3238,7 @@ libs/ui/src/lib/i18n.ts - 32 + 31 @@ -3290,7 +3262,7 @@ Daten validieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 224 @@ -3298,19 +3270,11 @@ Importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 141 + 150 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 177 - - - - Securities - Wertschriften - - libs/ui/src/lib/i18n.ts - 24 + 186 @@ -3398,7 +3362,7 @@ Gültig bis apps/client/src/app/pages/user-account/user-account-page.html - 27 + 24 @@ -3846,7 +3810,7 @@ Erneuern apps/client/src/app/pages/user-account/user-account-page.html - 45 + 44 @@ -4054,7 +4018,7 @@ Dividenden auswählen apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 105 + 114 @@ -4062,7 +4026,7 @@ Aktivitäten auswählen apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 108 + 117 @@ -4134,7 +4098,7 @@ Jahre libs/ui/src/lib/i18n.ts - 28 + 27 @@ -4150,7 +4114,7 @@ Jahr libs/ui/src/lib/i18n.ts - 27 + 26 @@ -4306,7 +4270,7 @@ Verbindlichkeit libs/ui/src/lib/i18n.ts - 34 + 33 @@ -7042,7 +7006,7 @@ Kauf libs/ui/src/lib/i18n.ts - 31 + 30 @@ -7050,7 +7014,7 @@ Wertsache libs/ui/src/lib/i18n.ts - 33 + 32 @@ -7718,7 +7682,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 32 + 34 apps/client/src/app/pages/resources/personal-finance-tools/products/altoo-page.component.ts @@ -8150,7 +8114,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 33 + 35 @@ -9473,6 +9437,22 @@ 7 + + Add Access + Zugang hinzufügen + + apps/client/src/app/components/access-table/access-table.component.html + 8,10 + + + + Choose or drop a file here + Wählen Sie eine Datei aus oder ziehen Sie sie hierhin + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 85 + + diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 9d2ee22cd..b35de1a5a 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -27,7 +27,7 @@ Beneficiario apps/client/src/app/components/access-table/access-table.component.html - 10 + 22 @@ -35,16 +35,12 @@ Tipo apps/client/src/app/components/access-table/access-table.component.html - 17 + 29 apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 13 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 @@ -63,7 +59,7 @@ Detalles apps/client/src/app/components/access-table/access-table.component.html - 27 + 39 @@ -71,7 +67,7 @@ Revoca apps/client/src/app/components/access-table/access-table.component.html - 54 + 66 @@ -79,12 +75,16 @@ ¿Quieres revocar el acceso concedido? apps/client/src/app/components/access-table/access-table.component.ts - 49 + 50 Activities Operaciones + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 48 + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 58 @@ -159,11 +159,11 @@ Valor apps/client/src/app/components/accounts-table/accounts-table.component.html - 147 + 145 apps/client/src/app/components/accounts-table/accounts-table.component.html - 182 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -199,7 +199,7 @@ Edita apps/client/src/app/components/accounts-table/accounts-table.component.html - 248 + 246 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -215,7 +215,7 @@ Elimina apps/client/src/app/components/accounts-table/accounts-table.component.html - 256 + 254 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -407,7 +407,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 88 + 79 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -443,7 +443,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 86 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1059,7 +1059,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 98 apps/client/src/app/pages/register/register-page.html @@ -1531,7 +1531,7 @@ apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.html - 267 + 273 apps/client/src/app/pages/blog/blog-page.html @@ -1643,7 +1643,7 @@ Suscripción apps/client/src/app/pages/user-account/user-account-page.html - 15 + 12 @@ -1651,7 +1651,7 @@ Mejorar apps/client/src/app/pages/user-account/user-account-page.html - 40 + 39 @@ -1663,7 +1663,7 @@ apps/client/src/app/pages/user-account/user-account-page.html - 57 + 56 @@ -1671,7 +1671,7 @@ Prueba Premium apps/client/src/app/pages/user-account/user-account-page.html - 65 + 64 @@ -1747,7 +1747,7 @@ Acceso concedido apps/client/src/app/pages/user-account/user-account-page.html - 290 + 291 @@ -1797,18 +1797,6 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 171 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 15 - - - - Securities - Valores - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 16 - Currency @@ -1823,7 +1811,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 22 + 13 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1843,11 +1831,11 @@ apps/client/src/app/components/accounts-table/accounts-table.component.html - 112 + 110 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 32 + 23 @@ -1863,7 +1851,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 45 + 36 @@ -1871,7 +1859,7 @@ ID cuenta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 77 + 68 @@ -2175,7 +2163,7 @@ Venta libs/ui/src/lib/i18n.ts - 35 + 34 @@ -2247,7 +2235,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 56 + 47 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2839,7 +2827,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 3 + 15 apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -2878,14 +2866,6 @@ 18 - - Account Type - Tipo de cuenta - - apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 48 - - Excluded from Analysis Excluido del análisis @@ -2979,7 +2959,7 @@ Símbolo libs/ui/src/lib/i18n.ts - 25 + 24 @@ -2987,7 +2967,7 @@ Etiqueta libs/ui/src/lib/i18n.ts - 26 + 25 @@ -2995,7 +2975,7 @@ Efectivo libs/ui/src/lib/i18n.ts - 38 + 37 @@ -3003,7 +2983,7 @@ Bien libs/ui/src/lib/i18n.ts - 39 + 38 @@ -3011,7 +2991,7 @@ Capital libs/ui/src/lib/i18n.ts - 40 + 39 @@ -3019,7 +2999,7 @@ Renta fija libs/ui/src/lib/i18n.ts - 41 + 40 @@ -3027,7 +3007,7 @@ Propiedad inmobiliaria libs/ui/src/lib/i18n.ts - 42 + 41 @@ -3035,7 +3015,7 @@ Bono libs/ui/src/lib/i18n.ts - 45 + 44 @@ -3043,7 +3023,7 @@ Criptomoneda libs/ui/src/lib/i18n.ts - 46 + 45 @@ -3051,7 +3031,7 @@ ETF libs/ui/src/lib/i18n.ts - 47 + 46 @@ -3059,7 +3039,7 @@ Fondo de inversión libs/ui/src/lib/i18n.ts - 48 + 47 @@ -3067,7 +3047,7 @@ Metal precioso libs/ui/src/lib/i18n.ts - 49 + 48 @@ -3075,7 +3055,7 @@ Capital riesgo libs/ui/src/lib/i18n.ts - 50 + 49 @@ -3083,7 +3063,7 @@ Acción libs/ui/src/lib/i18n.ts - 51 + 50 @@ -3123,7 +3103,7 @@ América del Norte libs/ui/src/lib/i18n.ts - 57 + 56 @@ -3131,7 +3111,7 @@ África libs/ui/src/lib/i18n.ts - 54 + 53 @@ -3139,7 +3119,7 @@ Asia libs/ui/src/lib/i18n.ts - 55 + 54 @@ -3147,7 +3127,7 @@ Europa libs/ui/src/lib/i18n.ts - 56 + 55 @@ -3155,7 +3135,7 @@ Oceanía libs/ui/src/lib/i18n.ts - 58 + 57 @@ -3163,15 +3143,7 @@ América del Sur libs/ui/src/lib/i18n.ts - 59 - - - - Choose File - Elegir archivo - - apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 79 + 58 @@ -3179,7 +3151,7 @@ Los siguientes formatos de archivo están soportados: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 83 + 91 @@ -3187,11 +3159,11 @@ Volver apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 132 + 141 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 169 + 178 @@ -3259,7 +3231,7 @@ libs/ui/src/lib/i18n.ts - 32 + 31 @@ -3291,7 +3263,7 @@ Validating data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 224 @@ -3299,19 +3271,11 @@ Import apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 141 + 150 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 177 - - - - Securities - Securities - - libs/ui/src/lib/i18n.ts - 24 + 186 @@ -3399,7 +3363,7 @@ Valid until apps/client/src/app/pages/user-account/user-account-page.html - 27 + 24 @@ -3847,7 +3811,7 @@ Renew apps/client/src/app/pages/user-account/user-account-page.html - 45 + 44 @@ -4055,7 +4019,7 @@ Select Dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 105 + 114 @@ -4063,7 +4027,7 @@ Select Activities apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 108 + 117 @@ -4135,7 +4099,7 @@ Years libs/ui/src/lib/i18n.ts - 28 + 27 @@ -4151,7 +4115,7 @@ Year libs/ui/src/lib/i18n.ts - 27 + 26 @@ -4307,7 +4271,7 @@ Liability libs/ui/src/lib/i18n.ts - 34 + 33 @@ -7043,7 +7007,7 @@ Buy libs/ui/src/lib/i18n.ts - 31 + 30 @@ -7051,7 +7015,7 @@ Valuable libs/ui/src/lib/i18n.ts - 33 + 32 @@ -7719,7 +7683,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 32 + 34 apps/client/src/app/pages/resources/personal-finance-tools/products/altoo-page.component.ts @@ -8151,7 +8115,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 33 + 35 @@ -9474,6 +9438,22 @@ 7 + + Add Access + Add Access + + apps/client/src/app/components/access-table/access-table.component.html + 8,10 + + + + Choose or drop a file here + Choose or drop a file here + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 85 + + diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 30bfd4a40..34102cf93 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -14,7 +14,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 3 + 15 apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -26,7 +26,7 @@ Bénéficiaire apps/client/src/app/components/access-table/access-table.component.html - 10 + 22 @@ -34,16 +34,12 @@ Type apps/client/src/app/components/access-table/access-table.component.html - 17 + 29 apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 13 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 @@ -62,7 +58,7 @@ Détails apps/client/src/app/components/access-table/access-table.component.html - 27 + 39 @@ -70,7 +66,7 @@ Révoquer apps/client/src/app/components/access-table/access-table.component.html - 54 + 66 @@ -78,15 +74,7 @@ Voulez-vous vraiment révoquer cet accès ? apps/client/src/app/components/access-table/access-table.component.ts - 49 - - - - Account Type - Type de Compte - - apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 48 + 50 @@ -102,12 +90,16 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 45 + 36 Activities Activités + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 48 + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 58 @@ -190,7 +182,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 22 + 13 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -210,11 +202,11 @@ apps/client/src/app/components/accounts-table/accounts-table.component.html - 112 + 110 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 32 + 23 @@ -222,11 +214,11 @@ Valeur apps/client/src/app/components/accounts-table/accounts-table.component.html - 147 + 145 apps/client/src/app/components/accounts-table/accounts-table.component.html - 182 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -262,7 +254,7 @@ Modifier apps/client/src/app/components/accounts-table/accounts-table.component.html - 248 + 246 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -278,7 +270,7 @@ Supprimer apps/client/src/app/components/accounts-table/accounts-table.component.html - 256 + 254 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -470,7 +462,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 88 + 79 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -506,7 +498,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 86 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -722,7 +714,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 56 + 47 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1414,7 +1406,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 98 apps/client/src/app/pages/register/register-page.html @@ -1926,7 +1918,7 @@ Adhésion apps/client/src/app/pages/user-account/user-account-page.html - 15 + 12 @@ -1934,7 +1926,7 @@ Mettre à niveau apps/client/src/app/pages/user-account/user-account-page.html - 40 + 39 @@ -1946,7 +1938,7 @@ apps/client/src/app/pages/user-account/user-account-page.html - 57 + 56 @@ -1954,7 +1946,7 @@ Essayer Premium apps/client/src/app/pages/user-account/user-account-page.html - 65 + 64 @@ -2110,7 +2102,7 @@ Accès donné apps/client/src/app/pages/user-account/user-account-page.html - 290 + 291 @@ -2160,25 +2152,13 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 171 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 15 - - - - Securities - Titres - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 16 - Account ID ID du compte apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 77 + 68 @@ -2302,7 +2282,7 @@ apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.html - 267 + 273 apps/client/src/app/pages/blog/blog-page.html @@ -2422,7 +2402,7 @@ Vente libs/ui/src/lib/i18n.ts - 35 + 34 @@ -2490,15 +2470,7 @@ Validation des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 - - - - Choose File - Choisir Fichier - - apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 79 + 224 @@ -2506,7 +2478,7 @@ Les formats de fichier suivants sont supportés : apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 83 + 91 @@ -2514,11 +2486,11 @@ Retour apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 132 + 141 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 169 + 178 @@ -2526,11 +2498,11 @@ Importer apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 141 + 150 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 177 + 186 @@ -2702,7 +2674,7 @@ libs/ui/src/lib/i18n.ts - 32 + 31 @@ -3173,20 +3145,12 @@ 384 - - Securities - Titres - - libs/ui/src/lib/i18n.ts - 24 - - Symbol Symbole libs/ui/src/lib/i18n.ts - 25 + 24 @@ -3194,7 +3158,7 @@ Étiquette libs/ui/src/lib/i18n.ts - 26 + 25 @@ -3202,7 +3166,7 @@ Cash libs/ui/src/lib/i18n.ts - 38 + 37 @@ -3210,7 +3174,7 @@ Marchandise libs/ui/src/lib/i18n.ts - 39 + 38 @@ -3218,7 +3182,7 @@ Capital libs/ui/src/lib/i18n.ts - 40 + 39 @@ -3226,7 +3190,7 @@ Revenu Fixe libs/ui/src/lib/i18n.ts - 41 + 40 @@ -3234,7 +3198,7 @@ Immobilier libs/ui/src/lib/i18n.ts - 42 + 41 @@ -3242,7 +3206,7 @@ Obligation libs/ui/src/lib/i18n.ts - 45 + 44 @@ -3250,7 +3214,7 @@ Cryptomonnaie libs/ui/src/lib/i18n.ts - 46 + 45 @@ -3258,7 +3222,7 @@ ETF libs/ui/src/lib/i18n.ts - 47 + 46 @@ -3266,7 +3230,7 @@ SICAV libs/ui/src/lib/i18n.ts - 48 + 47 @@ -3274,7 +3238,7 @@ Métal Précieux libs/ui/src/lib/i18n.ts - 49 + 48 @@ -3282,7 +3246,7 @@ Capital Propre libs/ui/src/lib/i18n.ts - 50 + 49 @@ -3290,7 +3254,7 @@ Action libs/ui/src/lib/i18n.ts - 51 + 50 @@ -3298,7 +3262,7 @@ Afrique libs/ui/src/lib/i18n.ts - 54 + 53 @@ -3306,7 +3270,7 @@ Asie libs/ui/src/lib/i18n.ts - 55 + 54 @@ -3314,7 +3278,7 @@ Europe libs/ui/src/lib/i18n.ts - 56 + 55 @@ -3322,7 +3286,7 @@ Amérique du Nord libs/ui/src/lib/i18n.ts - 57 + 56 @@ -3330,7 +3294,7 @@ Océanie libs/ui/src/lib/i18n.ts - 58 + 57 @@ -3338,7 +3302,7 @@ Amérique du Sud libs/ui/src/lib/i18n.ts - 59 + 58 @@ -3398,7 +3362,7 @@ Valide jusqu'au apps/client/src/app/pages/user-account/user-account-page.html - 27 + 24 @@ -3846,7 +3810,7 @@ Renouveler apps/client/src/app/pages/user-account/user-account-page.html - 45 + 44 @@ -4054,7 +4018,7 @@ Selectionner les Dividendes apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 105 + 114 @@ -4062,7 +4026,7 @@ Selectionner les Activités apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 108 + 117 @@ -4134,7 +4098,7 @@ Années libs/ui/src/lib/i18n.ts - 28 + 27 @@ -4150,7 +4114,7 @@ Année libs/ui/src/lib/i18n.ts - 27 + 26 @@ -4306,7 +4270,7 @@ Dette libs/ui/src/lib/i18n.ts - 34 + 33 @@ -7042,7 +7006,7 @@ Buy libs/ui/src/lib/i18n.ts - 31 + 30 @@ -7050,7 +7014,7 @@ Valuable libs/ui/src/lib/i18n.ts - 33 + 32 @@ -7718,7 +7682,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 32 + 34 apps/client/src/app/pages/resources/personal-finance-tools/products/altoo-page.component.ts @@ -8150,7 +8114,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 33 + 35 @@ -9473,6 +9437,22 @@ 7 + + Add Access + Add Access + + apps/client/src/app/components/access-table/access-table.component.html + 8,10 + + + + Choose or drop a file here + Choose or drop a file here + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 85 + + diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 185267a26..6d967cfad 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -16,7 +16,7 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. - Il rischio di perdita nel trading può essere notevole. Non è consigliabile investire denaro di cui potresti avere bisogno a breve termine. + Il rischio di perdita nel trading può essere notevole. Non è consigliabile investire denaro di cui potresti avere bisogno a breve termine. apps/client/src/app/app.component.html 168,169 @@ -27,7 +27,7 @@ Beneficiario apps/client/src/app/components/access-table/access-table.component.html - 10 + 22 @@ -35,16 +35,12 @@ Tipo apps/client/src/app/components/access-table/access-table.component.html - 17 + 29 apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 13 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 @@ -63,7 +59,7 @@ Dettagli apps/client/src/app/components/access-table/access-table.component.html - 27 + 39 @@ -71,7 +67,7 @@ Revoca apps/client/src/app/components/access-table/access-table.component.html - 54 + 66 @@ -79,12 +75,16 @@ Vuoi davvero revocare l'accesso concesso? apps/client/src/app/components/access-table/access-table.component.ts - 49 + 50 Activities Attività + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 48 + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 58 @@ -159,11 +159,11 @@ Valore apps/client/src/app/components/accounts-table/accounts-table.component.html - 147 + 145 apps/client/src/app/components/accounts-table/accounts-table.component.html - 182 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -199,7 +199,7 @@ Modifica apps/client/src/app/components/accounts-table/accounts-table.component.html - 248 + 246 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -215,7 +215,7 @@ Elimina apps/client/src/app/components/accounts-table/accounts-table.component.html - 256 + 254 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -312,7 +312,7 @@ Asset Profile - Profilo degli asset + Profilo dell'asset apps/client/src/app/components/admin-jobs/admin-jobs.html 55 @@ -407,7 +407,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 88 + 79 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -443,7 +443,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 86 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -680,7 +680,7 @@ Last Request - Ultima richiesta + Ultima richiesta apps/client/src/app/components/admin-users/admin-users.html 35,37 @@ -976,7 +976,7 @@ Get Started - Iniziare + Inizia apps/client/src/app/pages/features/features-page.html 298 @@ -1059,7 +1059,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 98 apps/client/src/app/pages/register/register-page.html @@ -1236,7 +1236,7 @@ Annualized Performance - Prestazioni annualizzate + Prestazioni annualizzate apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 256,258 @@ -1531,7 +1531,7 @@ apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.html - 267 + 273 apps/client/src/app/pages/blog/blog-page.html @@ -1643,7 +1643,7 @@ Iscrizione apps/client/src/app/pages/user-account/user-account-page.html - 15 + 12 @@ -1651,7 +1651,7 @@ Aggiornamento apps/client/src/app/pages/user-account/user-account-page.html - 40 + 39 @@ -1663,7 +1663,7 @@ apps/client/src/app/pages/user-account/user-account-page.html - 57 + 56 @@ -1671,7 +1671,7 @@ Prova Premium apps/client/src/app/pages/user-account/user-account-page.html - 65 + 64 @@ -1747,7 +1747,7 @@ Accesso concesso apps/client/src/app/pages/user-account/user-account-page.html - 290 + 291 @@ -1797,18 +1797,6 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 171 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 15 - - - - Securities - Titoli - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 16 - Currency @@ -1823,7 +1811,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 22 + 13 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1843,11 +1831,11 @@ apps/client/src/app/components/accounts-table/accounts-table.component.html - 112 + 110 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 32 + 23 @@ -1863,7 +1851,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 45 + 36 @@ -1871,7 +1859,7 @@ ID account apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 77 + 68 @@ -1892,7 +1880,7 @@ As you are already logged in, you cannot access the demo account. - Poiché hai già effettuato l’accesso, non puoi accedere all'account demo. + Poiché hai già effettuato l'accesso, non puoi accedere all'account demo. apps/client/src/app/pages/demo/demo-page.component.ts 31 @@ -1900,7 +1888,7 @@ Frequently Asked Questions (FAQ) - Domande più frequenti (FAQ) + Domande più frequenti (FAQ) apps/client/src/app/pages/faq/faq-page-routing.module.ts 12 @@ -1988,7 +1976,7 @@ By Asset Class - Per asset class + Per classe asset apps/client/src/app/pages/portfolio/allocations/allocations-page.html 84 @@ -2175,7 +2163,7 @@ Vendi libs/ui/src/lib/i18n.ts - 35 + 34 @@ -2247,7 +2235,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 56 + 47 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2256,7 +2244,7 @@ Asset Class - Asset class + Classe asset apps/client/src/app/components/admin-market-data/admin-market-data.html 42 @@ -2436,7 +2424,7 @@ Import Activities - Importa le attività + Importa le attività apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts 40 @@ -2604,7 +2592,7 @@ Asset Sub Class - Sub-asset class + Sottoclasse asset apps/client/src/app/components/admin-market-data/admin-market-data.html 51 @@ -2839,7 +2827,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 3 + 15 apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -2886,17 +2874,9 @@ 209 - - Account Type - Tipo di account - - apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 48 - - Auto - Auto + Auto apps/client/src/app/pages/user-account/user-account-page.component.ts 47 @@ -2904,7 +2884,7 @@ Appearance - Appearance + Aspetto apps/client/src/app/pages/user-account/user-account-page.html 197 @@ -2912,7 +2892,7 @@ Auto - Auto + Auto apps/client/src/app/pages/user-account/user-account-page.html 212 @@ -2920,7 +2900,7 @@ Light - Light + Chiaro apps/client/src/app/pages/user-account/user-account-page.html 213 @@ -2928,7 +2908,7 @@ Dark - Dark + Scuro apps/client/src/app/pages/user-account/user-account-page.html 214 @@ -2936,7 +2916,7 @@ Total Amount - Total Amount + Importo totale apps/client/src/app/components/investment-chart/investment-chart.component.ts 182 @@ -2944,7 +2924,7 @@ Portfolio Evolution - Portfolio Evolution + Evoluzione del portafoglio apps/client/src/app/pages/portfolio/analysis/analysis-page.html 136 @@ -2960,7 +2940,7 @@ Account - Account + Account libs/ui/src/lib/i18n.ts 4 @@ -2968,7 +2948,7 @@ Asset Class - Asset Class + Classe asset libs/ui/src/lib/i18n.ts 6 @@ -2976,119 +2956,119 @@ Symbol - Symbol + Simbolo libs/ui/src/lib/i18n.ts - 25 + 24 Tag - Tag + Etichetta libs/ui/src/lib/i18n.ts - 26 + 25 Cash - Cash + Contanti libs/ui/src/lib/i18n.ts - 38 + 37 Commodity - Commodity + Materia prima libs/ui/src/lib/i18n.ts - 39 + 38 Equity - Equity + Azione ordinaria libs/ui/src/lib/i18n.ts - 40 + 39 Fixed Income - Fixed Income + Reddito fisso libs/ui/src/lib/i18n.ts - 41 + 40 Real Estate - Real Estate + Immobiliare libs/ui/src/lib/i18n.ts - 42 + 41 Bond - Bond + Obbligazioni libs/ui/src/lib/i18n.ts - 45 + 44 Cryptocurrency - Cryptocurrency + Criptovaluta libs/ui/src/lib/i18n.ts - 46 + 45 ETF - ETF + ETF libs/ui/src/lib/i18n.ts - 47 + 46 Mutual Fund - Mutual Fund + Fondo comune di investimento libs/ui/src/lib/i18n.ts - 48 + 47 Precious Metal - Precious Metal + Metalli preziosi libs/ui/src/lib/i18n.ts - 49 + 48 Private Equity - Private Equity + Azione ordinaria privata libs/ui/src/lib/i18n.ts - 50 + 49 Stock - Stock + Azione libs/ui/src/lib/i18n.ts - 51 + 50 Emergency Fund - Emergency Fund + Fondo di emergenza libs/ui/src/lib/i18n.ts 12 @@ -3096,7 +3076,7 @@ Other - Other + Altro libs/ui/src/lib/i18n.ts 20 @@ -3108,7 +3088,7 @@ No data available - No data available + Nessun dato disponibile libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts 386 @@ -3120,83 +3100,75 @@ North America - North America + Nord America libs/ui/src/lib/i18n.ts - 57 + 56 Africa - Africa + Africa libs/ui/src/lib/i18n.ts - 54 + 53 Asia - Asia + Asia libs/ui/src/lib/i18n.ts - 55 + 54 Europe - Europe + Europa libs/ui/src/lib/i18n.ts - 56 + 55 Oceania - Oceania + Oceania libs/ui/src/lib/i18n.ts - 58 + 57 South America - South America + Sud America libs/ui/src/lib/i18n.ts - 59 - - - - Choose File - Choose File - - apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 79 + 58 The following file formats are supported: - The following file formats are supported: + Sono supportati i seguenti formati di file: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 83 + 91 Back - Back + Indietro apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 132 + 141 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 169 + 178 Community - Community + Comunità apps/client/src/app/app.component.html 103 @@ -3228,7 +3200,7 @@ Activities Count - Activities Count + Conteggio attività apps/client/src/app/components/admin-market-data/admin-market-data.html 69 @@ -3236,7 +3208,7 @@ Refresh - Refresh + Aggiorna apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 22 @@ -3244,7 +3216,7 @@ Symbol Mapping - Symbol Mapping + Mappatura dei simboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 156 @@ -3252,19 +3224,19 @@ Dividend - Dividend + Dividendi apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 44 libs/ui/src/lib/i18n.ts - 32 + 31 Dividend Timeline - Dividend Timeline + Cronologia dei dividendi apps/client/src/app/pages/portfolio/analysis/analysis-page.html 223 @@ -3272,7 +3244,7 @@ Asset Sub Class - Sub-asset class + Sottoclasse asset libs/ui/src/lib/i18n.ts 7 @@ -3280,7 +3252,7 @@ User Signup - User Signup + Registrazione utente apps/client/src/app/components/admin-overview/admin-overview.html 89 @@ -3288,35 +3260,27 @@ Validating data... - Validating data... + Convalida dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 224 Import - Import + Importa apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 141 + 150 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 177 - - - - Securities - Securities - - libs/ui/src/lib/i18n.ts - 24 + 186 Jobs - Jobs + Lavori apps/client/src/app/pages/admin/admin-page-routing.module.ts 21 @@ -3328,7 +3292,7 @@ Market Data - Market Data + Dati del mercato apps/client/src/app/pages/admin/admin-page-routing.module.ts 25 @@ -3340,7 +3304,7 @@ Users - Users + Utenti apps/client/src/app/pages/admin/admin-page-routing.module.ts 35 @@ -3352,7 +3316,7 @@ Summary - Summary + Summario apps/client/src/app/pages/home/home-page-routing.module.ts 27 @@ -3364,7 +3328,7 @@ Holding - Holding + Partecipazione apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 33 @@ -3372,7 +3336,7 @@ Load Dividends - Load Dividends + Carica i dividendi apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 65 @@ -3380,7 +3344,7 @@ Yearly - Yearly + Annuale apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 56 @@ -3388,7 +3352,7 @@ Import Dividends - Import Dividends + Importa i dividendi apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts 79 @@ -3396,15 +3360,15 @@ Valid until - Valid until + Valido fino a apps/client/src/app/pages/user-account/user-account-page.html - 27 + 24 Core - Core + Nucleo libs/ui/src/lib/i18n.ts 8 @@ -3412,7 +3376,7 @@ Grant - Grant + Sovvenzione libs/ui/src/lib/i18n.ts 13 @@ -3420,7 +3384,7 @@ Higher Risk - Higher Risk + Rischio più elevato libs/ui/src/lib/i18n.ts 14 @@ -3428,7 +3392,7 @@ Lower Risk - Lower Risk + Rischio inferiore libs/ui/src/lib/i18n.ts 17 @@ -3436,7 +3400,7 @@ Retirement Provision - Retirement Provision + Fondo pensione libs/ui/src/lib/i18n.ts 22 @@ -3444,7 +3408,7 @@ Satellite - Satellite + Satellite libs/ui/src/lib/i18n.ts 23 @@ -3452,7 +3416,7 @@ Protection for sensitive information like absolute performances and quantity values - Protection for sensitive information like absolute performances and quantity values + Protezione delle informazioni sensibili come le prestazioni assolute e i valori quantitativi apps/client/src/app/pages/user-account/user-account-page.html 85,88 @@ -3460,7 +3424,7 @@ Distraction-free experience for turbulent times - Distraction-free experience for turbulent times + Esperienza priva di distrazioni per i periodi più turbolenti apps/client/src/app/pages/user-account/user-account-page.html 224,226 @@ -3468,7 +3432,7 @@ Sneak peek at upcoming functionality - Sneak peek at upcoming functionality + Un'anteprima delle funzionalità in arrivo apps/client/src/app/pages/user-account/user-account-page.html 259,261 @@ -3476,7 +3440,7 @@ Are you an ambitious investor who needs the full picture? - Are you an ambitious investor who needs the full picture? + Sei un investitore ambizioso che ha bisogno di un quadro completo? apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 15,17 @@ -3484,7 +3448,7 @@ Portfolio Summary - Portfolio Summary + Riepilogo del portafoglio apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 25 @@ -3500,7 +3464,7 @@ Performance Benchmarks - Performance Benchmarks + Benchmark delle prestazioni apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 33 @@ -3516,7 +3480,7 @@ FIRE Calculator - FIRE Calculator + Calcolatore FIRE apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 37 @@ -3532,7 +3496,7 @@ and more Features... - and more Features... + e altre funzionalità... apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 45 @@ -3548,7 +3512,7 @@ Skip - Skip + Salta apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 55 @@ -3556,7 +3520,7 @@ Upgrade Plan - Upgrade Plan + Aggiorna il piano apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 62 @@ -3568,7 +3532,7 @@ For tech-savvy investors who prefer to run Ghostfolio on their own infrastructure. - For tech-savvy investors who prefer to run Ghostfolio on their own infrastructure. + Per gli investitori esperti di tecnologia che preferiscono gestire Ghostfolio sulla propria infrastruttura. apps/client/src/app/pages/pricing/pricing-page.html 36,39 @@ -3576,7 +3540,7 @@ Unlimited Transactions - Unlimited Transactions + Transazioni illimitate apps/client/src/app/pages/pricing/pricing-page.html 46 @@ -3592,7 +3556,7 @@ Unlimited Accounts - Unlimited Accounts + Account illimitati apps/client/src/app/pages/pricing/pricing-page.html 53 @@ -3608,7 +3572,7 @@ Portfolio Performance - Portfolio Performance + Prestazioni del portafoglio apps/client/src/app/pages/pricing/pricing-page.html 60 @@ -3624,7 +3588,7 @@ Self-hosted, update manually. - Self-hosted, update manually. + Self-hosted, aggiornamento manuale. apps/client/src/app/pages/pricing/pricing-page.html 122 @@ -3632,7 +3596,7 @@ Free - Free + Free apps/client/src/app/pages/pricing/pricing-page.html 123 @@ -3644,7 +3608,7 @@ For new investors who are just getting started with trading. - For new investors who are just getting started with trading. + Per i nuovi investitori che hanno appena iniziato a fare trading. apps/client/src/app/pages/pricing/pricing-page.html 150,152 @@ -3652,7 +3616,7 @@ Fully managed Ghostfolio cloud offering. - Fully managed Ghostfolio cloud offering. + Offerta cloud Ghostfolio completamente gestita. apps/client/src/app/pages/pricing/pricing-page.html 191 @@ -3664,7 +3628,7 @@ For ambitious investors who need the full picture of their financial assets. - For ambitious investors who need the full picture of their financial assets. + Per gli investitori ambiziosi che hanno bisogno di un quadro completo dei propri asset finanziari. apps/client/src/app/pages/pricing/pricing-page.html 225,228 @@ -3672,7 +3636,7 @@ One-time payment, no auto-renewal. - One-time payment, no auto-renewal. + Pagamento una tantum, senza rinnovo automatico. apps/client/src/app/pages/pricing/pricing-page.html 352 @@ -3680,7 +3644,7 @@ Get Started - Get Started + Inizia apps/client/src/app/pages/pricing/pricing-page.html 363,365 @@ -3688,7 +3652,7 @@ It’s free. - It’s free. + È gratuito. apps/client/src/app/pages/pricing/pricing-page.html 366 @@ -3696,7 +3660,7 @@ Fees - Fees + Commissioni apps/client/src/app/components/position/position-detail-dialog/position-detail-dialog.html 148 @@ -3704,7 +3668,7 @@ Portfolio Allocations - Portfolio Allocations + Allocazioni del portafoglio apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 29 @@ -3724,7 +3688,7 @@ Savings Rate per Month - Savings Rate per Month + Tasso di risparmio al mese libs/ui/src/lib/fire-calculator/fire-calculator.component.html 10 @@ -3732,7 +3696,7 @@ Data Import and Export - Data Import and Export + Importazione ed esportazione dei dati apps/client/src/app/pages/pricing/pricing-page.html 95 @@ -3748,7 +3712,7 @@ Switch to Ghostfolio Premium easily - Switch to Ghostfolio Premium easily + Passa facilmente a Ghostfolio Premium libs/ui/src/lib/i18n.ts 10 @@ -3756,7 +3720,7 @@ Community Support - Community Support + Supporto della comunità apps/client/src/app/pages/pricing/pricing-page.html 118 @@ -3764,7 +3728,7 @@ Email and Chat Support - Email and Chat Support + Supporto via email e chat apps/client/src/app/pages/pricing/pricing-page.html 314 @@ -3772,7 +3736,7 @@ Switch to Ghostfolio Premium or Ghostfolio Open Source easily - Switch to Ghostfolio Premium or Ghostfolio Open Source easily + Passa facilmente a Ghostfolio Premium o Ghostfolio Open Source libs/ui/src/lib/i18n.ts 9 @@ -3780,7 +3744,7 @@ Switch to Ghostfolio Open Source or Ghostfolio Basic easily - Switch to Ghostfolio Open Source or Ghostfolio Basic easily + Passa facilmente a Ghostfolio Open Source o a Ghostfolio Basic libs/ui/src/lib/i18n.ts 11 @@ -3788,7 +3752,7 @@ Market data provided by - Market data provided by + Dati del mercato forniti da libs/ui/src/lib/data-provider-credits/data-provider-credits.component.html 2 @@ -3796,7 +3760,7 @@ Oops! Could not get the historical exchange rate from - Oops! Could not get the historical exchange rate from + Ops! Impossibile ottenere il tasso di cambio storico da apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 166 @@ -3808,7 +3772,7 @@ Gather Historical Data - Gather Historical Data + Raccogli dati storici apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 30 @@ -3816,7 +3780,7 @@ Retirement Date - Retirement Date + Data di pensionamento libs/ui/src/lib/fire-calculator/fire-calculator.component.html 32 @@ -3824,7 +3788,7 @@ Professional Data Provider - Professional Data Provider + Fornitore di dati professionale apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 41 @@ -3836,7 +3800,7 @@ Pricing Plans - Pricing Plans + Piani tariffari apps/client/src/app/pages/pricing/pricing-page.html 4 @@ -3844,15 +3808,15 @@ Renew - Renew + Rinnova apps/client/src/app/pages/user-account/user-account-page.html - 45 + 44 Renew Plan - Renew Plan + Rinnova il piano apps/client/src/app/pages/pricing/pricing-page.html 348 @@ -3860,7 +3824,7 @@ Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. The revenue is used to cover the hosting infrastructure and to fund the ongoing development of Ghostfolio. - Our official Ghostfolio Premium cloud offering is the easiest way to get started. Due to the time it saves, this will be the best option for most people. The revenue is used to cover the hosting infrastructure and to fund the ongoing development of Ghostfolio. + La nostra offerta cloud ufficiale Ghostfolio Premium è il modo più semplice per iniziare. Grazie al risparmio di tempo, questa è l'opzione migliore per la maggior parte delle persone. I ricavi vengono utilizzati per coprire l'infrastruttura di hosting e per finanziare lo sviluppo continuo di Ghostfolio. apps/client/src/app/pages/pricing/pricing-page.html 6,11 @@ -3868,7 +3832,7 @@ Impersonate User - Impersonate User + Imita l'utente apps/client/src/app/components/admin-users/admin-users.html 121 @@ -3876,7 +3840,7 @@ Delete User - Delete User + Elimina l'utente apps/client/src/app/components/admin-users/admin-users.html 129 @@ -3884,7 +3848,7 @@ Do you really want to delete all your activities? - Do you really want to delete all your activities? + Vuoi davvero eliminare tutte le tue attività? apps/client/src/app/pages/portfolio/activities/activities-page.component.ts 143 @@ -3892,7 +3856,7 @@ By ETF Provider - By ETF Provider + Per fornitore di ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html 286 @@ -3900,7 +3864,7 @@ Delete all Activities - Delete all Activities + Elimina tutte le attività libs/ui/src/lib/activities-table/activities-table.component.html 62 @@ -3908,7 +3872,7 @@ Update platform - Update platform + Aggiorna la piattaforma apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 2 @@ -3916,7 +3880,7 @@ Add platform - Add platform + Aggiungi la piattaforma apps/client/src/app/components/admin-platform/create-or-update-platform-dialog/create-or-update-platform-dialog.html 3 @@ -3924,7 +3888,7 @@ Url - Url + Url apps/client/src/app/components/admin-platform/admin-platform.component.html 50 @@ -3936,7 +3900,7 @@ Do you really want to delete this platform? - Do you really want to delete this platform? + Vuoi davvero eliminare questa piattaforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts 76 @@ -3944,7 +3908,7 @@ Platforms - Platforms + Piattaforme apps/client/src/app/components/admin-settings/admin-settings.component.html 4 @@ -3952,7 +3916,7 @@ Update Cash Balance - Update Cash Balance + Aggiornamento del saldo di cassa apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 72 @@ -3960,7 +3924,7 @@ By Platform - By Platform + Per piattaforma apps/client/src/app/pages/portfolio/allocations/allocations-page.html 42 @@ -3968,7 +3932,7 @@ Upgrade to Ghostfolio Premium today and gain access to exclusive features to enhance your investment experience: - Upgrade to Ghostfolio Premium today and gain access to exclusive features to enhance your investment experience: + Effettua oggi stesso l'aggiornamento a Ghostfolio Premium e ottieni l'accesso a funzionalità esclusive per migliorare la tua esperienza di investimento: apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 18,21 @@ -3976,7 +3940,7 @@ Get the tools to effectively manage your finances and refine your personal investment strategy. - Get the tools to effectively manage your finances and refine your personal investment strategy. + Ottieni gli strumenti per gestire efficacemente le tue finanze e perfezionare la tua strategia di investimento personale. apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 48,51 @@ -3984,7 +3948,7 @@ Add Platform - Add Platform + Aggiungi la piattaforma apps/client/src/app/components/admin-platform/admin-platform.component.html 11,13 @@ -3992,7 +3956,7 @@ Settings - Settings + Impostazioni apps/client/src/app/pages/admin/admin-page-routing.module.ts 30 @@ -4004,7 +3968,7 @@ Equity - Equity + Azione ordinaria apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 43 @@ -4012,7 +3976,7 @@ This activity already exists. - This activity already exists. + Questa attività esiste già. libs/ui/src/lib/i18n.ts 15 @@ -4020,7 +3984,7 @@ Set as Benchmark - Set as Benchmark + Imposta come benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 45 @@ -4028,7 +3992,7 @@ Manage Benchmarks - Manage Benchmarks + Gestisci i benchmark apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 36 @@ -4036,7 +4000,7 @@ Select Holding - Select Holding + Seleziona la partecipazione apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 20 @@ -4044,7 +4008,7 @@ Select File - Select File + Seleziona il file apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 23 @@ -4052,23 +4016,23 @@ Select Dividends - Select Dividends + Seleziona i dividendi apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 105 + 114 Select Activities - Select Activities + Seleziona le attività apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 108 + 117 Import Activities - Import Activities + Importa le attività libs/ui/src/lib/activities-table/activities-table.component.html 16 @@ -4080,7 +4044,7 @@ Import Dividends - Import Dividends + Importa i dividendi libs/ui/src/lib/activities-table/activities-table.component.html 34 @@ -4092,7 +4056,7 @@ Personal Finance - Personal Finance + Finanza personale apps/client/src/app/app.component.html 53 @@ -4100,7 +4064,7 @@ Frequently Asked Questions (FAQ) - Frequently Asked Questions (FAQ) + Domande più frequenti (FAQ) apps/client/src/app/app.component.html 74 @@ -4108,7 +4072,7 @@ Current Streak - Current Streak + Serie attuale apps/client/src/app/pages/portfolio/analysis/analysis-page.html 187 @@ -4116,7 +4080,7 @@ Longest Streak - Longest Streak + Serie più lunga apps/client/src/app/pages/portfolio/analysis/analysis-page.html 196 @@ -4124,7 +4088,7 @@ Months - Months + Mesi libs/ui/src/lib/i18n.ts 19 @@ -4132,15 +4096,15 @@ Years - Years + Anni libs/ui/src/lib/i18n.ts - 28 + 27 Month - Month + Mese libs/ui/src/lib/i18n.ts 18 @@ -4148,15 +4112,15 @@ Year - Year + Anno libs/ui/src/lib/i18n.ts - 27 + 26 If you retire today, you would be able to withdraw per year or per month, based on your total assets of and a withdrawal rate of 4%. - Se andassi in pensione oggi, potresti ritirare all'anno o al mese, sulla base dei tuoi asset totali pari a e un tasso di prelievo del 4%. + Se andassi in pensione oggi, potresti prelevare all'anno o al mese, sulla base dei tuoi asset totali pari a e un tasso di prelievo del 4%. apps/client/src/app/pages/portfolio/fire/fire-page.html 57,90 @@ -4164,7 +4128,7 @@ Liabilities - Liabilities + Passività apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 224 @@ -4176,7 +4140,7 @@ Changelog - Changelog + Changelog apps/client/src/app/pages/about/about-page.component.ts 55 @@ -4188,7 +4152,7 @@ License - License + Licenza apps/client/src/app/pages/about/about-page.component.ts 60 @@ -4200,7 +4164,7 @@ Stocks - Stocks + Azioni apps/client/src/app/pages/features/features-page.html 15 @@ -4208,7 +4172,7 @@ ETFs - ETFs + ETF apps/client/src/app/pages/features/features-page.html 25 @@ -4216,7 +4180,7 @@ Bonds - Bonds + Obbligazioni apps/client/src/app/pages/features/features-page.html 38 @@ -4224,7 +4188,7 @@ Cryptocurrencies - Cryptocurrencies + Criptovalute apps/client/src/app/pages/features/features-page.html 51 @@ -4232,7 +4196,7 @@ Wealth Items - Wealth Items + Oggetti della ricchezza apps/client/src/app/pages/features/features-page.html 76 @@ -4240,7 +4204,7 @@ Import and Export - Import and Export + Importazione ed esportazione apps/client/src/app/pages/features/features-page.html 115,117 @@ -4248,7 +4212,7 @@ Multi-Accounts - Multi-Accounts + Account multipli apps/client/src/app/pages/features/features-page.html 127 @@ -4256,7 +4220,7 @@ Portfolio Calculations - Portfolio Calculations + Calcoli del portafoglio apps/client/src/app/pages/features/features-page.html 141 @@ -4264,7 +4228,7 @@ Dark Mode - Dark Mode + Modalità scura apps/client/src/app/pages/features/features-page.html 179 @@ -4272,7 +4236,7 @@ Market Mood - Market Mood + Umore del mercato apps/client/src/app/pages/features/features-page.html 209 @@ -4280,7 +4244,7 @@ Static Analysis - Static Analysis + Analisi statica apps/client/src/app/pages/features/features-page.html 227 @@ -4288,7 +4252,7 @@ Multi-Language - Multi-Language + Multilingue apps/client/src/app/pages/features/features-page.html 245 @@ -4296,7 +4260,7 @@ Open Source Software - Open Source Software + Software open source apps/client/src/app/pages/features/features-page.html 278 @@ -4304,15 +4268,15 @@ Liability - Liability + Passività libs/ui/src/lib/i18n.ts - 34 + 33 Scraper Configuration - Scraper Configuration + Configurazione dello scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 167 @@ -4320,7 +4284,7 @@ Add Asset Profile - Add Asset Profile + Aggiungi il profilo dell'asset apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 7 @@ -4328,7 +4292,7 @@ Personal Finance Tools - Personal Finance Tools + Strumenti di finanza personale apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts 13 @@ -4336,7 +4300,7 @@ Discover Open Source Alternatives for Personal Finance Tools - Discover Open Source Alternatives for Personal Finance Tools + Scopri le alternative open source per gli strumenti di finanza personale apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html 4,6 @@ -4344,7 +4308,7 @@ Founded - Founded + Fondato apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 63 @@ -4448,7 +4412,7 @@ Origin - Origin + Origine apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 68 @@ -4552,7 +4516,7 @@ Region - Region + Regione apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 73 @@ -4656,7 +4620,7 @@ Available in - Available in + Disponibile in apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 78,80 @@ -4760,7 +4724,7 @@ ✅ Yes - ✅ Yes + ✅ Si apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 100 @@ -5564,7 +5528,7 @@ ❌ No - ❌ No + ❌ No apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 102 @@ -6268,7 +6232,7 @@ ❌ No - ❌ No + ❌ No apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 109,110 @@ -6372,7 +6336,7 @@ Self-Hosting - Self-Hosting + Self-hosting apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 114,116 @@ -6476,7 +6440,7 @@ Use anonymously - Use anonymously + Usalo in modo anonimo apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 141,143 @@ -6580,7 +6544,7 @@ Free Plan - Free Plan + Piano gratuito apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 160,162 @@ -6684,7 +6648,7 @@ Notes - Notes + Note apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 191 @@ -6788,7 +6752,7 @@ Effortlessly track, analyze, and visualize your wealth with Ghostfolio. - Effortlessly track, analyze, and visualize your wealth with Ghostfolio. + Monitora, analizza e visualizza facilmente la tua ricchezza con Ghostfolio. apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 215,218 @@ -6892,7 +6856,7 @@ Personal Finance Tools - Personal Finance Tools + Strumenti di finanza personale apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 287 @@ -6996,7 +6960,7 @@ Guides - Guides + Guide apps/client/src/app/pages/resources/resources-page.html 5 @@ -7004,7 +6968,7 @@ Glossary - Glossary + Glossario apps/client/src/app/pages/resources/resources-page.html 75 @@ -7012,7 +6976,7 @@ Stocks, ETFs, bonds, cryptocurrencies, commodities - Stocks, ETFs, bonds, cryptocurrencies, commodities + Azioni, ETF, obbligazioni, criptovalute e materie prime apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 22 @@ -7024,7 +6988,7 @@ Mortgages, personal loans, credit cards - Mortgages, personal loans, credit cards + Mutui, prestiti personali, carte di credito apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 32 @@ -7032,7 +6996,7 @@ Luxury items, real estate, private companies - Luxury items, real estate, private companies + Articoli di lusso, immobili, aziende private apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 46 @@ -7040,23 +7004,23 @@ Buy - Buy + Compra libs/ui/src/lib/i18n.ts - 31 + 30 Valuable - Valuable + Prezioso libs/ui/src/lib/i18n.ts - 33 + 32 ETFs without Countries - ETFs without Countries + ETF senza paesi apps/client/src/app/components/admin-market-data/admin-market-data.component.ts 70 @@ -7064,7 +7028,7 @@ ETFs without Sectors - ETFs without Sectors + ETF senza settori apps/client/src/app/components/admin-market-data/admin-market-data.component.ts 75 @@ -7072,7 +7036,7 @@ Assets - Assets + Asset apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 184 @@ -7080,7 +7044,7 @@ Preset - Preset + Preimpostato libs/ui/src/lib/i18n.ts 21 @@ -7088,7 +7052,7 @@ By Market - By Market + Per mercato apps/client/src/app/pages/portfolio/allocations/allocations-page.html 177 @@ -7096,7 +7060,7 @@ Asia-Pacific - Asia-Pacific + Asia e Pacifico libs/ui/src/lib/i18n.ts 5 @@ -7104,7 +7068,7 @@ Japan - Japan + Giappone libs/ui/src/lib/i18n.ts 16 @@ -7112,7 +7076,7 @@ Welcome to Ghostfolio - Welcome to Ghostfolio + Benvenuto su Ghostfolio apps/client/src/app/components/home-overview/home-overview.html 9 @@ -7120,7 +7084,7 @@ Setup your accounts - Setup your accounts + Configura i tuoi account apps/client/src/app/components/home-overview/home-overview.html 17 @@ -7128,7 +7092,7 @@ Get a comprehensive financial overview by adding your bank and brokerage accounts. - Get a comprehensive financial overview by adding your bank and brokerage accounts. + Ottieni una panoramica finanziaria completa aggiungendo i tuoi conti bancari e di trading. apps/client/src/app/components/home-overview/home-overview.html 19,20 @@ -7136,7 +7100,7 @@ Capture your activities - Capture your activities + Cattura le tue attività apps/client/src/app/components/home-overview/home-overview.html 26 @@ -7144,7 +7108,7 @@ Record your investment activities to keep your portfolio up to date. - Record your investment activities to keep your portfolio up to date. + Registra le tue attività di investimento per tenere aggiornato il tuo portafoglio. apps/client/src/app/components/home-overview/home-overview.html 28,29 @@ -7152,7 +7116,7 @@ Monitor and analyze your portfolio - Monitor and analyze your portfolio + Monitora e analizza il tuo portafoglio apps/client/src/app/components/home-overview/home-overview.html 35 @@ -7160,7 +7124,7 @@ Track your progress in real-time with comprehensive analysis and insights. - Track your progress in real-time with comprehensive analysis and insights. + Monitora i tuoi progressi in tempo reale, con analisi e approfondimenti completi. apps/client/src/app/components/home-overview/home-overview.html 37,38 @@ -7168,7 +7132,7 @@ No data available - No data available + Nessun dato disponibile apps/client/src/app/pages/portfolio/allocations/allocations-page.html 254 @@ -7180,7 +7144,7 @@ Ready to take control of your personal finances? - Ready to take control of your personal finances? + Sei pronto a prendere il controllo delle tue finanze personali? apps/client/src/app/components/home-overview/home-overview.html 10 @@ -7188,7 +7152,7 @@ Setup accounts - Setup accounts + Configura gli account apps/client/src/app/components/home-overview/home-overview.html 50 @@ -7196,7 +7160,7 @@ Biometric Authentication - Biometric Authentication + Autenticazione biometrica apps/client/src/app/pages/user-account/user-account-page.html 239 @@ -7204,7 +7168,7 @@ At Ghostfolio, transparency is at the core of our values. We publish the source code as open source software (OSS) under the AGPL-3.0 license and we openly share aggregated key metrics of the platform’s operational status. - At Ghostfolio, transparency is at the core of our values. We publish the source code as open source software (OSS) under the AGPL-3.0 license and we openly share aggregated key metrics of the platform’s operational status. + Per Ghostfolio la trasparenza è al centro dei propri valori. Pubblichiamo il codice sorgente come software open source (OSS) sotto la licenza AGPL-3.0 e condividiamo apertamente le metriche chiave aggregate dello stato operativo della piattaforma. apps/client/src/app/pages/open/open-page.html 6,22 @@ -7212,7 +7176,7 @@ Active Users - Active Users + Utenti attivi apps/client/src/app/pages/open/open-page.html 40 @@ -7224,7 +7188,7 @@ New Users - New Users + Nuovi utenti apps/client/src/app/pages/open/open-page.html 51 @@ -7232,7 +7196,7 @@ Users in Slack community - Users in Slack community + Utenti nella comunità Slack apps/client/src/app/pages/open/open-page.html 75 @@ -7240,7 +7204,7 @@ Contributors on GitHub - Contributors on GitHub + Contributori su GitHub apps/client/src/app/pages/open/open-page.html 89 @@ -7248,7 +7212,7 @@ Stars on GitHub - Stars on GitHub + Stelle su GitHub apps/client/src/app/pages/landing/landing-page.html 93 @@ -7260,7 +7224,7 @@ Pulls on Docker Hub - Pulls on Docker Hub + Estrazioni su Docker Hub apps/client/src/app/pages/landing/landing-page.html 111 @@ -7272,7 +7236,7 @@ Uptime - Uptime + Tempo di attività apps/client/src/app/pages/open/open-page.html 132 @@ -7280,7 +7244,7 @@ Export Data - Export Data + Esporta dati apps/client/src/app/pages/user-account/user-account-page.html 280 @@ -7288,7 +7252,7 @@ Currencies - Currencies + Valute apps/client/src/app/components/admin-market-data/admin-market-data.component.ts 65 @@ -7296,7 +7260,7 @@ Our - Our + Nostri apps/client/src/app/pages/about/oss-friends/oss-friends-page.html 6 @@ -7304,7 +7268,7 @@ Visit - Visit + Visita apps/client/src/app/pages/about/oss-friends/oss-friends-page.html 28 @@ -7312,7 +7276,7 @@ Discover other exciting Open Source Software projects - Discover other exciting Open Source Software projects + Scopri altri interessanti progetti di software open source apps/client/src/app/pages/about/oss-friends/oss-friends-page.html 9 @@ -7320,7 +7284,7 @@ Frequently Asked Questions (FAQ) - Frequently Asked Questions (FAQ) + Domande più frequenti (FAQ) apps/client/src/app/pages/faq/faq-page.html 4,6 @@ -7328,7 +7292,7 @@ Check out the numerous features of Ghostfolio to manage your wealth - Check out the numerous features of Ghostfolio to manage your wealth + Scopri le numerose funzionalità di Ghostfolio per gestire la tua ricchezza apps/client/src/app/pages/features/features-page.html 6,8 @@ -7336,7 +7300,7 @@ Discover the latest Ghostfolio updates and insights on personal finance - Discover the latest Ghostfolio updates and insights on personal finance + Scopri gli ultimi aggiornamenti e approfondimenti di Ghostfolio sulla finanza personale apps/client/src/app/pages/blog/blog-page.html 7,8 @@ -7344,7 +7308,7 @@ If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. - If you prefer to run Ghostfolio on your own infrastructure, please find the source code and further instructions on GitHub. + Se preferisci eseguire Ghostfolio sulla tua infrastruttura, puoi trovare il codice sorgente e ulteriori istruzioni su GitHub. apps/client/src/app/pages/pricing/pricing-page.html 24,28 @@ -7352,7 +7316,7 @@ Manage your wealth like a boss - Manage your wealth like a boss + Gestisci la tua ricchezza come un capo apps/client/src/app/pages/landing/landing-page.html 11,13 @@ -7360,7 +7324,7 @@ Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. - Ghostfolio is a privacy-first, open source dashboard for your personal finances. Break down your asset allocation, know your net worth and make solid, data-driven investment decisions. + Ghostfolio è uno strumento open source e rispettoso della privacy per la gestione delle tue finanze personali. Analizza la tua allocazione degli asset, conosci il tuo patrimonio netto e prendi decisioni di investimento solide e basate sui dati. apps/client/src/app/pages/landing/landing-page.html 15,19 @@ -7368,7 +7332,7 @@ Get Started - Get Started + Inizia apps/client/src/app/pages/landing/landing-page.html 47,49 @@ -7380,7 +7344,7 @@ or - or + o apps/client/src/app/pages/landing/landing-page.html 52,54 @@ -7388,7 +7352,7 @@ Monthly Active Users - Monthly Active Users + Utenti attivi mensili apps/client/src/app/pages/landing/landing-page.html 75 @@ -7396,7 +7360,7 @@ As seen in - As seen in + Come si vede su apps/client/src/app/pages/landing/landing-page.html 119 @@ -7404,7 +7368,7 @@ Protect your assets. Refine your personal investment strategy. - Protect your assets. Refine your personal investment strategy. + Proteggi i tuoi asset. Perfeziona la tua strategia di investimento personale. apps/client/src/app/pages/landing/landing-page.html 221,224 @@ -7412,7 +7376,7 @@ Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. - Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. + Ghostfolio permette alle persone impegnate di tenere traccia di azioni, ETF o criptovalute senza essere tracciate. apps/client/src/app/pages/landing/landing-page.html 225,228 @@ -7420,7 +7384,7 @@ 360° View - 360° View + Vista a 360° apps/client/src/app/pages/landing/landing-page.html 236 @@ -7428,7 +7392,7 @@ Web3 Ready - Web3 Ready + Pronto per il Web3 apps/client/src/app/pages/landing/landing-page.html 247 @@ -7436,7 +7400,7 @@ Use Ghostfolio anonymously and own your financial data. - Use Ghostfolio anonymously and own your financial data. + Usa Ghostfolio in modo anonimo e possiedi i tuoi dati finanziari. apps/client/src/app/pages/landing/landing-page.html 249,251 @@ -7444,7 +7408,7 @@ Open Source - Open Source + Open source apps/client/src/app/pages/landing/landing-page.html 257 @@ -7452,7 +7416,7 @@ Benefit from continuous improvements through a strong community. - Benefit from continuous improvements through a strong community. + Beneficia dei continui miglioramenti grazie a una forte comunità. apps/client/src/app/pages/landing/landing-page.html 259,261 @@ -7460,7 +7424,7 @@ Why Ghostfolio? - Why Ghostfolio? + Perché Ghostfolio? apps/client/src/app/pages/landing/landing-page.html 268 @@ -7468,7 +7432,7 @@ Ghostfolio is for you if you are... - Ghostfolio is for you if you are... + Ghostfolio è per te se... apps/client/src/app/pages/landing/landing-page.html 269,271 @@ -7476,7 +7440,7 @@ trading stocks, ETFs or cryptocurrencies on multiple platforms - trading stocks, ETFs or cryptocurrencies on multiple platforms + fai trading di azioni, ETF o criptovalute su più piattaforme apps/client/src/app/pages/landing/landing-page.html 276,277 @@ -7484,7 +7448,7 @@ pursuing a buy & hold strategy - pursuing a buy & hold strategy + persegui una strategia buy & hold apps/client/src/app/pages/landing/landing-page.html 282 @@ -7492,7 +7456,7 @@ interested in getting insights of your portfolio composition - interested in getting insights of your portfolio composition + sei interessato a conoscere la composizione del tuo portafoglio apps/client/src/app/pages/landing/landing-page.html 287 @@ -7500,7 +7464,7 @@ valuing privacy and data ownership - valuing privacy and data ownership + valorizzi la privacy e la proprietà dei dati apps/client/src/app/pages/landing/landing-page.html 292 @@ -7508,7 +7472,7 @@ into minimalism - into minimalism + sei per il minimalismo apps/client/src/app/pages/landing/landing-page.html 295 @@ -7516,7 +7480,7 @@ caring about diversifying your financial resources - caring about diversifying your financial resources + ti interessa diversificare le tue risorse finanziarie apps/client/src/app/pages/landing/landing-page.html 299 @@ -7524,7 +7488,7 @@ interested in financial independence - interested in financial independence + sei interessato all'indipendenza finanziaria apps/client/src/app/pages/landing/landing-page.html 303 @@ -7532,7 +7496,7 @@ saying no to spreadsheets in - saying no to spreadsheets in + non vuoi utilizzare il foglio elettronico nel apps/client/src/app/pages/landing/landing-page.html 307 @@ -7540,7 +7504,7 @@ still reading this list - still reading this list + stai ancora leggendo questo elenco apps/client/src/app/pages/landing/landing-page.html 310 @@ -7548,7 +7512,7 @@ Learn more about Ghostfolio - Learn more about Ghostfolio + Ulteriori informazioni su Ghostfolio apps/client/src/app/pages/landing/landing-page.html 315 @@ -7556,7 +7520,7 @@ What our users are saying - What our users are saying + Cosa dicono i nostri utenti apps/client/src/app/pages/landing/landing-page.html 323,325 @@ -7564,7 +7528,7 @@ Members from around the globe are using Ghostfolio Premium - Members from around the globe are using Ghostfolio Premium + Membri da tutto il mondo utilizzano Ghostfolio Premium apps/client/src/app/pages/landing/landing-page.html 353,355 @@ -7572,7 +7536,7 @@ How does Ghostfolio work? - How does Ghostfolio work? + Come funziona Ghostfolio? apps/client/src/app/pages/landing/landing-page.html 368,370 @@ -7580,7 +7544,7 @@ Sign up anonymously* - Sign up anonymously* + Iscriviti in modo anonimo* apps/client/src/app/pages/landing/landing-page.html 377 @@ -7588,7 +7552,7 @@ * no e-mail address nor credit card required - * no e-mail address nor credit card required + * non è richiesto alcun indirizzo email né la carta di credito apps/client/src/app/pages/landing/landing-page.html 379 @@ -7596,7 +7560,7 @@ Add any of your historical transactions - Add any of your historical transactions + Aggiungi le tue transazioni storiche apps/client/src/app/pages/landing/landing-page.html 390,392 @@ -7604,7 +7568,7 @@ Get valuable insights of your portfolio composition - Get valuable insights of your portfolio composition + Ottieni informazioni preziose sulla composizione del tuo portafoglio apps/client/src/app/pages/landing/landing-page.html 402,404 @@ -7612,7 +7576,7 @@ Are you ready? - Are you ready? + Seipronto? apps/client/src/app/pages/landing/landing-page.html 414 @@ -7620,7 +7584,7 @@ Join now or check out the example account - Join now or check out the example account + Iscriviti adesso o consulta l'account di esempio apps/client/src/app/pages/landing/landing-page.html 415,418 @@ -7628,7 +7592,7 @@ Live Demo - Live Demo + Demo in tempo reale apps/client/src/app/pages/landing/landing-page.html 55 @@ -7640,7 +7604,7 @@ Get the full picture of your personal finances across multiple platforms. - Get the full picture of your personal finances across multiple platforms. + Ottieni un quadro completo delle tue finanze personali su più piattaforme. apps/client/src/app/pages/landing/landing-page.html 238,241 @@ -7648,7 +7612,7 @@ Get started in only 3 steps - Get started in only 3 steps + Inizia in soli 3 passi apps/client/src/app/pages/landing/landing-page.html 371 @@ -7719,7 +7683,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 32 + 34 apps/client/src/app/pages/resources/personal-finance-tools/products/altoo-page.component.ts @@ -8151,7 +8115,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 33 + 35 @@ -8300,7 +8264,7 @@ This overview page features a curated collection of personal finance tools compared to the open source alternative Ghostfolio. If you value transparency, data privacy, and community collaboration, Ghostfolio provides an excellent opportunity to take control of your financial management. - This overview page features a curated collection of personal finance tools compared to the open source alternative Ghostfolio. If you value transparency, data privacy, and community collaboration, Ghostfolio provides an excellent opportunity to take control of your financial management. + Questa pagina panoramica presenta una raccolta curata di strumenti di finanza personale confrontati con l'alternativa open source Ghostfolio. Se apprezzi la trasparenza, la privacy dei dati e la collaborazione con la comunità, Ghostfolio ti offre un'ottima opportunità per prendere il controllo della tua gestione finanziaria. apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html 8,15 @@ -8308,7 +8272,7 @@ Explore the links below to compare a variety of personal finance tools with Ghostfolio. - Explore the links below to compare a variety of personal finance tools with Ghostfolio. + Esplora i link qui sotto per confrontare una serie di strumenti di finanza personale con Ghostfolio. apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html 16,19 @@ -8316,7 +8280,7 @@ Open Source Alternative to - Open Source Alternative to + L'alternativa open source a apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page.html 35,37 @@ -8324,7 +8288,7 @@ Open Source Alternative to - Open Source Alternative to + L'alternativa open source a apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts 25 @@ -8332,7 +8296,7 @@ The Open Source Alternative to - The Open Source Alternative to + L'alternativa open source a apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 8 @@ -8436,7 +8400,7 @@ Are you looking for an open source alternative to ? Ghostfolio is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a wide range of functionalities to help you make informed decisions and take control of your financial future. - Are you looking for an open source alternative to ? Ghostfolio is a powerful portfolio management tool that provides individuals with a comprehensive platform to track, analyze, and optimize their investments. Whether you are an experienced investor or just starting out, Ghostfolio offers an intuitive user interface and a wide range of functionalities to help you make informed decisions and take control of your financial future. + Stai cercando un'alternativa open source a ? Ghostfolio è un potente strumento di gestione del portafoglio che fornisce alle persone una piattaforma completa per monitorare, analizzare e ottimizzare i propri investimenti. Che tu sia un investitore esperto o alle prime armi, Ghostfolio offre un'interfaccia utente intuitiva e un'ampia gamma di funzionalità per aiutarti a prendere decisioni informate e il controllo del tuo futuro finanziario. apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 13,25 @@ -8540,7 +8504,7 @@ Ghostfolio is an open source software (OSS), providing a cost-effective alternative to making it particularly suitable for individuals on a tight budget, such as those pursuing Financial Independence, Retire Early (FIRE). By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience. - Ghostfolio is an open source software (OSS), providing a cost-effective alternative to making it particularly suitable for individuals on a tight budget, such as those pursuing Financial Independence, Retire Early (FIRE). By leveraging the collective efforts of a community of developers and personal finance enthusiasts, Ghostfolio continuously enhances its capabilities, security, and user experience. + Ghostfolio è un software open source (OSS) che offre un'alternativa economicamente vantaggiosa a particolarmente adatta a persone con un budget limitato, come quelle che perseguono l'indipendenza finanziaria e il pensionamento anticipato (FIRE). Grazie agli sforzi collettivi di una comunità di sviluppatori e di appassionati di finanza personale, Ghostfolio migliora continuamente le sue capacità, la sua sicurezza e la sua esperienza utente. apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 26,36 @@ -8644,7 +8608,7 @@ Let’s dive deeper into the detailed comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to . We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements. - Let’s dive deeper into the detailed comparison table below to gain a thorough understanding of how Ghostfolio positions itself relative to . We will explore various aspects such as features, data privacy, pricing, and more, allowing you to make a well-informed choice for your personal requirements. + Analizziamo nel dettaglio la tabella di confronto qui sotto per comprendere a fondo come Ghostfolio si posiziona rispetto a . Esploreremo vari aspetti come le caratteristiche, la privacy dei dati, il prezzo e altro ancora, permettendoti di fare una scelta ben informata per le tue esigenze personali. apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 37,43 @@ -8748,7 +8712,7 @@ Starting from / year - Starting from / year + A partire da / anno apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 180,182 @@ -8852,7 +8816,7 @@ Starting from / year - Starting from / year + A partire da / anno apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 185,186 @@ -8956,7 +8920,7 @@ open-source-alternative-to - open-source-alternative-to + alternativa-open-source-a apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts 22 @@ -8968,7 +8932,7 @@ Please note that the information provided is based on our independent research and analysis. This website is not affiliated with or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on GitHub. - Please note that the information provided is based on our independent research and analysis. This website is not affiliated with or any other product mentioned in the comparison. As the landscape of personal finance tools evolves, it is essential to verify any specific details or changes directly from the respective product page. Data needs a refresh? Help us maintain accurate data on GitHub. + Nota bene: le informazioni fornite si basano sulle nostre ricerche e analisi indipendenti. Questo sito web non è affiliato con o a qualsiasi altro prodotto citato nel confronto. Poiché il panorama degli strumenti di finanza personale si evolve, è essenziale verificare qualsiasi dettaglio o modifica specifica direttamente nella pagina del prodotto in questione. I dati hanno bisogno di essere aggiornati? Aiutaci a mantenere i dati accurati su GitHub. apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 199,208 @@ -9072,7 +9036,7 @@ Ready to take your investments to the next level? - Ready to take your investments to the next level? + Sei pronto a portare il tuo investimento al livello successivo? apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 211,214 @@ -9176,7 +9140,7 @@ Get Started - Get Started + Inizia apps/client/src/app/pages/resources/personal-finance-tools/product-page-template.html 220,222 @@ -9280,7 +9244,7 @@ Switzerland - Switzerland + Svizzera apps/client/src/app/pages/resources/personal-finance-tools/products.ts 47 @@ -9304,7 +9268,7 @@ Global - Global + Globale apps/client/src/app/pages/resources/personal-finance-tools/products.ts 49 @@ -9320,7 +9284,7 @@ United States - United States + Stati Uniti apps/client/src/app/pages/resources/personal-finance-tools/products.ts 71 @@ -9352,7 +9316,7 @@ Belgium - Belgium + Belgio apps/client/src/app/pages/resources/personal-finance-tools/products.ts 84 @@ -9360,7 +9324,7 @@ Germany - Germany + Germania apps/client/src/app/pages/resources/personal-finance-tools/products.ts 96 @@ -9388,7 +9352,7 @@ Austria - Austria + Austria apps/client/src/app/pages/resources/personal-finance-tools/products.ts 120 @@ -9396,7 +9360,7 @@ Italy - Italy + Italia apps/client/src/app/pages/resources/personal-finance-tools/products.ts 230 @@ -9404,7 +9368,7 @@ Netherlands - Netherlands + Paesi Bassi apps/client/src/app/pages/resources/personal-finance-tools/products.ts 241 @@ -9412,7 +9376,7 @@ Thailand - Thailand + Thailandia apps/client/src/app/pages/resources/personal-finance-tools/products.ts 254 @@ -9420,7 +9384,7 @@ New Zealand - New Zealand + Nuova Zelanda apps/client/src/app/pages/resources/personal-finance-tools/products.ts 290 @@ -9428,7 +9392,7 @@ Czech Republic - Czech Republic + Repubblica Ceca apps/client/src/app/pages/resources/personal-finance-tools/products.ts 302 @@ -9440,7 +9404,7 @@ (Last 24 hours) - (Last 24 hours) + (Ultime 24 ore) apps/client/src/app/pages/open/open-page.html 37 @@ -9448,7 +9412,7 @@ (Last 30 days) - (Last 30 days) + (Ultimi 30 giorni) apps/client/src/app/pages/open/open-page.html 48 @@ -9460,7 +9424,7 @@ (Last 90 days) - (Last 90 days) + (Ultimi 90 giorni) apps/client/src/app/pages/open/open-page.html 127 @@ -9468,12 +9432,28 @@ New - New + Nuovo apps/client/src/app/pages/landing/landing-page.html 7 + + Add Access + Add Access + + apps/client/src/app/components/access-table/access-table.component.html + 8,10 + + + + Choose or drop a file here + Choose or drop a file here + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 85 + + diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 6b9b7ad72..9546245a3 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -26,7 +26,7 @@ Ontvanger apps/client/src/app/components/access-table/access-table.component.html - 10 + 22 @@ -34,16 +34,12 @@ Type apps/client/src/app/components/access-table/access-table.component.html - 17 + 29 apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 13 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 @@ -62,7 +58,7 @@ Details apps/client/src/app/components/access-table/access-table.component.html - 27 + 39 @@ -70,7 +66,7 @@ Intrekken apps/client/src/app/components/access-table/access-table.component.html - 54 + 66 @@ -78,12 +74,16 @@ Wil je deze verleende toegang echt intrekken? apps/client/src/app/components/access-table/access-table.component.ts - 49 + 50 Activities Activiteiten + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 48 + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 58 @@ -158,11 +158,11 @@ Waarde apps/client/src/app/components/accounts-table/accounts-table.component.html - 147 + 145 apps/client/src/app/components/accounts-table/accounts-table.component.html - 182 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -198,7 +198,7 @@ Bewerken apps/client/src/app/components/accounts-table/accounts-table.component.html - 248 + 246 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -214,7 +214,7 @@ Verwijderen apps/client/src/app/components/accounts-table/accounts-table.component.html - 256 + 254 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -406,7 +406,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 88 + 79 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/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 86 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1058,7 +1058,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 98 apps/client/src/app/pages/register/register-page.html @@ -1530,7 +1530,7 @@ apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.html - 267 + 273 apps/client/src/app/pages/blog/blog-page.html @@ -1642,7 +1642,7 @@ Lidmaatschap apps/client/src/app/pages/user-account/user-account-page.html - 15 + 12 @@ -1650,7 +1650,7 @@ Uitbreiden apps/client/src/app/pages/user-account/user-account-page.html - 40 + 39 @@ -1662,7 +1662,7 @@ apps/client/src/app/pages/user-account/user-account-page.html - 57 + 56 @@ -1670,7 +1670,7 @@ Probeer Premium apps/client/src/app/pages/user-account/user-account-page.html - 65 + 64 @@ -1746,7 +1746,7 @@ Verleende toegang apps/client/src/app/pages/user-account/user-account-page.html - 290 + 291 @@ -1796,18 +1796,6 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 171 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 15 - - - - Securities - Effecten - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 16 - Currency @@ -1822,7 +1810,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 22 + 13 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1842,11 +1830,11 @@ apps/client/src/app/components/accounts-table/accounts-table.component.html - 112 + 110 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 32 + 23 @@ -1862,7 +1850,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 45 + 36 @@ -1870,7 +1858,7 @@ Rekening-ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 77 + 68 @@ -2027,7 +2015,7 @@ Regions - Regio's + Regio's apps/client/src/app/pages/portfolio/allocations/allocations-page.html 201 @@ -2174,7 +2162,7 @@ Verkopen libs/ui/src/lib/i18n.ts - 35 + 34 @@ -2246,7 +2234,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 56 + 47 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2838,7 +2826,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 3 + 15 apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -2877,14 +2865,6 @@ 18 - - Account Type - Accounttype - - apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 48 - - Excluded from Analysis Uitgesloten van analyse @@ -2978,7 +2958,7 @@ Symbool libs/ui/src/lib/i18n.ts - 25 + 24 @@ -2986,7 +2966,7 @@ Label libs/ui/src/lib/i18n.ts - 26 + 25 @@ -2994,7 +2974,7 @@ Contant geld libs/ui/src/lib/i18n.ts - 38 + 37 @@ -3002,7 +2982,7 @@ Grondstof libs/ui/src/lib/i18n.ts - 39 + 38 @@ -3010,7 +2990,7 @@ Equity libs/ui/src/lib/i18n.ts - 40 + 39 @@ -3018,7 +2998,7 @@ Vast inkomen libs/ui/src/lib/i18n.ts - 41 + 40 @@ -3026,7 +3006,7 @@ Vastgoed libs/ui/src/lib/i18n.ts - 42 + 41 @@ -3034,7 +3014,7 @@ Obligatie libs/ui/src/lib/i18n.ts - 45 + 44 @@ -3042,7 +3022,7 @@ Cryptovaluta libs/ui/src/lib/i18n.ts - 46 + 45 @@ -3050,7 +3030,7 @@ ETF libs/ui/src/lib/i18n.ts - 47 + 46 @@ -3058,7 +3038,7 @@ Beleggingsfonds libs/ui/src/lib/i18n.ts - 48 + 47 @@ -3066,7 +3046,7 @@ Edelmetaal libs/ui/src/lib/i18n.ts - 49 + 48 @@ -3074,7 +3054,7 @@ Private equity libs/ui/src/lib/i18n.ts - 50 + 49 @@ -3082,7 +3062,7 @@ Aandeel libs/ui/src/lib/i18n.ts - 51 + 50 @@ -3122,7 +3102,7 @@ Noord-Amerika libs/ui/src/lib/i18n.ts - 57 + 56 @@ -3130,7 +3110,7 @@ Afrika libs/ui/src/lib/i18n.ts - 54 + 53 @@ -3138,7 +3118,7 @@ Azië libs/ui/src/lib/i18n.ts - 55 + 54 @@ -3146,7 +3126,7 @@ Europa libs/ui/src/lib/i18n.ts - 56 + 55 @@ -3154,7 +3134,7 @@ Oceanië libs/ui/src/lib/i18n.ts - 58 + 57 @@ -3162,15 +3142,7 @@ Zuid-Amerika libs/ui/src/lib/i18n.ts - 59 - - - - Choose File - Kies bestand - - apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 79 + 58 @@ -3178,7 +3150,7 @@ De volgende bestandsformaten worden ondersteund: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 83 + 91 @@ -3186,11 +3158,11 @@ Terug apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 132 + 141 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 169 + 178 @@ -3258,7 +3230,7 @@ libs/ui/src/lib/i18n.ts - 32 + 31 @@ -3290,7 +3262,7 @@ Gegevens valideren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 224 @@ -3298,19 +3270,11 @@ Importeren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 141 + 150 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 177 - - - - Securities - Effecten - - libs/ui/src/lib/i18n.ts - 24 + 186 @@ -3398,7 +3362,7 @@ Geldig tot apps/client/src/app/pages/user-account/user-account-page.html - 27 + 24 @@ -3846,7 +3810,7 @@ Vernieuw apps/client/src/app/pages/user-account/user-account-page.html - 45 + 44 @@ -4054,7 +4018,7 @@ Selecteer dividenden apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 105 + 114 @@ -4062,7 +4026,7 @@ Selecteer activiteiten apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 108 + 117 @@ -4134,7 +4098,7 @@ Jaren libs/ui/src/lib/i18n.ts - 28 + 27 @@ -4150,7 +4114,7 @@ Jaar libs/ui/src/lib/i18n.ts - 27 + 26 @@ -4207,7 +4171,7 @@ ETFs - ETF's + ETF's apps/client/src/app/pages/features/features-page.html 25 @@ -4306,7 +4270,7 @@ Verplichtingen libs/ui/src/lib/i18n.ts - 34 + 33 @@ -7011,7 +6975,7 @@ Stocks, ETFs, bonds, cryptocurrencies, commodities - Aandelen, ETF's, obligaties, cryptocurrencies, grondstoffen + Aandelen, ETF's, obligaties, cryptocurrencies, grondstoffen apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 22 @@ -7042,7 +7006,7 @@ Koop libs/ui/src/lib/i18n.ts - 31 + 30 @@ -7050,12 +7014,12 @@ Waardevol libs/ui/src/lib/i18n.ts - 33 + 32 ETFs without Countries - ETF's zonder Landen + ETF's zonder Landen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts 70 @@ -7063,7 +7027,7 @@ ETFs without Sectors - ETF's zonder Sectoren + ETF's zonder Sectoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts 75 @@ -7411,7 +7375,7 @@ Ghostfolio empowers busy people to keep track of stocks, ETFs or cryptocurrencies without being tracked. - Ghostfolio stelt drukbezette mensen in staat om aandelen, ETF's of cryptocurrencies bij te houden zonder gevolgd te worden. + Ghostfolio stelt drukbezette mensen in staat om aandelen, ETF's of cryptocurrencies bij te houden zonder gevolgd te worden. apps/client/src/app/pages/landing/landing-page.html 225,228 @@ -7475,7 +7439,7 @@ trading stocks, ETFs or cryptocurrencies on multiple platforms - handelt in aandelen, ETF's of cryptocurrencies op meerdere platforms + handelt in aandelen, ETF's of cryptocurrencies op meerdere platforms apps/client/src/app/pages/landing/landing-page.html 276,277 @@ -7718,7 +7682,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 32 + 34 apps/client/src/app/pages/resources/personal-finance-tools/products/altoo-page.component.ts @@ -8150,7 +8114,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 33 + 35 @@ -9473,6 +9437,22 @@ 7 + + Add Access + Add Access + + apps/client/src/app/components/access-table/access-table.component.html + 8,10 + + + + Choose or drop a file here + Choose or drop a file here + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 85 + + diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index d8fc55001..5fa85f3e6 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -14,7 +14,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 3 + 15 apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -26,7 +26,7 @@ Beneficiário (a) apps/client/src/app/components/access-table/access-table.component.html - 10 + 22 @@ -34,16 +34,12 @@ Tipo apps/client/src/app/components/access-table/access-table.component.html - 17 + 29 apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 13 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 @@ -62,7 +58,7 @@ Detalhes apps/client/src/app/components/access-table/access-table.component.html - 27 + 39 @@ -70,7 +66,7 @@ Revogar apps/client/src/app/components/access-table/access-table.component.html - 54 + 66 @@ -78,15 +74,7 @@ Pretende realmente revogar este acesso concedido? apps/client/src/app/components/access-table/access-table.component.ts - 49 - - - - Account Type - Tipo de conta - - apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 48 + 50 @@ -102,12 +90,16 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 45 + 36 Activities Atividades + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 48 + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 58 @@ -190,7 +182,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 22 + 13 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -210,11 +202,11 @@ apps/client/src/app/components/accounts-table/accounts-table.component.html - 112 + 110 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 32 + 23 @@ -222,11 +214,11 @@ Valor apps/client/src/app/components/accounts-table/accounts-table.component.html - 147 + 145 apps/client/src/app/components/accounts-table/accounts-table.component.html - 182 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -262,7 +254,7 @@ Editar apps/client/src/app/components/accounts-table/accounts-table.component.html - 248 + 246 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -278,7 +270,7 @@ Eliminar apps/client/src/app/components/accounts-table/accounts-table.component.html - 256 + 254 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -470,7 +462,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 88 + 79 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -506,7 +498,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 86 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1310,7 +1302,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 98 apps/client/src/app/pages/register/register-page.html @@ -1910,7 +1902,7 @@ Filiação apps/client/src/app/pages/user-account/user-account-page.html - 15 + 12 @@ -1918,7 +1910,7 @@ Atualizar apps/client/src/app/pages/user-account/user-account-page.html - 40 + 39 @@ -1930,7 +1922,7 @@ apps/client/src/app/pages/user-account/user-account-page.html - 57 + 56 @@ -1938,7 +1930,7 @@ Experimentar Premium apps/client/src/app/pages/user-account/user-account-page.html - 65 + 64 @@ -2074,7 +2066,7 @@ Acesso Concedido apps/client/src/app/pages/user-account/user-account-page.html - 290 + 291 @@ -2124,25 +2116,13 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 171 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 15 - - - - Securities - Títulos (Valores Mobiliários) - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 16 - Account ID ID da Conta apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 77 + 68 @@ -2230,7 +2210,7 @@ apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.html - 267 + 273 apps/client/src/app/pages/blog/blog-page.html @@ -2346,7 +2326,7 @@ Venda libs/ui/src/lib/i18n.ts - 35 + 34 @@ -2402,7 +2382,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 56 + 47 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2425,20 +2405,12 @@ 121 - - Choose File - Escolher Ficheiro - - apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 79 - - The following file formats are supported: Os seguintes formatos de ficheiro são suportados: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 83 + 91 @@ -2446,11 +2418,11 @@ Anterior apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 132 + 141 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 169 + 178 @@ -3042,7 +3014,7 @@ Símbolo libs/ui/src/lib/i18n.ts - 25 + 24 @@ -3050,7 +3022,7 @@ Marcador libs/ui/src/lib/i18n.ts - 26 + 25 @@ -3058,7 +3030,7 @@ Dinheiro libs/ui/src/lib/i18n.ts - 38 + 37 @@ -3066,7 +3038,7 @@ Matéria-prima libs/ui/src/lib/i18n.ts - 39 + 38 @@ -3074,7 +3046,7 @@ Ações libs/ui/src/lib/i18n.ts - 40 + 39 @@ -3082,7 +3054,7 @@ Rendimento Fixo libs/ui/src/lib/i18n.ts - 41 + 40 @@ -3090,7 +3062,7 @@ Imobiliário libs/ui/src/lib/i18n.ts - 42 + 41 @@ -3098,7 +3070,7 @@ Obrigação libs/ui/src/lib/i18n.ts - 45 + 44 @@ -3106,7 +3078,7 @@ Criptomoedas libs/ui/src/lib/i18n.ts - 46 + 45 @@ -3114,7 +3086,7 @@ ETF libs/ui/src/lib/i18n.ts - 47 + 46 @@ -3122,7 +3094,7 @@ Fundo de Investimento libs/ui/src/lib/i18n.ts - 48 + 47 @@ -3130,7 +3102,7 @@ Metal Precioso libs/ui/src/lib/i18n.ts - 49 + 48 @@ -3138,7 +3110,7 @@ Private Equity libs/ui/src/lib/i18n.ts - 50 + 49 @@ -3146,7 +3118,7 @@ Ação libs/ui/src/lib/i18n.ts - 51 + 50 @@ -3154,7 +3126,7 @@ África libs/ui/src/lib/i18n.ts - 54 + 53 @@ -3162,7 +3134,7 @@ Ásia libs/ui/src/lib/i18n.ts - 55 + 54 @@ -3170,7 +3142,7 @@ Europa libs/ui/src/lib/i18n.ts - 56 + 55 @@ -3178,7 +3150,7 @@ América do Norte libs/ui/src/lib/i18n.ts - 57 + 56 @@ -3186,7 +3158,7 @@ Oceânia libs/ui/src/lib/i18n.ts - 58 + 57 @@ -3194,7 +3166,7 @@ América do Sul libs/ui/src/lib/i18n.ts - 59 + 58 @@ -3310,7 +3282,7 @@ A validar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 224 @@ -3318,11 +3290,11 @@ Importar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 141 + 150 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 177 + 186 @@ -3334,7 +3306,7 @@ libs/ui/src/lib/i18n.ts - 32 + 31 @@ -3353,14 +3325,6 @@ 7 - - Securities - Títulos - - libs/ui/src/lib/i18n.ts - 24 - - Holding Detenção @@ -3398,7 +3362,7 @@ Válido até apps/client/src/app/pages/user-account/user-account-page.html - 27 + 24 @@ -3846,7 +3810,7 @@ Renovar apps/client/src/app/pages/user-account/user-account-page.html - 45 + 44 @@ -4054,7 +4018,7 @@ Selecionar Dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 105 + 114 @@ -4062,7 +4026,7 @@ Selecionar Atividades apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 108 + 117 @@ -4134,7 +4098,7 @@ Anos libs/ui/src/lib/i18n.ts - 28 + 27 @@ -4150,7 +4114,7 @@ Ano libs/ui/src/lib/i18n.ts - 27 + 26 @@ -4306,7 +4270,7 @@ Liability libs/ui/src/lib/i18n.ts - 34 + 33 @@ -7042,7 +7006,7 @@ Buy libs/ui/src/lib/i18n.ts - 31 + 30 @@ -7050,7 +7014,7 @@ Valuable libs/ui/src/lib/i18n.ts - 33 + 32 @@ -7718,7 +7682,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 32 + 34 apps/client/src/app/pages/resources/personal-finance-tools/products/altoo-page.component.ts @@ -8150,7 +8114,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 33 + 35 @@ -9473,6 +9437,22 @@ 7 + + Add Access + Add Access + + apps/client/src/app/components/access-table/access-table.component.html + 8,10 + + + + Choose or drop a file here + Choose or drop a file here + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 85 + + diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 1eec8b47f..5d93d1253 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -236,7 +236,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 32 + 34 apps/client/src/app/pages/resources/personal-finance-tools/products/altoo-page.component.ts @@ -491,7 +491,7 @@ apps/client/src/app/pages/pricing/pricing-page.component.ts - 33 + 35 @@ -765,7 +765,7 @@ apps/client/src/app/pages/blog/2023/09/ghostfolio-2/ghostfolio-2-page.html - 267 + 273 apps/client/src/app/pages/blog/blog-page.html @@ -988,7 +988,7 @@ Alias apps/client/src/app/components/access-table/access-table.component.html - 3 + 15 apps/client/src/app/pages/user-account/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -999,23 +999,19 @@ Grantee apps/client/src/app/components/access-table/access-table.component.html - 10 + 22 Type apps/client/src/app/components/access-table/access-table.component.html - 17 + 29 apps/client/src/app/components/admin-jobs/admin-jobs.html 20 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 13 - apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 12 @@ -1033,21 +1029,21 @@ Details apps/client/src/app/components/access-table/access-table.component.html - 27 + 39 Revoke apps/client/src/app/components/access-table/access-table.component.html - 54 + 66 Do you really want to revoke this granted access? apps/client/src/app/components/access-table/access-table.component.ts - 49 + 50 @@ -1058,11 +1054,11 @@ apps/client/src/app/components/accounts-table/accounts-table.component.html - 112 + 110 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 32 + 23 @@ -1072,13 +1068,6 @@ 43 - - Account Type - - apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 48 - - Platform @@ -1091,11 +1080,15 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 45 + 36 Activities + + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html + 48 + apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 58 @@ -1175,7 +1168,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 22 + 13 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1190,11 +1183,11 @@ Value apps/client/src/app/components/accounts-table/accounts-table.component.html - 147 + 145 apps/client/src/app/components/accounts-table/accounts-table.component.html - 182 + 180 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1229,7 +1222,7 @@ Edit apps/client/src/app/components/accounts-table/accounts-table.component.html - 248 + 246 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1244,7 +1237,7 @@ Delete apps/client/src/app/components/accounts-table/accounts-table.component.html - 256 + 254 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -1419,7 +1412,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 88 + 79 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1454,7 +1447,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 95 + 86 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -1694,7 +1687,7 @@ apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 56 + 47 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html @@ -2302,7 +2295,7 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 98 apps/client/src/app/pages/register/register-page.html @@ -2439,10 +2432,6 @@ apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 171 - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 15 - Assets @@ -2889,18 +2878,11 @@ 3 - - Securities - - apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 16 - - Account ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html - 77 + 68 @@ -3696,7 +3678,7 @@ Validating data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 184 + 224 @@ -3727,54 +3709,47 @@ 65 - - Choose File - - apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 79 - - The following file formats are supported: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 83 + 91 Select Dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 105 + 114 Select Activities apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 108 + 117 Back apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 132 + 141 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 169 + 178 Import apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 141 + 150 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 177 + 186 @@ -3961,7 +3936,7 @@ libs/ui/src/lib/i18n.ts - 32 + 31 @@ -4255,7 +4230,7 @@ apps/client/src/app/pages/user-account/user-account-page.html - 57 + 56 @@ -8223,35 +8198,35 @@ Membership apps/client/src/app/pages/user-account/user-account-page.html - 15 + 12 Valid until apps/client/src/app/pages/user-account/user-account-page.html - 27 + 24 Upgrade apps/client/src/app/pages/user-account/user-account-page.html - 40 + 39 Renew apps/client/src/app/pages/user-account/user-account-page.html - 45 + 44 Try Premium apps/client/src/app/pages/user-account/user-account-page.html - 65 + 64 @@ -8384,7 +8359,7 @@ Granted Access apps/client/src/app/pages/user-account/user-account-page.html - 290 + 291 @@ -8722,193 +8697,186 @@ 23 - - Securities - - libs/ui/src/lib/i18n.ts - 24 - - Symbol libs/ui/src/lib/i18n.ts - 25 + 24 Tag libs/ui/src/lib/i18n.ts - 26 + 25 Year libs/ui/src/lib/i18n.ts - 27 + 26 Years libs/ui/src/lib/i18n.ts - 28 + 27 Buy libs/ui/src/lib/i18n.ts - 31 + 30 Valuable libs/ui/src/lib/i18n.ts - 33 + 32 Liability libs/ui/src/lib/i18n.ts - 34 + 33 Sell libs/ui/src/lib/i18n.ts - 35 + 34 Cash libs/ui/src/lib/i18n.ts - 38 + 37 Commodity libs/ui/src/lib/i18n.ts - 39 + 38 Equity libs/ui/src/lib/i18n.ts - 40 + 39 Fixed Income libs/ui/src/lib/i18n.ts - 41 + 40 Real Estate libs/ui/src/lib/i18n.ts - 42 + 41 Bond libs/ui/src/lib/i18n.ts - 45 + 44 Cryptocurrency libs/ui/src/lib/i18n.ts - 46 + 45 ETF libs/ui/src/lib/i18n.ts - 47 + 46 Mutual Fund libs/ui/src/lib/i18n.ts - 48 + 47 Precious Metal libs/ui/src/lib/i18n.ts - 49 + 48 Private Equity libs/ui/src/lib/i18n.ts - 50 + 49 Stock libs/ui/src/lib/i18n.ts - 51 + 50 Africa libs/ui/src/lib/i18n.ts - 54 + 53 Asia libs/ui/src/lib/i18n.ts - 55 + 54 Europe libs/ui/src/lib/i18n.ts - 56 + 55 North America libs/ui/src/lib/i18n.ts - 57 + 56 Oceania libs/ui/src/lib/i18n.ts - 58 + 57 South America libs/ui/src/lib/i18n.ts - 59 + 58 @@ -8929,6 +8897,20 @@ 399 + + Choose or drop a file here + + apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html + 85 + + + + Add Access + + apps/client/src/app/components/access-table/access-table.component.html + 8,10 + + diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss index 36a5b11b4..88a7f9dc5 100644 --- a/apps/client/src/styles.scss +++ b/apps/client/src/styles.scss @@ -274,6 +274,16 @@ body { } } + .page { + &.with-tabs { + .mat-mdc-tab-nav-bar { + --mat-tab-header-inactive-label-text-color: rgba( + var(--light-primary-text) + ); + } + } + } + .svgMap-tooltip { background: var(--dark-background); @@ -430,6 +440,11 @@ ngx-skeleton-loader { } } +.mat-stepper-vertical, +.mat-stepper-horizontal { + background: transparent !important; +} + .mdc-button { &.mat-accent, &.mat-primary { @@ -450,7 +465,45 @@ ngx-skeleton-loader { } .page { - padding-bottom: 5rem; + display: flex; + flex-direction: column; + overflow-y: auto; + + &:not(.with-tabs) { + padding-bottom: 5rem; + } + + &.with-tabs { + height: calc(100vh - 5rem); + padding-bottom: env(safe-area-inset-bottom); + padding-bottom: constant(safe-area-inset-bottom); + + .mat-mdc-tab-nav-bar { + --mat-tab-header-active-focus-indicator-color: transparent; + --mat-tab-header-active-hover-indicator-color: transparent; + --mat-tab-header-inactive-label-text-color: rgba( + var(--dark-primary-text) + ); + --mdc-tab-indicator-active-indicator-color: transparent; + } + + @media (min-width: 576px) { + flex-direction: row-reverse; + + .mat-mdc-tab-header { + width: 12rem; + --mdc-secondary-navigation-tab-container-height: 2rem; + + .mat-mdc-tab-links { + flex-direction: column; + + .mat-mdc-tab-link { + justify-content: flex-start; + } + } + } + } + } } .svgMap-tooltip { diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 345641f97..467986fa1 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -39,7 +39,7 @@ export const DEFAULT_CURRENCY = 'USD'; export const DEFAULT_DATE_FORMAT_MONTH_YEAR = 'MMM yyyy'; export const DEFAULT_LANGUAGE_CODE = 'en'; export const DEFAULT_PAGE_SIZE = 50; -export const DEFAULT_REQUEST_TIMEOUT = ms('3 seconds'); +export const DEFAULT_REQUEST_TIMEOUT = ms('2 seconds'); export const DEFAULT_ROOT_URL = 'http://localhost:4200'; export const EMERGENCY_FUND_TAG_ID = '4452656d-9fa4-4bd0-ba38-70492e31d180'; diff --git a/libs/common/src/lib/interfaces/export.interface.ts b/libs/common/src/lib/interfaces/export.interface.ts index b142cb2f8..60fdd93e0 100644 --- a/libs/common/src/lib/interfaces/export.interface.ts +++ b/libs/common/src/lib/interfaces/export.interface.ts @@ -5,7 +5,10 @@ export interface Export { date: string; version: string; }; - accounts: Omit[]; + accounts: Omit< + Account, + 'accountType' | 'createdAt' | 'isDefault' | 'updatedAt' | 'userId' + >[]; activities: (Omit< Order, | 'accountUserId' diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts index fc622c074..49c4e7b6e 100644 --- a/libs/ui/src/lib/i18n.ts +++ b/libs/ui/src/lib/i18n.ts @@ -21,7 +21,6 @@ const locales = { PRESET_ID: $localize`Preset`, RETIREMENT_PROVISION: $localize`Retirement Provision`, SATELLITE: $localize`Satellite`, - SECURITIES: $localize`Securities`, SYMBOL: $localize`Symbol`, TAG: $localize`Tag`, YEAR: $localize`Year`, diff --git a/package.json b/package.json index 20dfd65da..f8d2b9962 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.0.0", + "version": "2.1.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", diff --git a/prisma/migrations/20230915141658_changed_account_type_to_optional_in_account/migration.sql b/prisma/migrations/20230915141658_changed_account_type_to_optional_in_account/migration.sql new file mode 100644 index 000000000..715610542 --- /dev/null +++ b/prisma/migrations/20230915141658_changed_account_type_to_optional_in_account/migration.sql @@ -0,0 +1,3 @@ +-- AlterTable +ALTER TABLE "Account" ALTER COLUMN "accountType" DROP NOT NULL, +ALTER COLUMN "accountType" DROP DEFAULT; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index b8e6064a2..81646012a 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -21,7 +21,7 @@ model Access { } model Account { - accountType AccountType @default(SECURITIES) + accountType AccountType? balance Float @default(0) balances AccountBalance[] comment String? diff --git a/test/import/ok-500-activities.json b/test/import/ok-500-activities.json index 9fe1aa8c8..f2aeab113 100644 --- a/test/import/ok-500-activities.json +++ b/test/import/ok-500-activities.json @@ -5,7 +5,6 @@ }, "accounts": [ { - "accountType": "SECURITIES", "balance": 2000, "currency": "USD", "id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0", @@ -6016,4 +6015,4 @@ "symbol": "AAPL" } ] -} \ No newline at end of file +} diff --git a/test/import/ok.json b/test/import/ok.json index 335d2cd8a..999006e72 100644 --- a/test/import/ok.json +++ b/test/import/ok.json @@ -5,7 +5,6 @@ }, "accounts": [ { - "accountType": "SECURITIES", "balance": 2000, "currency": "USD", "id": "b2d3fe1d-d6a8-41a3-be39-07ef5e9480f0",