diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ffd52502..22672c6f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,15 +9,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Renamed `Order` to `activities` in the `Account` database schema + +## 2.156.0 - 2025-04-27 + +### Changed + - Improved the error message of the currency code validation - Tightened the currency code validation by requiring uppercase letters -- Renamed `Order` to `activities` in the `Account` database schema +- Respected the watcher count for the delete asset profiles checkbox in the historical market data table of the admin control panel - Improved the language localization for Français (`fr`) +- Upgraded `ngx-skeleton-loader` from version `10.0.0` to `11.0.0` - Upgraded `Nx` from version `20.8.0` to `20.8.1` ### Fixed +- Fixed an issue with the investment calculation for activities in a custom currency - Improved the file selector of the activities import functionality to accept case-insensitive file extensions (`.CSV` and `.JSON`) +- Fixed the missing localization for "someone" on the public page ## 2.155.0 - 2025-04-23 diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 4cd4abcdb..e72902704 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -238,7 +238,10 @@ export class AdminService { where, select: { _count: { - select: { Order: true } + select: { + Order: true, + watchedBy: true + } }, assetClass: true, assetSubClass: true, @@ -375,7 +378,9 @@ export class AdminService { sectorsCount, activitiesCount: _count.Order, date: Order?.[0]?.date, - isUsedByUsersWithSubscription: await isUsedByUsersWithSubscription + isUsedByUsersWithSubscription: + await isUsedByUsersWithSubscription, + watchedByCount: _count.watchedBy }; } ) @@ -752,7 +757,8 @@ export class AdminService { id: undefined, isActive: true, name: symbol, - sectorsCount: 0 + sectorsCount: 0, + watchedByCount: 0 }; } ); diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts index 2c9f7b6f3..db80652c3 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator-test-utils.ts @@ -7,10 +7,12 @@ export const activityDummyData = { createdAt: new Date(), currency: undefined, fee: undefined, + feeInAssetProfileCurrency: undefined, id: undefined, isDraft: false, symbolProfileId: undefined, unitPrice: undefined, + unitPriceInAssetProfileCurrency: undefined, updatedAt: new Date(), userId: undefined, value: undefined, diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index 850b58113..99aeb42f8 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -902,8 +902,8 @@ export abstract class PortfolioCalculator { let lastTransactionPoint: TransactionPoint = null; for (const { - fee, date, + fee, quantity, SymbolProfile, tags, diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts new file mode 100644 index 000000000..2c5b90050 --- /dev/null +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btceur.spec.ts @@ -0,0 +1,238 @@ +import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; +import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; +import { + activityDummyData, + loadActivityExportFile, + symbolProfileDummyData, + userDummyData +} from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils'; +import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory'; +import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service'; +import { CurrentRateServiceMock } from '@ghostfolio/api/app/portfolio/current-rate.service.mock'; +import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; +import { RedisCacheServiceMock } from '@ghostfolio/api/app/redis-cache/redis-cache.service.mock'; +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; +import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; +import { parseDate } from '@ghostfolio/common/helper'; +import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; + +import { Big } from 'big.js'; +import { join } from 'path'; + +jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { + return { + // eslint-disable-next-line @typescript-eslint/naming-convention + CurrentRateService: jest.fn().mockImplementation(() => { + return CurrentRateServiceMock; + }) + }; +}); + +jest.mock( + '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', + () => { + return { + // eslint-disable-next-line @typescript-eslint/naming-convention + PortfolioSnapshotService: jest.fn().mockImplementation(() => { + return PortfolioSnapshotServiceMock; + }) + }; + } +); + +jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { + return { + // eslint-disable-next-line @typescript-eslint/naming-convention + RedisCacheService: jest.fn().mockImplementation(() => { + return RedisCacheServiceMock; + }) + }; +}); + +describe('PortfolioCalculator', () => { + let activityDtos: CreateOrderDto[]; + + let configurationService: ConfigurationService; + let currentRateService: CurrentRateService; + let exchangeRateDataService: ExchangeRateDataService; + let portfolioCalculatorFactory: PortfolioCalculatorFactory; + let portfolioSnapshotService: PortfolioSnapshotService; + let redisCacheService: RedisCacheService; + + beforeAll(() => { + activityDtos = loadActivityExportFile( + join(__dirname, '../../../../../../../test/import/ok-btceur.json') + ); + }); + + beforeEach(() => { + configurationService = new ConfigurationService(); + + currentRateService = new CurrentRateService(null, null, null, null); + + exchangeRateDataService = new ExchangeRateDataService( + null, + null, + null, + null + ); + + portfolioSnapshotService = new PortfolioSnapshotService(null); + + redisCacheService = new RedisCacheService(null, null); + + portfolioCalculatorFactory = new PortfolioCalculatorFactory( + configurationService, + currentRateService, + exchangeRateDataService, + portfolioSnapshotService, + redisCacheService + ); + }); + + describe('get current positions', () => { + it.only('with BTCUSD buy (in EUR)', async () => { + jest.useFakeTimers().setSystemTime(parseDate('2022-01-14').getTime()); + + const activities: Activity[] = activityDtos.map((activity) => ({ + ...activityDummyData, + ...activity, + date: parseDate(activity.date), + feeInAssetProfileCurrency: 4.46, + SymbolProfile: { + ...symbolProfileDummyData, + currency: 'USD', + dataSource: activity.dataSource, + name: 'Bitcoin', + symbol: activity.symbol + }, + unitPriceInAssetProfileCurrency: 44558.42 + })); + + const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ + activities, + calculationType: PerformanceCalculationType.ROAI, + currency: 'USD', + userId: userDummyData.id + }); + + const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + + const investments = portfolioCalculator.getInvestments(); + + const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'month' + }); + + expect(portfolioSnapshot.historicalData[0]).toEqual({ + date: '2021-12-11', + investmentValueWithCurrencyEffect: 0, + netPerformance: 0, + netPerformanceInPercentage: 0, + netPerformanceInPercentageWithCurrencyEffect: 0, + netPerformanceWithCurrencyEffect: 0, + netWorth: 0, + totalAccountBalance: 0, + totalInvestment: 0, + totalInvestmentValueWithCurrencyEffect: 0, + value: 0, + valueWithCurrencyEffect: 0 + }); + + expect(portfolioSnapshot.historicalData[1]).toEqual({ + date: '2021-12-12', + investmentValueWithCurrencyEffect: 44558.42, + netPerformance: -4.46, + netPerformanceInPercentage: 0, + netPerformanceInPercentageWithCurrencyEffect: 0, + netPerformanceWithCurrencyEffect: -4.46, + netWorth: 44558.42, + totalAccountBalance: 0, + totalInvestment: 44558.42, + totalInvestmentValueWithCurrencyEffect: 44558.42, + value: 44558.42, + valueWithCurrencyEffect: 44558.42 + }); + + expect( + portfolioSnapshot.historicalData[ + portfolioSnapshot.historicalData.length - 1 + ] + ).toEqual({ + date: '2022-01-14', + investmentValueWithCurrencyEffect: 0, + netPerformance: -1463.18, + netPerformanceInPercentage: -0.032837340282712, + netPerformanceInPercentageWithCurrencyEffect: -0.032837340282712, + netPerformanceWithCurrencyEffect: -1463.18, + netWorth: 43099.7, + totalAccountBalance: 0, + totalInvestment: 44558.42, + totalInvestmentValueWithCurrencyEffect: 44558.42, + value: 43099.7, + valueWithCurrencyEffect: 43099.7 + }); + + expect(portfolioSnapshot).toMatchObject({ + currentValueInBaseCurrency: new Big('43099.7'), + errors: [], + hasErrors: false, + positions: [ + { + averagePrice: new Big('44558.42'), + currency: 'USD', + dataSource: 'YAHOO', + dividend: new Big('0'), + dividendInBaseCurrency: new Big('0'), + fee: new Big('4.46'), + feeInBaseCurrency: new Big('4.46'), + firstBuyDate: '2021-12-12', + grossPerformance: new Big('-1458.72'), + grossPerformancePercentage: new Big('-0.03273724696701543726'), + grossPerformancePercentageWithCurrencyEffect: new Big( + '-0.03273724696701543726' + ), + grossPerformanceWithCurrencyEffect: new Big('-1458.72'), + investment: new Big('44558.42'), + investmentWithCurrencyEffect: new Big('44558.42'), + netPerformance: new Big('-1463.18'), + netPerformancePercentage: new Big('-0.03283734028271199921'), + netPerformancePercentageWithCurrencyEffectMap: { + max: new Big('-0.03283734028271199921') + }, + netPerformanceWithCurrencyEffectMap: { + max: new Big('-1463.18') + }, + marketPrice: 43099.7, + marketPriceInBaseCurrency: 43099.7, + quantity: new Big('1'), + symbol: 'BTCUSD', + tags: [], + timeWeightedInvestment: new Big('44558.42'), + timeWeightedInvestmentWithCurrencyEffect: new Big('44558.42'), + transactionCount: 1, + valueInBaseCurrency: new Big('43099.7') + } + ], + totalFeesWithCurrencyEffect: new Big('4.46'), + totalInterestWithCurrencyEffect: new Big('0'), + totalInvestment: new Big('44558.42'), + totalInvestmentWithCurrencyEffect: new Big('44558.42'), + totalLiabilitiesWithCurrencyEffect: new Big('0'), + totalValuablesWithCurrencyEffect: new Big('0') + }); + + expect(investments).toEqual([ + { date: '2021-12-12', investment: new Big('44558.42') } + ]); + + expect(investmentsByMonth).toEqual([ + { date: '2021-12-01', investment: 44558.42 }, + { date: '2022-01-01', investment: 0 } + ]); + }); + }); +}); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts new file mode 100644 index 000000000..96205fd77 --- /dev/null +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-btcusd.spec.ts @@ -0,0 +1,238 @@ +import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; +import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; +import { + activityDummyData, + loadActivityExportFile, + symbolProfileDummyData, + userDummyData +} from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils'; +import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory'; +import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service'; +import { CurrentRateServiceMock } from '@ghostfolio/api/app/portfolio/current-rate.service.mock'; +import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; +import { RedisCacheServiceMock } from '@ghostfolio/api/app/redis-cache/redis-cache.service.mock'; +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; +import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; +import { parseDate } from '@ghostfolio/common/helper'; +import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; + +import { Big } from 'big.js'; +import { join } from 'path'; + +jest.mock('@ghostfolio/api/app/portfolio/current-rate.service', () => { + return { + // eslint-disable-next-line @typescript-eslint/naming-convention + CurrentRateService: jest.fn().mockImplementation(() => { + return CurrentRateServiceMock; + }) + }; +}); + +jest.mock( + '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service', + () => { + return { + // eslint-disable-next-line @typescript-eslint/naming-convention + PortfolioSnapshotService: jest.fn().mockImplementation(() => { + return PortfolioSnapshotServiceMock; + }) + }; + } +); + +jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { + return { + // eslint-disable-next-line @typescript-eslint/naming-convention + RedisCacheService: jest.fn().mockImplementation(() => { + return RedisCacheServiceMock; + }) + }; +}); + +describe('PortfolioCalculator', () => { + let activityDtos: CreateOrderDto[]; + + let configurationService: ConfigurationService; + let currentRateService: CurrentRateService; + let exchangeRateDataService: ExchangeRateDataService; + let portfolioCalculatorFactory: PortfolioCalculatorFactory; + let portfolioSnapshotService: PortfolioSnapshotService; + let redisCacheService: RedisCacheService; + + beforeAll(() => { + activityDtos = loadActivityExportFile( + join(__dirname, '../../../../../../../test/import/ok-btcusd.json') + ); + }); + + beforeEach(() => { + configurationService = new ConfigurationService(); + + currentRateService = new CurrentRateService(null, null, null, null); + + exchangeRateDataService = new ExchangeRateDataService( + null, + null, + null, + null + ); + + portfolioSnapshotService = new PortfolioSnapshotService(null); + + redisCacheService = new RedisCacheService(null, null); + + portfolioCalculatorFactory = new PortfolioCalculatorFactory( + configurationService, + currentRateService, + exchangeRateDataService, + portfolioSnapshotService, + redisCacheService + ); + }); + + describe('get current positions', () => { + it.only('with BTCUSD buy (in USD)', async () => { + jest.useFakeTimers().setSystemTime(parseDate('2022-01-14').getTime()); + + const activities: Activity[] = activityDtos.map((activity) => ({ + ...activityDummyData, + ...activity, + date: parseDate(activity.date), + feeInAssetProfileCurrency: 4.46, + SymbolProfile: { + ...symbolProfileDummyData, + currency: 'USD', + dataSource: activity.dataSource, + name: 'Bitcoin', + symbol: activity.symbol + }, + unitPriceInAssetProfileCurrency: 44558.42 + })); + + const portfolioCalculator = portfolioCalculatorFactory.createCalculator({ + activities, + calculationType: PerformanceCalculationType.ROAI, + currency: 'USD', + userId: userDummyData.id + }); + + const portfolioSnapshot = await portfolioCalculator.computeSnapshot(); + + const investments = portfolioCalculator.getInvestments(); + + const investmentsByMonth = portfolioCalculator.getInvestmentsByGroup({ + data: portfolioSnapshot.historicalData, + groupBy: 'month' + }); + + expect(portfolioSnapshot.historicalData[0]).toEqual({ + date: '2021-12-11', + investmentValueWithCurrencyEffect: 0, + netPerformance: 0, + netPerformanceInPercentage: 0, + netPerformanceInPercentageWithCurrencyEffect: 0, + netPerformanceWithCurrencyEffect: 0, + netWorth: 0, + totalAccountBalance: 0, + totalInvestment: 0, + totalInvestmentValueWithCurrencyEffect: 0, + value: 0, + valueWithCurrencyEffect: 0 + }); + + expect(portfolioSnapshot.historicalData[1]).toEqual({ + date: '2021-12-12', + investmentValueWithCurrencyEffect: 44558.42, + netPerformance: -4.46, + netPerformanceInPercentage: 0, + netPerformanceInPercentageWithCurrencyEffect: 0, + netPerformanceWithCurrencyEffect: -4.46, + netWorth: 44558.42, + totalAccountBalance: 0, + totalInvestment: 44558.42, + totalInvestmentValueWithCurrencyEffect: 44558.42, + value: 44558.42, + valueWithCurrencyEffect: 44558.42 + }); + + expect( + portfolioSnapshot.historicalData[ + portfolioSnapshot.historicalData.length - 1 + ] + ).toEqual({ + date: '2022-01-14', + investmentValueWithCurrencyEffect: 0, + netPerformance: -1463.18, + netPerformanceInPercentage: -0.032837340282712, + netPerformanceInPercentageWithCurrencyEffect: -0.032837340282712, + netPerformanceWithCurrencyEffect: -1463.18, + netWorth: 43099.7, + totalAccountBalance: 0, + totalInvestment: 44558.42, + totalInvestmentValueWithCurrencyEffect: 44558.42, + value: 43099.7, + valueWithCurrencyEffect: 43099.7 + }); + + expect(portfolioSnapshot).toMatchObject({ + currentValueInBaseCurrency: new Big('43099.7'), + errors: [], + hasErrors: false, + positions: [ + { + averagePrice: new Big('44558.42'), + currency: 'USD', + dataSource: 'YAHOO', + dividend: new Big('0'), + dividendInBaseCurrency: new Big('0'), + fee: new Big('4.46'), + feeInBaseCurrency: new Big('4.46'), + firstBuyDate: '2021-12-12', + grossPerformance: new Big('-1458.72'), + grossPerformancePercentage: new Big('-0.03273724696701543726'), + grossPerformancePercentageWithCurrencyEffect: new Big( + '-0.03273724696701543726' + ), + grossPerformanceWithCurrencyEffect: new Big('-1458.72'), + investment: new Big('44558.42'), + investmentWithCurrencyEffect: new Big('44558.42'), + netPerformance: new Big('-1463.18'), + netPerformancePercentage: new Big('-0.03283734028271199921'), + netPerformancePercentageWithCurrencyEffectMap: { + max: new Big('-0.03283734028271199921') + }, + netPerformanceWithCurrencyEffectMap: { + max: new Big('-1463.18') + }, + marketPrice: 43099.7, + marketPriceInBaseCurrency: 43099.7, + quantity: new Big('1'), + symbol: 'BTCUSD', + tags: [], + timeWeightedInvestment: new Big('44558.42'), + timeWeightedInvestmentWithCurrencyEffect: new Big('44558.42'), + transactionCount: 1, + valueInBaseCurrency: new Big('43099.7') + } + ], + totalFeesWithCurrencyEffect: new Big('4.46'), + totalInterestWithCurrencyEffect: new Big('0'), + totalInvestment: new Big('44558.42'), + totalInvestmentWithCurrencyEffect: new Big('44558.42'), + totalLiabilitiesWithCurrencyEffect: new Big('0'), + totalValuablesWithCurrencyEffect: new Big('0') + }); + + expect(investments).toEqual([ + { date: '2021-12-12', investment: new Big('44558.42') } + ]); + + expect(investmentsByMonth).toEqual([ + { date: '2021-12-01', investment: 44558.42 }, + { date: '2022-01-01', investment: 0 } + ]); + }); + }); +}); diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts index 8fc179879..4c1962c1b 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator-msft-buy-with-dividend.spec.ts @@ -11,7 +11,6 @@ import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.s import { RedisCacheServiceMock } from '@ghostfolio/api/app/redis-cache/redis-cache.service.mock'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; -import { ExchangeRateDataServiceMock } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service.mock'; import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { PortfolioSnapshotServiceMock } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service.mock'; import { parseDate } from '@ghostfolio/common/helper'; @@ -49,18 +48,6 @@ jest.mock('@ghostfolio/api/app/redis-cache/redis-cache.service', () => { }; }); -jest.mock( - '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service', - () => { - return { - // eslint-disable-next-line @typescript-eslint/naming-convention - ExchangeRateDataService: jest.fn().mockImplementation(() => { - return ExchangeRateDataServiceMock; - }) - }; - } -); - describe('PortfolioCalculator', () => { let configurationService: ConfigurationService; let currentRateService: CurrentRateService; diff --git a/apps/api/src/app/portfolio/current-rate.service.mock.ts b/apps/api/src/app/portfolio/current-rate.service.mock.ts index fab25ae2d..4b4b8f00e 100644 --- a/apps/api/src/app/portfolio/current-rate.service.mock.ts +++ b/apps/api/src/app/portfolio/current-rate.service.mock.ts @@ -47,6 +47,10 @@ function mockGetValue(symbol: string, date: Date) { return { marketPrice: 14156.4 }; } else if (isSameDay(parseDate('2018-01-01'), date)) { return { marketPrice: 13657.2 }; + } else if (isSameDay(parseDate('2021-12-12'), date)) { + return { marketPrice: 50098.3 }; + } else if (isSameDay(parseDate('2022-01-14'), date)) { + return { marketPrice: 43099.7 }; } return { marketPrice: 0 }; diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index ccd82f9fe..3aa9696b5 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -748,8 +748,14 @@ export class PortfolioService { ); const historicalDataArray: HistoricalDataItem[] = []; - let maxPrice = Math.max(activitiesOfPosition[0].unitPrice, marketPrice); - let minPrice = Math.min(activitiesOfPosition[0].unitPrice, marketPrice); + let maxPrice = Math.max( + activitiesOfPosition[0].unitPriceInAssetProfileCurrency, + marketPrice + ); + let minPrice = Math.min( + activitiesOfPosition[0].unitPriceInAssetProfileCurrency, + marketPrice + ); if (historicalData[aSymbol]) { let j = -1; @@ -793,9 +799,9 @@ export class PortfolioService { } else { // Add historical entry for buy date, if no historical data available historicalDataArray.push({ - averagePrice: activitiesOfPosition[0].unitPrice, + averagePrice: activitiesOfPosition[0].unitPriceInAssetProfileCurrency, date: firstBuyDate, - marketPrice: activitiesOfPosition[0].unitPrice, + marketPrice: activitiesOfPosition[0].unitPriceInAssetProfileCurrency, quantity: activitiesOfPosition[0].quantity }); } diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index d9e419812..cf55b8862 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -356,18 +356,20 @@ export class UserService { new Date(), user.createdAt ); - let frequency = 10; + let frequency = 7; - if (daysSinceRegistration > 365) { + if (daysSinceRegistration > 720) { + frequency = 1; + } else if (daysSinceRegistration > 360) { frequency = 2; } else if (daysSinceRegistration > 180) { frequency = 3; } else if (daysSinceRegistration > 60) { frequency = 4; } else if (daysSinceRegistration > 30) { - frequency = 6; + frequency = 5; } else if (daysSinceRegistration > 15) { - frequency = 8; + frequency = 6; } if (Analytics?.activityCount % frequency === 1) { diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.html b/apps/client/src/app/components/admin-market-data/admin-market-data.html index 6ba8f1810..bfa6d550e 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.html +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -55,7 +55,8 @@ adminMarketDataService.hasPermissionToDeleteAssetProfile({ activitiesCount: element.activitiesCount, isBenchmark: element.isBenchmark, - symbol: element.symbol + symbol: element.symbol, + watchedByCount: element.watchedByCount }) ) { ) { + symbol, + watchedByCount + }: Pick< + AdminMarketDataItem, + 'activitiesCount' | 'isBenchmark' | 'symbol' | 'watchedByCount' + >) { return ( activitiesCount === 0 && !isBenchmark && !isDerivedCurrency(getCurrencyFromSymbol(symbol)) && !isRootCurrency(getCurrencyFromSymbol(symbol)) && - !symbol.startsWith(ghostfolioScraperApiSymbolPrefix) + !symbol.startsWith(ghostfolioScraperApiSymbolPrefix) && + watchedByCount === 0 ); } } diff --git a/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts b/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts index d98c54719..201a63927 100644 --- a/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts +++ b/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts @@ -1,5 +1,14 @@ -import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + Inject, + OnInit +} from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import ms from 'ms'; +import { interval, Subject } from 'rxjs'; +import { take, takeUntil, tap } from 'rxjs/operators'; import { SubscriptionInterstitialDialogParams } from './interfaces/interfaces'; @@ -11,20 +20,47 @@ import { SubscriptionInterstitialDialogParams } from './interfaces/interfaces'; templateUrl: 'subscription-interstitial-dialog.html', standalone: false }) -export class SubscriptionInterstitialDialog { - private readonly VARIANTS_COUNT = 2; +export class SubscriptionInterstitialDialog implements OnInit { + private static readonly SKIP_BUTTON_DELAY_IN_SECONDS = 5; + private static readonly VARIANTS_COUNT = 2; + public remainingSkipButtonDelay = + SubscriptionInterstitialDialog.SKIP_BUTTON_DELAY_IN_SECONDS; public routerLinkPricing = ['/' + $localize`:snake-case:pricing`]; public variantIndex: number; + private unsubscribeSubject = new Subject(); + public constructor( + private changeDetectorRef: ChangeDetectorRef, @Inject(MAT_DIALOG_DATA) public data: SubscriptionInterstitialDialogParams, public dialogRef: MatDialogRef ) { - this.variantIndex = Math.floor(Math.random() * this.VARIANTS_COUNT); + this.variantIndex = Math.floor( + Math.random() * SubscriptionInterstitialDialog.VARIANTS_COUNT + ); + } + + public ngOnInit() { + interval(ms('1 second')) + .pipe( + take(SubscriptionInterstitialDialog.SKIP_BUTTON_DELAY_IN_SECONDS), + tap(() => { + this.remainingSkipButtonDelay--; + + this.changeDetectorRef.markForCheck(); + }), + takeUntil(this.unsubscribeSubject) + ) + .subscribe(); } public closeDialog() { this.dialogRef.close({}); } + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } } diff --git a/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html b/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html index b9b96f9a8..92d9da835 100644 --- a/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html +++ b/apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -51,7 +51,16 @@
- +
-

- Hello, {{ publicPortfolioDetails?.alias ?? 'someone' }} has shared a + Hello, {{ publicPortfolioDetails?.alias ?? defaultAlias }} has shared a Portfolio with you!

diff --git a/apps/client/src/app/services/user/user.service.ts b/apps/client/src/app/services/user/user.service.ts index 99bfdb458..86b2656d7 100644 --- a/apps/client/src/app/services/user/user.service.ts +++ b/apps/client/src/app/services/user/user.service.ts @@ -121,6 +121,7 @@ export class UserService extends ObservableStore { data: { user } as SubscriptionInterstitialDialogParams, + disableClose: true, height: this.deviceType === 'mobile' ? '98vh' : '80vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 456e15790..94b8635b5 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -665,7 +665,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -1035,7 +1035,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1183,7 +1183,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1207,7 +1207,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1291,7 +1291,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1315,7 +1315,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1439,7 +1439,7 @@ Preu de Mercat apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1583,7 +1583,7 @@ Classe d’Actiu apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1611,7 +1611,7 @@ Subclasse d’Actiu apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1635,7 +1635,7 @@ Primera Activitat apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1655,7 +1655,7 @@ Nombre d’Activitats apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -1663,7 +1663,7 @@ Dades Històriques apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -1675,7 +1675,7 @@ Nombre de Sectors apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -1683,7 +1683,7 @@ Nombre de Països apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -1691,7 +1691,7 @@ Recopilar Dades del Perfil apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1703,7 +1703,7 @@ Eliminar Perfils apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -2371,7 +2371,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3151,7 +3151,11 @@ Skip apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -5386,9 +5390,9 @@ 345 - - Hello, has shared a Portfolio with you! - Hello, has shared a Portfolio with you! + + Hello, has shared a Portfolio with you! + Hello, has shared a Portfolio with you! apps/client/src/app/pages/public/public-page.html 4 @@ -7282,20 +7286,12 @@ 95 - - Skip - Skip - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Join now Join now apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -7894,7 +7890,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -7902,7 +7898,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -7929,6 +7925,14 @@ 31 + + someone + someone + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 10f26cddb..afdcb1253 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -130,7 +130,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -246,7 +246,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -270,7 +270,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -322,7 +322,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -346,7 +346,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -466,7 +466,7 @@ Marktpreis apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -570,7 +570,7 @@ Erste Aktivität apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -598,7 +598,7 @@ Historische Daten apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -650,7 +650,7 @@ Letzte historische Marktdaten synchronisieren apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -658,7 +658,7 @@ Alle historischen Marktdaten synchronisieren apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -666,7 +666,7 @@ Profildaten synchronisieren apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2294,7 +2294,7 @@ Anlageklasse apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2650,7 +2650,7 @@ Anlageunterklasse apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2782,7 +2782,7 @@ Anzahl Länder apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -2790,7 +2790,7 @@ Anzahl Sektoren apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -2837,9 +2837,9 @@ 11 - - Hello, has shared a Portfolio with you! - Hallo, hat ein Portfolio mit dir geteilt! + + Hello, has shared a Portfolio with you! + Hallo, hat ein Portfolio mit dir geteilt! apps/client/src/app/pages/public/public-page.html 4 @@ -3234,7 +3234,7 @@ Anzahl Aktivitäten apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -3546,7 +3546,11 @@ Überspringen apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -3558,7 +3562,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -5449,7 +5453,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -6663,7 +6667,7 @@ Profile löschen apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -7306,20 +7310,12 @@ 95 - - Skip - Überspringen - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Join now Jetzt teilnehmen apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -7929,6 +7925,14 @@ 31 + + someone + jemand + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 8ba704729..6e6f6d3f1 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -131,7 +131,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -247,7 +247,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -271,7 +271,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -323,7 +323,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -347,7 +347,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -467,7 +467,7 @@ Precio de mercado apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -571,7 +571,7 @@ Primera actividad apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -599,7 +599,7 @@ Datos históricos apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -651,7 +651,7 @@ Recoger los datos del perfil apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2279,7 +2279,7 @@ Tipo de activo apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2623,7 +2623,7 @@ Subtipo de activo apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2767,7 +2767,7 @@ Número de sectores apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -2775,7 +2775,7 @@ Número de países apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -2810,9 +2810,9 @@ 330 - - Hello, has shared a Portfolio with you! - Hola, ha compartido una Cartera contigo! + + Hello, has shared a Portfolio with you! + Hola, ha compartido una Cartera contigo! apps/client/src/app/pages/public/public-page.html 4 @@ -3219,7 +3219,7 @@ Recuento de actividades apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -3531,7 +3531,11 @@ Saltar apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -3543,7 +3547,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -5426,7 +5430,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -6640,7 +6644,7 @@ Borrar Perfiles apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -7283,20 +7287,12 @@ 95 - - Skip - Skip - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Join now Join now apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -7895,7 +7891,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -7903,7 +7899,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -7930,6 +7926,14 @@ 31 + + someone + someone + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index c788e87e1..c4536731e 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -138,7 +138,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -302,7 +302,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -326,7 +326,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -370,7 +370,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -394,7 +394,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -522,7 +522,7 @@ Prix du Marché apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -634,7 +634,7 @@ Classe d’Actifs apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -662,7 +662,7 @@ Sous-classe d’Actifs apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -686,7 +686,7 @@ Première Activité apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -706,7 +706,7 @@ Nombre d’Activités apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -714,7 +714,7 @@ Données Historiques apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -726,7 +726,7 @@ Nombre de Secteurs apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -734,7 +734,7 @@ Nombre de Pays apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -742,7 +742,7 @@ Obtenir les Données du Profil apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2809,9 +2809,9 @@ 13 - - Hello, has shared a Portfolio with you! - Bonjour, a partagé un Portefeuille avec vous ! + + Hello, has shared a Portfolio with you! + Bonjour, a partagé un Portefeuille avec vous ! apps/client/src/app/pages/public/public-page.html 4 @@ -3530,7 +3530,11 @@ Passer apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -3542,7 +3546,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -5425,7 +5429,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -6639,7 +6643,7 @@ Supprimer des Profils apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -7282,20 +7286,12 @@ 95 - - Skip - Passer - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Join now Rejoindre maintenant apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -7894,7 +7890,7 @@ Collecter les données récentes du marché historique apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -7902,7 +7898,7 @@ Collecter toutes les données du marché historique apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -7929,6 +7925,14 @@ 31 + + someone + quelqu’un + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index c8c1a086d..e8b29147f 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -131,7 +131,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -247,7 +247,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -271,7 +271,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -323,7 +323,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -347,7 +347,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -467,7 +467,7 @@ Prezzo di mercato apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -571,7 +571,7 @@ Prima attività apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -599,7 +599,7 @@ Dati storici apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -651,7 +651,7 @@ Raccogli i dati del profilo apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2279,7 +2279,7 @@ Classe asset apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2623,7 +2623,7 @@ Sottoclasse asset apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2767,7 +2767,7 @@ Numero di settori apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -2775,7 +2775,7 @@ Numero di paesi apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -2810,9 +2810,9 @@ 330 - - Hello, has shared a Portfolio with you! - Salve, ha condiviso un Portafoglio con te! + + Hello, has shared a Portfolio with you! + Salve, ha condiviso un Portafoglio con te! apps/client/src/app/pages/public/public-page.html 4 @@ -3219,7 +3219,7 @@ Conteggio attività apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -3531,7 +3531,11 @@ Salta apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -3543,7 +3547,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -5426,7 +5430,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -6640,7 +6644,7 @@ Elimina i profili apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -7283,20 +7287,12 @@ 95 - - Skip - Salta - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Join now Iscriviti adesso apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -7895,7 +7891,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -7903,7 +7899,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -7930,6 +7926,14 @@ 31 + + someone + someone + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 7c5066ad6..3ea7934ae 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -130,7 +130,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -246,7 +246,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -270,7 +270,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -322,7 +322,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -346,7 +346,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -466,7 +466,7 @@ Marktprijs apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -570,7 +570,7 @@ Eerste activiteit apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -598,7 +598,7 @@ Historische gegevens apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -650,7 +650,7 @@ Verzamel profielgegevens apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2278,7 +2278,7 @@ Asset klasse apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2622,7 +2622,7 @@ Asset subklasse apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2766,7 +2766,7 @@ Aantal sectoren apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -2774,7 +2774,7 @@ Aantal landen apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -2809,9 +2809,9 @@ 330 - - Hello, has shared a Portfolio with you! - Hallo, heeft een portefeuille met je gedeeld! + + Hello, has shared a Portfolio with you! + Hallo, heeft een portefeuille met je gedeeld! apps/client/src/app/pages/public/public-page.html 4 @@ -3218,7 +3218,7 @@ Aantal activiteiten apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -3530,7 +3530,11 @@ Overslaan apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -3542,7 +3546,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -5425,7 +5429,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -6639,7 +6643,7 @@ Delete Profiles apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -7282,20 +7286,12 @@ 95 - - Skip - Skip - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Join now Join now apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -7894,7 +7890,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -7902,7 +7898,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -7929,6 +7925,14 @@ 31 + + someone + iemand + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 4970c3d53..99418ceb0 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -284,7 +284,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -963,7 +963,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1111,7 +1111,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1135,7 +1135,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1199,7 +1199,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1223,7 +1223,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1331,7 +1331,7 @@ Cena Rynkowa apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1475,7 +1475,7 @@ Klasa Aktywów apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1503,7 +1503,7 @@ Podklasa Aktywów apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1527,7 +1527,7 @@ Pierwsza Aktywność apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1547,7 +1547,7 @@ Liczba Aktywności apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -1555,7 +1555,7 @@ Dane Historyczne apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -1567,7 +1567,7 @@ Liczba Sektorów apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -1575,7 +1575,7 @@ Liczba Krajów apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -1583,7 +1583,7 @@ Zbierz Dane Profilu apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2887,7 +2887,11 @@ Pomiń apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -2899,7 +2903,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4962,9 +4966,9 @@ 345 - - Hello, has shared a Portfolio with you! - Witaj, udostępnił Ci Portfel + + Hello, has shared a Portfolio with you! + Witaj, udostępnił Ci Portfel apps/client/src/app/pages/public/public-page.html 4 @@ -6639,7 +6643,7 @@ Usuń Profile apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -7282,20 +7286,12 @@ 95 - - Skip - Pomiń - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Join now Dołącz teraz apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -7894,7 +7890,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -7902,7 +7898,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -7929,6 +7925,14 @@ 31 + + someone + someone + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 84a3a0061..f83a0c9c8 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -138,7 +138,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -302,7 +302,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -326,7 +326,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -370,7 +370,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -394,7 +394,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -522,7 +522,7 @@ Preço de Mercado apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -634,7 +634,7 @@ Classe do Ativo apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -662,7 +662,7 @@ Subclasse do ativo apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -686,7 +686,7 @@ Primeira Atividade apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -714,7 +714,7 @@ Dados Históricos apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -726,7 +726,7 @@ Contagem de Países apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -734,7 +734,7 @@ Contagem de Setores apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -742,7 +742,7 @@ Recolher Dados de Perfíl apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2705,9 +2705,9 @@ 13 - - Hello, has shared a Portfolio with you! - Olá, partilhou um Portefólio consigo! + + Hello, has shared a Portfolio with you! + Olá, partilhou um Portefólio consigo! apps/client/src/app/pages/public/public-page.html 4 @@ -3178,7 +3178,7 @@ Nº de Atividades apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -3530,7 +3530,11 @@ Saltar apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -3542,7 +3546,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -5425,7 +5429,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -6639,7 +6643,7 @@ Delete Profiles apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -7282,20 +7286,12 @@ 95 - - Skip - Skip - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Join now Join now apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -7894,7 +7890,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -7902,7 +7898,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -7929,6 +7925,14 @@ 31 + + someone + someone + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 97457c7a0..7b8f9fcf3 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -284,7 +284,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -923,7 +923,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1071,7 +1071,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1095,7 +1095,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1139,7 +1139,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1163,7 +1163,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1291,7 +1291,7 @@ Piyasa Fiyatı apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1427,7 +1427,7 @@ Varlık Sınıfı apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1455,7 +1455,7 @@ Varlık Alt Sınıfı apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1479,7 +1479,7 @@ İlk İşlem apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1499,7 +1499,7 @@ İşlem Sayısı apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -1507,7 +1507,7 @@ Tarihsel Veri apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -1519,7 +1519,7 @@ Sektör Sayısı apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -1527,7 +1527,7 @@ Ülke Sayısı apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -1535,7 +1535,7 @@ Profil Verisini Getir apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2727,7 +2727,11 @@ Geç apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -2739,7 +2743,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4434,9 +4438,9 @@ 345 - - Hello, has shared a Portfolio with you! - Merhaba, size bir Portföy paylaştı! + + Hello, has shared a Portfolio with you! + Merhaba, size bir Portföy paylaştı! apps/client/src/app/pages/public/public-page.html 4 @@ -6639,7 +6643,7 @@ Delete Profiles apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -7282,20 +7286,12 @@ 95 - - Skip - Skip - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Join now Join now apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -7894,7 +7890,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -7902,7 +7898,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -7929,6 +7925,14 @@ 31 + + someone + someone + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index dae661112..8b887cfec 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -665,7 +665,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -1051,7 +1051,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1199,7 +1199,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1223,7 +1223,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1315,7 +1315,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1339,7 +1339,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1475,7 +1475,7 @@ Клас активу apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1503,7 +1503,7 @@ Підклас активу apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1527,7 +1527,7 @@ Ринкова ціна apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1543,7 +1543,7 @@ Перша активність apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1563,7 +1563,7 @@ Кількість активностей apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -1571,7 +1571,7 @@ Історичні дані apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -1583,7 +1583,7 @@ Кількість секторів apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -1591,7 +1591,7 @@ Кількість країн apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -1599,7 +1599,7 @@ Зібрати дані профілю apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1611,7 +1611,7 @@ Видалити профілі apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -2503,7 +2503,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3311,15 +3311,11 @@ Пропустити apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 - - - Skip - Пропустити apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 + 98 @@ -3327,7 +3323,7 @@ Приєднуйтесь apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -5710,9 +5706,9 @@ 345 - - Hello, has shared a Portfolio with you! - Привіт, поділився з вами Портфелем! + + Hello, has shared a Portfolio with you! + Привіт, поділився з вами Портфелем! apps/client/src/app/pages/public/public-page.html 4 @@ -7894,7 +7890,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -7902,7 +7898,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -7929,6 +7925,14 @@ 31 + + someone + someone + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index d8a7b552c..aa91e90d0 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -279,7 +279,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -935,7 +935,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1079,7 +1079,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1102,7 +1102,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1162,7 +1162,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1185,7 +1185,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1282,7 +1282,7 @@ Market Price apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1418,7 +1418,7 @@ Asset Class apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1445,7 +1445,7 @@ Asset Sub Class apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1468,7 +1468,7 @@ First Activity apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1487,14 +1487,14 @@ Activities Count apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 Historical Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -1505,35 +1505,35 @@ Sectors Count apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 Countries Count apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 Gather Profile Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2717,7 +2717,11 @@ Skip apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -2728,7 +2732,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4574,8 +4578,8 @@ 345 - - Hello, has shared a Portfolio with you! + + Hello, has shared a Portfolio with you! apps/client/src/app/pages/public/public-page.html 4 @@ -6055,7 +6059,7 @@ Delete Profiles apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -6622,7 +6626,7 @@ Join now apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -6671,13 +6675,6 @@ 28 - - Skip - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Threshold range @@ -7168,6 +7165,13 @@ 31 + + someone + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 6305867a3..6a18716da 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -285,7 +285,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component.ts - 17 + 29 apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -972,7 +972,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 88 + 89 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1120,7 +1120,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 268 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1144,7 +1144,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 290 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1208,7 +1208,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 74 + 75 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1232,7 +1232,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 105 + 106 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1340,7 +1340,7 @@ 市场价 apps/client/src/app/components/admin-market-data/admin-market-data.html - 132 + 133 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1484,7 +1484,7 @@ 资产类别 apps/client/src/app/components/admin-market-data/admin-market-data.html - 114 + 115 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1512,7 +1512,7 @@ 资产子类别 apps/client/src/app/components/admin-market-data/admin-market-data.html - 123 + 124 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1536,7 +1536,7 @@ 第一个活动 apps/client/src/app/components/admin-market-data/admin-market-data.html - 147 + 148 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1556,7 +1556,7 @@ 活动计数 apps/client/src/app/components/admin-market-data/admin-market-data.html - 156 + 157 @@ -1564,7 +1564,7 @@ 历史数据 apps/client/src/app/components/admin-market-data/admin-market-data.html - 165 + 166 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -1576,7 +1576,7 @@ 行业数 apps/client/src/app/components/admin-market-data/admin-market-data.html - 174 + 175 @@ -1584,7 +1584,7 @@ 国家数 apps/client/src/app/components/admin-market-data/admin-market-data.html - 183 + 184 @@ -1592,7 +1592,7 @@ 收集个人资料数据 apps/client/src/app/components/admin-market-data/admin-market-data.html - 234 + 235 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -2896,7 +2896,11 @@ 跳过 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 54 + 59 + + + apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html + 98 @@ -2908,7 +2912,7 @@ apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 61 + 70 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4971,9 +4975,9 @@ 345 - - Hello, has shared a Portfolio with you! - 你好,分享了一个文件夹与你! + + Hello, has shared a Portfolio with you! + 你好,分享了一个文件夹与你! apps/client/src/app/pages/public/public-page.html 4 @@ -6640,7 +6644,7 @@ Delete Profiles apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 + 243 @@ -7283,20 +7287,12 @@ 95 - - Skip - Skip - - apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 83 - - Join now Join now apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html - 93 + 110 @@ -7895,7 +7891,7 @@ Gather Recent Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 225 + 226 @@ -7903,7 +7899,7 @@ Gather All Historical Market Data apps/client/src/app/components/admin-market-data/admin-market-data.html - 230 + 231 @@ -7930,6 +7926,14 @@ 31 + + someone + someone + + apps/client/src/app/pages/public/public-page.component.ts + 33 + + diff --git a/libs/common/src/lib/interfaces/admin-market-data.interface.ts b/libs/common/src/lib/interfaces/admin-market-data.interface.ts index d72672489..953f94e26 100644 --- a/libs/common/src/lib/interfaces/admin-market-data.interface.ts +++ b/libs/common/src/lib/interfaces/admin-market-data.interface.ts @@ -22,4 +22,5 @@ export interface AdminMarketDataItem { name: string; sectorsCount: number; symbol: string; + watchedByCount: number; } diff --git a/package-lock.json b/package-lock.json index 4dfb2eb53..4557a6c61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.155.0", + "version": "2.156.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.155.0", + "version": "2.156.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { @@ -76,7 +76,7 @@ "ng-extract-i18n-merge": "2.14.3", "ngx-device-detector": "9.0.0", "ngx-markdown": "19.0.0", - "ngx-skeleton-loader": "10.0.0", + "ngx-skeleton-loader": "11.0.0", "ngx-stripe": "19.0.0", "open-color": "1.9.1", "papaparse": "5.3.1", @@ -25927,16 +25927,16 @@ } }, "node_modules/ngx-skeleton-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ngx-skeleton-loader/-/ngx-skeleton-loader-10.0.0.tgz", - "integrity": "sha512-TYrWLrdRtzoZoPzurNDUJdAbdyplqgyDztCefEi+clHl5MSumwG4NrGxZC1OVxz7RitomhnF7wTM8T/j+tdwXw==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/ngx-skeleton-loader/-/ngx-skeleton-loader-11.0.0.tgz", + "integrity": "sha512-SVWgrePXqIX0ToLf/G0Ce+aE6qXCKl/c+9arV61eiFlrqXXaMlXCkVAYT/wpK+4xgVMHXvQha1mnG9YcKVHQ1A==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/common": ">=18.0.0", - "@angular/core": ">=18.0.0" + "@angular/common": ">=19.0.0", + "@angular/core": ">=19.0.0" } }, "node_modules/ngx-stripe": { diff --git a/package.json b/package.json index ca6c0e923..111232548 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.155.0", + "version": "2.156.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", @@ -122,7 +122,7 @@ "ng-extract-i18n-merge": "2.14.3", "ngx-device-detector": "9.0.0", "ngx-markdown": "19.0.0", - "ngx-skeleton-loader": "10.0.0", + "ngx-skeleton-loader": "11.0.0", "ngx-stripe": "19.0.0", "open-color": "1.9.1", "papaparse": "5.3.1",