Compare commits
35 Commits
Author | SHA1 | Date | |
---|---|---|---|
b404858904 | |||
7ec033577f | |||
c8ca82b803 | |||
5db2faa17d | |||
1605fb8d48 | |||
b6a7804a26 | |||
de31381fd9 | |||
0d92b8d8bb | |||
7c6ff776d9 | |||
e37a34ed6c | |||
c4d9c00f92 | |||
3af8be89e3 | |||
0f1db71604 | |||
fce9e7fb0c | |||
6301c0c21c | |||
30bb484d5a | |||
f88ee5e5a0 | |||
73b5030972 | |||
a69a3442ab | |||
d4dff744b5 | |||
62c93ad99d | |||
1e42d6bffa | |||
002ac29f2f | |||
20ccf389e9 | |||
a2f99ed4d2 | |||
cc6320acfd | |||
261a0fb0b9 | |||
cfc05cce41 | |||
1f15b70134 | |||
a5b49b286d | |||
f3333f24da | |||
cad8f0d0e2 | |||
edd3e75730 | |||
ab68c2c69a | |||
cbb95f21a3 |
2
.github/workflows/build-code.yml
vendored
2
.github/workflows/build-code.yml
vendored
@ -10,7 +10,7 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
node_version:
|
||||
- 18
|
||||
- 16
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
79
CHANGELOG.md
79
CHANGELOG.md
@ -5,6 +5,83 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## 1.246.0 - 2023-03-18
|
||||
|
||||
### Added
|
||||
|
||||
- Added support for asset and asset sub class to the `EOD_HISTORICAL_DATA` data source type
|
||||
- Added `isin` to the asset profile model
|
||||
|
||||
### Changed
|
||||
|
||||
- Extended the _Trackinsight_ data enhancer for asset profile data by `isin`
|
||||
- Improved the language localization for _Gather Data_
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed the border color in the _FIRE_ calculator (dark mode)
|
||||
|
||||
## 1.245.0 - 2023-03-12
|
||||
|
||||
### Added
|
||||
|
||||
- Added the search functionality for the `EOD_HISTORICAL_DATA` data source type
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved the usability of the _FIRE_ calculator
|
||||
- Improved the exchange rate service for a specific date used in activities with a manual currency
|
||||
- Upgraded `ngx-device-detector` from version `3.0.0` to `5.0.1`
|
||||
|
||||
## 1.244.0 - 2023-03-09
|
||||
|
||||
### Added
|
||||
|
||||
- Extended the _FIRE_ calculator by a retirement date setting
|
||||
|
||||
## 1.243.0 - 2023-03-08
|
||||
|
||||
### Added
|
||||
|
||||
- Added `COINGECKO` as a default to `DATA_SOURCES`
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved the validation of the manual currency for the activity fee and unit price
|
||||
- Harmonized the axis style of charts
|
||||
- Made setting `NODE_ENV: production` optional (to avoid `ENOENT: no such file or directory` errors on startup)
|
||||
- Removed the environment variable `ENABLE_FEATURE_CUSTOM_SYMBOLS`
|
||||
|
||||
## 1.242.0 - 2023-03-04
|
||||
|
||||
### Changed
|
||||
|
||||
- Simplified the database seeding
|
||||
- Upgraded `ngx-skeleton-loader` from version `5.0.0` to `7.0.0`
|
||||
|
||||
### Fixed
|
||||
|
||||
- Downgraded `Node.js` from version `18` to `16` (Dockerfile) to resolve `SIGSEGV` (segmentation fault) during the `prisma` database migrations (see https://github.com/prisma/prisma/issues/10649)
|
||||
|
||||
## 1.241.0 - 2023-03-01
|
||||
|
||||
### Changed
|
||||
|
||||
- Filtered activities with type `ITEM` from search results
|
||||
- Considered the user's language in the _Stripe_ checkout
|
||||
- Upgraded the _Stripe_ dependencies
|
||||
- Upgraded `twitter-api-v2` from version `1.10.3` to `1.14.2`
|
||||
|
||||
## 1.240.0 - 2023-02-26
|
||||
|
||||
### Added
|
||||
|
||||
- Supported a manual currency for the activity unit price
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed the feature graphic of the _Ghostfolio meets Umbrel_ blog post
|
||||
|
||||
## 1.239.0 - 2023-02-25
|
||||
|
||||
### Added
|
||||
@ -1829,7 +1906,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
### Changed
|
||||
|
||||
- Extended the historical data view in the admin control panel
|
||||
- Upgraded _Stripe_ dependencies
|
||||
- Upgraded the _Stripe_ dependencies
|
||||
- Upgraded `prisma` from version `3.7.0` to `3.8.1`
|
||||
|
||||
### Fixed
|
||||
|
@ -1,4 +1,4 @@
|
||||
FROM --platform=$BUILDPLATFORM node:18-slim as builder
|
||||
FROM --platform=$BUILDPLATFORM node:16-slim as builder
|
||||
|
||||
# Build application and add additional files
|
||||
WORKDIR /ghostfolio
|
||||
@ -50,7 +50,7 @@ COPY package.json /ghostfolio/dist/apps/api
|
||||
RUN yarn database:generate-typings
|
||||
|
||||
# Image to run, copy everything needed from builder
|
||||
FROM node:18-slim
|
||||
FROM node:16-slim
|
||||
RUN apt update && apt install -y \
|
||||
openssl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
39
README.md
39
README.md
@ -85,20 +85,19 @@ We provide official container images hosted on [Docker Hub](https://hub.docker.c
|
||||
|
||||
### Supported Environment Variables
|
||||
|
||||
| Name | Default Value | Description |
|
||||
| ------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `ACCESS_TOKEN_SALT` | | A random string used as salt for access tokens |
|
||||
| `BASE_CURRENCY` | `USD` | The base currency of the Ghostfolio application.<br />`AUD` \| `CAD` \| `CNY` \| `EUR` \| `GBP` \| `JPY` \| `RUB` \| `USD`<br />Caution: Only set if you intend to track cryptocurrencies in a non-`USD` currency. This cannot be changed later! |
|
||||
| `DATABASE_URL` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` |
|
||||
| `HOST` | `0.0.0.0` | The host where the Ghostfolio application will run on |
|
||||
| `JWT_SECRET_KEY` | | A random string used for _JSON Web Tokens_ (JWT) |
|
||||
| `PORT` | `3333` | The port where the Ghostfolio application will run on |
|
||||
| `POSTGRES_DB` | | The name of the _PostgreSQL_ database |
|
||||
| `POSTGRES_PASSWORD` | | The password of the _PostgreSQL_ database |
|
||||
| `POSTGRES_USER` | | The user of the _PostgreSQL_ database |
|
||||
| `REDIS_HOST` | | The host where _Redis_ is running |
|
||||
| `REDIS_PASSWORD` | | The password of _Redis_ |
|
||||
| `REDIS_PORT` | | The port where _Redis_ is running |
|
||||
| Name | Default Value | Description |
|
||||
| ------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `ACCESS_TOKEN_SALT` | | A random string used as salt for access tokens |
|
||||
| `DATABASE_URL` | | The database connection URL, e.g. `postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}?sslmode=prefer` |
|
||||
| `HOST` | `0.0.0.0` | The host where the Ghostfolio application will run on |
|
||||
| `JWT_SECRET_KEY` | | A random string used for _JSON Web Tokens_ (JWT) |
|
||||
| `PORT` | `3333` | The port where the Ghostfolio application will run on |
|
||||
| `POSTGRES_DB` | | The name of the _PostgreSQL_ database |
|
||||
| `POSTGRES_PASSWORD` | | The password of the _PostgreSQL_ database |
|
||||
| `POSTGRES_USER` | | The user of the _PostgreSQL_ database |
|
||||
| `REDIS_HOST` | | The host where _Redis_ is running |
|
||||
| `REDIS_PASSWORD` | | The password of _Redis_ |
|
||||
| `REDIS_PORT` | | The port where _Redis_ is running |
|
||||
|
||||
### Run with Docker Compose
|
||||
|
||||
@ -126,13 +125,10 @@ docker-compose --env-file ./.env -f docker/docker-compose.build.yml build
|
||||
docker-compose --env-file ./.env -f docker/docker-compose.build.yml up -d
|
||||
```
|
||||
|
||||
#### Fetch Historical Data
|
||||
|
||||
Open http://localhost:3333 in your browser and accomplish these steps:
|
||||
#### Setup
|
||||
|
||||
1. Open http://localhost:3333 in your browser
|
||||
1. Create a new user via _Get Started_ (this first user will get the role `ADMIN`)
|
||||
1. Go to the _Market Data_ tab in the _Admin Control Panel_ and click _Gather All Data_ to fetch historical data
|
||||
1. Click _Sign out_ and check out the _Live Demo_
|
||||
|
||||
#### Upgrade Version
|
||||
|
||||
@ -159,11 +155,10 @@ Please follow the instructions of the Ghostfolio [Unraid Community App](https://
|
||||
1. Run `yarn install`
|
||||
1. Run `yarn build:dev` to build the source code including the assets
|
||||
1. Run `docker-compose --env-file ./.env -f docker/docker-compose.dev.yml up -d` to start [PostgreSQL](https://www.postgresql.org) and [Redis](https://redis.io)
|
||||
1. Run `yarn database:setup` to initialize the database schema and populate your database with (example) data
|
||||
1. Run `yarn database:setup` to initialize the database schema
|
||||
1. Start the server and the client (see [_Development_](#Development))
|
||||
1. Open http://localhost:4200/en in your browser
|
||||
1. Create a new user via _Get Started_ (this first user will get the role `ADMIN`)
|
||||
1. Go to the _Market Data_ tab in the _Admin Control Panel_ and click _Gather All Data_ to fetch historical data
|
||||
1. Click _Sign out_ and check out the _Live Demo_
|
||||
|
||||
### Start Server
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service';
|
||||
import { RedactValuesInResponseInterceptor } from '@ghostfolio/api/interceptors/redact-values-in-response.interceptor';
|
||||
import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service';
|
||||
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
|
||||
import { Accounts } from '@ghostfolio/common/interfaces';
|
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
|
||||
import type {
|
||||
@ -83,7 +84,7 @@ export class AccountController {
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@UseInterceptors(RedactValuesInResponseInterceptor)
|
||||
public async getAllAccounts(
|
||||
@Headers('impersonation-id') impersonationId
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId
|
||||
): Promise<Accounts> {
|
||||
const impersonationUserId =
|
||||
await this.impersonationService.validateImpersonationId(
|
||||
@ -101,7 +102,7 @@ export class AccountController {
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@UseInterceptors(RedactValuesInResponseInterceptor)
|
||||
public async getAccountById(
|
||||
@Headers('impersonation-id') impersonationId,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId,
|
||||
@Param('id') id: string
|
||||
): Promise<AccountWithValue> {
|
||||
const impersonationUserId =
|
||||
|
@ -231,12 +231,27 @@ export class AdminService {
|
||||
}
|
||||
|
||||
private async getUsersWithAnalytics(): Promise<AdminData['users']> {
|
||||
const usersWithAnalytics = await this.prismaService.user.findMany({
|
||||
orderBy: {
|
||||
let orderBy: any = {
|
||||
createdAt: 'desc'
|
||||
};
|
||||
let where;
|
||||
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
orderBy = {
|
||||
Analytics: {
|
||||
updatedAt: 'desc'
|
||||
}
|
||||
},
|
||||
};
|
||||
where = {
|
||||
NOT: {
|
||||
Analytics: null
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const usersWithAnalytics = await this.prismaService.user.findMany({
|
||||
orderBy,
|
||||
where,
|
||||
select: {
|
||||
_count: {
|
||||
select: { Account: true, Order: true }
|
||||
@ -252,19 +267,16 @@ export class AdminService {
|
||||
id: true,
|
||||
Subscription: true
|
||||
},
|
||||
take: 30,
|
||||
where: {
|
||||
NOT: {
|
||||
Analytics: null
|
||||
}
|
||||
}
|
||||
take: 30
|
||||
});
|
||||
|
||||
return usersWithAnalytics.map(
|
||||
({ _count, Analytics, createdAt, id, Subscription }) => {
|
||||
const daysSinceRegistration =
|
||||
differenceInDays(new Date(), createdAt) + 1;
|
||||
const engagement = Analytics.activityCount / daysSinceRegistration;
|
||||
const engagement = Analytics
|
||||
? Analytics.activityCount / daysSinceRegistration
|
||||
: undefined;
|
||||
|
||||
const subscription = this.configurationService.get(
|
||||
'ENABLE_FEATURE_SUBSCRIPTION'
|
||||
@ -278,8 +290,8 @@ export class AdminService {
|
||||
id,
|
||||
subscription,
|
||||
accountCount: _count.Account || 0,
|
||||
country: Analytics.country,
|
||||
lastActivity: Analytics.updatedAt,
|
||||
country: Analytics?.country,
|
||||
lastActivity: Analytics?.updatedAt,
|
||||
transactionCount: _count.Order || 0
|
||||
};
|
||||
}
|
||||
|
@ -1,33 +1,46 @@
|
||||
import { UserService } from '@ghostfolio/api/app/user/user.service';
|
||||
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
|
||||
import { PrismaService } from '@ghostfolio/api/services/prisma.service';
|
||||
import { HEADER_KEY_TIMEZONE } from '@ghostfolio/common/config';
|
||||
import { Injectable, UnauthorizedException } from '@nestjs/common';
|
||||
import { PassportStrategy } from '@nestjs/passport';
|
||||
import * as countriesAndTimezones from 'countries-and-timezones';
|
||||
import { ExtractJwt, Strategy } from 'passport-jwt';
|
||||
|
||||
@Injectable()
|
||||
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
|
||||
public constructor(
|
||||
readonly configurationService: ConfigurationService,
|
||||
private readonly configurationService: ConfigurationService,
|
||||
private readonly prismaService: PrismaService,
|
||||
private readonly userService: UserService
|
||||
) {
|
||||
super({
|
||||
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
|
||||
passReqToCallback: true,
|
||||
secretOrKey: configurationService.get('JWT_SECRET_KEY')
|
||||
});
|
||||
}
|
||||
|
||||
public async validate({ id }: { id: string }) {
|
||||
public async validate(request: Request, { id }: { id: string }) {
|
||||
try {
|
||||
const timezone = request.headers[HEADER_KEY_TIMEZONE.toLowerCase()];
|
||||
const user = await this.userService.user({ id });
|
||||
|
||||
if (user) {
|
||||
await this.prismaService.analytics.upsert({
|
||||
create: { User: { connect: { id: user.id } } },
|
||||
update: { activityCount: { increment: 1 }, updatedAt: new Date() },
|
||||
where: { userId: user.id }
|
||||
});
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
const country =
|
||||
countriesAndTimezones.getCountryForTimezone(timezone)?.id;
|
||||
|
||||
await this.prismaService.analytics.upsert({
|
||||
create: { country, User: { connect: { id: user.id } } },
|
||||
update: {
|
||||
country,
|
||||
activityCount: { increment: 1 },
|
||||
updatedAt: new Date()
|
||||
},
|
||||
where: { userId: user.id }
|
||||
});
|
||||
}
|
||||
|
||||
return user;
|
||||
} else {
|
||||
|
@ -1,6 +1,13 @@
|
||||
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { Controller, Get, Param, UseGuards } from '@nestjs/common';
|
||||
import {
|
||||
Controller,
|
||||
Get,
|
||||
HttpException,
|
||||
Param,
|
||||
UseGuards
|
||||
} from '@nestjs/common';
|
||||
import { AuthGuard } from '@nestjs/passport';
|
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
|
||||
|
||||
import { ExchangeRateService } from './exchange-rate.service';
|
||||
|
||||
@ -18,9 +25,18 @@ export class ExchangeRateController {
|
||||
): Promise<IDataProviderHistoricalResponse> {
|
||||
const date = new Date(dateString);
|
||||
|
||||
return this.exchangeRateService.getExchangeRate({
|
||||
const exchangeRate = await this.exchangeRateService.getExchangeRate({
|
||||
date,
|
||||
symbol
|
||||
});
|
||||
|
||||
if (exchangeRate) {
|
||||
return { marketPrice: exchangeRate };
|
||||
}
|
||||
|
||||
throw new HttpException(
|
||||
getReasonPhrase(StatusCodes.NOT_FOUND),
|
||||
StatusCodes.NOT_FOUND
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
|
||||
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
@Injectable()
|
||||
@ -14,16 +13,14 @@ export class ExchangeRateService {
|
||||
}: {
|
||||
date: Date;
|
||||
symbol: string;
|
||||
}): Promise<IDataProviderHistoricalResponse> {
|
||||
}): Promise<number> {
|
||||
const [currency1, currency2] = symbol.split('-');
|
||||
|
||||
const marketPrice = await this.exchangeRateDataService.toCurrencyAtDate(
|
||||
return this.exchangeRateDataService.toCurrencyAtDate(
|
||||
1,
|
||||
currency1,
|
||||
currency2,
|
||||
date
|
||||
);
|
||||
|
||||
return { marketPrice };
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
import { environment } from '@ghostfolio/api/environments/environment';
|
||||
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
|
||||
import { DEFAULT_LANGUAGE_CODE } from '@ghostfolio/common/config';
|
||||
import { DATE_FORMAT } from '@ghostfolio/common/helper';
|
||||
import { Injectable, NestMiddleware } from '@nestjs/common';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import { format } from 'date-fns';
|
||||
import { NextFunction, Request, Response } from 'express';
|
||||
|
||||
@ -18,18 +18,10 @@ export class FrontendMiddleware implements NestMiddleware {
|
||||
public indexHtmlIt = '';
|
||||
public indexHtmlNl = '';
|
||||
public indexHtmlPt = '';
|
||||
public isProduction: boolean;
|
||||
|
||||
public constructor(
|
||||
private readonly configService: ConfigService,
|
||||
private readonly configurationService: ConfigurationService
|
||||
) {
|
||||
const NODE_ENV =
|
||||
this.configService.get<'development' | 'production'>('NODE_ENV') ??
|
||||
'development';
|
||||
|
||||
this.isProduction = NODE_ENV === 'production';
|
||||
|
||||
try {
|
||||
this.indexHtmlDe = fs.readFileSync(
|
||||
this.getPathOfIndexHtmlFile('de'),
|
||||
@ -91,16 +83,16 @@ export class FrontendMiddleware implements NestMiddleware {
|
||||
featureGraphicPath = 'assets/images/blog/ghostfolio-x-sackgeld.png';
|
||||
title = `Ghostfolio auf Sackgeld.com vorgestellt - ${title}`;
|
||||
} else if (
|
||||
request.path.startsWith('/de/blog/2023/02/ghostfolio-meets-umbrel')
|
||||
request.path.startsWith('/en/blog/2023/02/ghostfolio-meets-umbrel')
|
||||
) {
|
||||
featureGraphicPath = 'assets/images/blog/ghostfolio-meets-umbrel.png';
|
||||
featureGraphicPath = 'assets/images/blog/ghostfolio-x-umbrel.png';
|
||||
title = `Ghostfolio meets Umbrel - ${title}`;
|
||||
}
|
||||
|
||||
if (
|
||||
request.path.startsWith('/api/') ||
|
||||
this.isFileRequest(request.url) ||
|
||||
!this.isProduction
|
||||
!environment.production
|
||||
) {
|
||||
// Skip
|
||||
next();
|
||||
|
@ -254,6 +254,7 @@ export class ImportService {
|
||||
countries: null,
|
||||
createdAt: undefined,
|
||||
id: undefined,
|
||||
isin: null,
|
||||
name: null,
|
||||
scraperConfiguration: null,
|
||||
sectors: null,
|
||||
|
@ -6,8 +6,8 @@ import { PrismaService } from '@ghostfolio/api/services/prisma.service';
|
||||
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
|
||||
import { TagService } from '@ghostfolio/api/services/tag/tag.service';
|
||||
import {
|
||||
DEMO_USER_ID,
|
||||
PROPERTY_COUNTRIES_OF_SUBSCRIBERS,
|
||||
PROPERTY_DEMO_USER_ID,
|
||||
PROPERTY_IS_READ_ONLY_MODE,
|
||||
PROPERTY_SLACK_COMMUNITY_USERS,
|
||||
PROPERTY_STRIPE_CONFIG,
|
||||
@ -59,9 +59,7 @@ export class InfoService {
|
||||
}
|
||||
|
||||
if (this.configurationService.get('ENABLE_FEATURE_FEAR_AND_GREED_INDEX')) {
|
||||
if (
|
||||
this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true
|
||||
) {
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
info.fearAndGreedDataSource = encodeDataSource(
|
||||
ghostfolioFearAndGreedIndexDataSource
|
||||
);
|
||||
@ -120,7 +118,7 @@ export class InfoService {
|
||||
baseCurrency: this.configurationService.get('BASE_CURRENCY'),
|
||||
benchmarks: await this.benchmarkService.getBenchmarkAssetProfiles(),
|
||||
currencies: this.exchangeRateDataService.getCurrencies(),
|
||||
demoAuthToken: this.getDemoAuthToken(),
|
||||
demoAuthToken: await this.getDemoAuthToken(),
|
||||
statistics: await this.getStatistics(),
|
||||
subscriptions: await this.getSubscriptions(),
|
||||
tags: await this.tagService.get()
|
||||
@ -248,10 +246,18 @@ export class InfoService {
|
||||
)) as string;
|
||||
}
|
||||
|
||||
private getDemoAuthToken() {
|
||||
return this.jwtService.sign({
|
||||
id: DEMO_USER_ID
|
||||
});
|
||||
private async getDemoAuthToken() {
|
||||
const demoUserId = (await this.propertyService.getByKey(
|
||||
PROPERTY_DEMO_USER_ID
|
||||
)) as string;
|
||||
|
||||
if (demoUserId) {
|
||||
return this.jwtService.sign({
|
||||
id: demoUserId
|
||||
});
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private async getStatistics() {
|
||||
|
@ -3,6 +3,7 @@ import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interce
|
||||
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response.interceptor';
|
||||
import { ApiService } from '@ghostfolio/api/services/api/api.service';
|
||||
import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service';
|
||||
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
|
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
|
||||
import type { RequestWithUser } from '@ghostfolio/common/types';
|
||||
import {
|
||||
@ -66,7 +67,7 @@ export class OrderController {
|
||||
@UseInterceptors(RedactValuesInResponseInterceptor)
|
||||
@UseInterceptors(TransformDataSourceInResponseInterceptor)
|
||||
public async getAllOrders(
|
||||
@Headers('impersonation-id') impersonationId,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('tags') filterByTags?: string
|
||||
|
@ -10,6 +10,7 @@ import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interc
|
||||
import { ApiService } from '@ghostfolio/api/services/api/api.service';
|
||||
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service';
|
||||
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
|
||||
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
|
||||
import {
|
||||
PortfolioDetails,
|
||||
PortfolioDividends,
|
||||
@ -65,7 +66,7 @@ export class PortfolioController {
|
||||
@UseInterceptors(RedactValuesInResponseInterceptor)
|
||||
@UseInterceptors(TransformDataSourceInResponseInterceptor)
|
||||
public async getDetails(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('range') dateRange: DateRange = 'max',
|
||||
@ -189,7 +190,7 @@ export class PortfolioController {
|
||||
@Get('dividends')
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
public async getDividends(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('groupBy') groupBy?: GroupBy,
|
||||
@ -239,7 +240,7 @@ export class PortfolioController {
|
||||
@Get('investments')
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
public async getInvestments(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('groupBy') groupBy?: GroupBy,
|
||||
@ -291,7 +292,7 @@ export class PortfolioController {
|
||||
@UseInterceptors(TransformDataSourceInResponseInterceptor)
|
||||
@Version('2')
|
||||
public async getPerformanceV2(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('range') dateRange: DateRange = 'max',
|
||||
@ -360,7 +361,7 @@ export class PortfolioController {
|
||||
@UseInterceptors(RedactValuesInResponseInterceptor)
|
||||
@UseInterceptors(TransformDataSourceInResponseInterceptor)
|
||||
public async getPositions(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Query('accounts') filterByAccounts?: string,
|
||||
@Query('assetClasses') filterByAssetClasses?: string,
|
||||
@Query('range') dateRange: DateRange = 'max',
|
||||
@ -451,7 +452,7 @@ export class PortfolioController {
|
||||
@UseInterceptors(TransformDataSourceInResponseInterceptor)
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
public async getPosition(
|
||||
@Headers('impersonation-id') impersonationId: string,
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
|
||||
@Param('dataSource') dataSource,
|
||||
@Param('symbol') symbol
|
||||
): Promise<PortfolioPositionDetail> {
|
||||
@ -474,7 +475,7 @@ export class PortfolioController {
|
||||
@Get('report')
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
public async getReport(
|
||||
@Headers('impersonation-id') impersonationId: string
|
||||
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string
|
||||
): Promise<PortfolioReport> {
|
||||
const report = await this.portfolioService.getReport(impersonationId);
|
||||
|
||||
|
@ -117,7 +117,7 @@ export class SubscriptionController {
|
||||
return await this.subscriptionService.createCheckoutSession({
|
||||
couponId,
|
||||
priceId,
|
||||
userId: this.request.user.id
|
||||
user: this.request.user
|
||||
});
|
||||
} catch (error) {
|
||||
Logger.error(error, 'SubscriptionController');
|
||||
|
@ -4,6 +4,7 @@ import {
|
||||
DEFAULT_LANGUAGE_CODE,
|
||||
PROPERTY_STRIPE_CONFIG
|
||||
} from '@ghostfolio/common/config';
|
||||
import { UserWithSettings } from '@ghostfolio/common/interfaces';
|
||||
import { Subscription as SubscriptionInterface } from '@ghostfolio/common/interfaces/subscription.interface';
|
||||
import { SubscriptionType } from '@ghostfolio/common/types/subscription.type';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
@ -23,7 +24,7 @@ export class SubscriptionService {
|
||||
this.stripe = new Stripe(
|
||||
this.configurationService.get('STRIPE_SECRET_KEY'),
|
||||
{
|
||||
apiVersion: '2020-08-27'
|
||||
apiVersion: '2022-11-15'
|
||||
}
|
||||
);
|
||||
}
|
||||
@ -31,17 +32,17 @@ export class SubscriptionService {
|
||||
public async createCheckoutSession({
|
||||
couponId,
|
||||
priceId,
|
||||
userId
|
||||
user
|
||||
}: {
|
||||
couponId?: string;
|
||||
priceId: string;
|
||||
userId: string;
|
||||
user: UserWithSettings;
|
||||
}) {
|
||||
const checkoutSessionCreateParams: Stripe.Checkout.SessionCreateParams = {
|
||||
cancel_url: `${this.configurationService.get(
|
||||
'ROOT_URL'
|
||||
)}/${DEFAULT_LANGUAGE_CODE}/account`,
|
||||
client_reference_id: userId,
|
||||
cancel_url: `${this.configurationService.get('ROOT_URL')}/${
|
||||
user.Settings?.settings?.language ?? DEFAULT_LANGUAGE_CODE
|
||||
}/account`,
|
||||
client_reference_id: user.id,
|
||||
line_items: [
|
||||
{
|
||||
price: priceId,
|
||||
@ -116,10 +117,6 @@ export class SubscriptionService {
|
||||
userId: session.client_reference_id
|
||||
});
|
||||
|
||||
await this.stripe.customers.update(session.customer as string, {
|
||||
description: session.client_reference_id
|
||||
});
|
||||
|
||||
return session.client_reference_id;
|
||||
} catch (error) {
|
||||
Logger.error(error, 'SubscriptionService');
|
||||
|
@ -1,15 +1,18 @@
|
||||
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request.interceptor';
|
||||
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response.interceptor';
|
||||
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import type { RequestWithUser } from '@ghostfolio/common/types';
|
||||
import {
|
||||
Controller,
|
||||
Get,
|
||||
HttpException,
|
||||
Inject,
|
||||
Param,
|
||||
Query,
|
||||
UseGuards,
|
||||
UseInterceptors
|
||||
} from '@nestjs/common';
|
||||
import { REQUEST } from '@nestjs/core';
|
||||
import { AuthGuard } from '@nestjs/passport';
|
||||
import { DataSource } from '@prisma/client';
|
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
|
||||
@ -21,7 +24,10 @@ import { SymbolService } from './symbol.service';
|
||||
|
||||
@Controller('symbol')
|
||||
export class SymbolController {
|
||||
public constructor(private readonly symbolService: SymbolService) {}
|
||||
public constructor(
|
||||
@Inject(REQUEST) private readonly request: RequestWithUser,
|
||||
private readonly symbolService: SymbolService
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Must be before /:symbol
|
||||
@ -33,7 +39,10 @@ export class SymbolController {
|
||||
@Query() { query = '' }
|
||||
): Promise<{ items: LookupItem[] }> {
|
||||
try {
|
||||
return this.symbolService.lookup(query.toLowerCase());
|
||||
return this.symbolService.lookup({
|
||||
query: query.toLowerCase(),
|
||||
user: this.request.user
|
||||
});
|
||||
} catch {
|
||||
throw new HttpException(
|
||||
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
|
||||
|
@ -5,7 +5,10 @@ import {
|
||||
} from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { MarketDataService } from '@ghostfolio/api/services/market-data.service';
|
||||
import { DATE_FORMAT } from '@ghostfolio/common/helper';
|
||||
import { HistoricalDataItem } from '@ghostfolio/common/interfaces';
|
||||
import {
|
||||
HistoricalDataItem,
|
||||
UserWithSettings
|
||||
} from '@ghostfolio/common/interfaces';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { format, subDays } from 'date-fns';
|
||||
|
||||
@ -79,15 +82,24 @@ export class SymbolService {
|
||||
};
|
||||
}
|
||||
|
||||
public async lookup(aQuery: string): Promise<{ items: LookupItem[] }> {
|
||||
public async lookup({
|
||||
query,
|
||||
user
|
||||
}: {
|
||||
query: string;
|
||||
user: UserWithSettings;
|
||||
}): Promise<{ items: LookupItem[] }> {
|
||||
const results: { items: LookupItem[] } = { items: [] };
|
||||
|
||||
if (!aQuery) {
|
||||
if (!query) {
|
||||
return results;
|
||||
}
|
||||
|
||||
try {
|
||||
const { items } = await this.dataProviderService.search(aQuery);
|
||||
const { items } = await this.dataProviderService.search({
|
||||
query,
|
||||
user
|
||||
});
|
||||
results.items = items;
|
||||
return results;
|
||||
} catch (error) {
|
||||
|
@ -1,7 +0,0 @@
|
||||
import { IsOptional, IsString } from 'class-validator';
|
||||
|
||||
export class CreateUserDto {
|
||||
@IsString()
|
||||
@IsOptional()
|
||||
country?: string;
|
||||
}
|
@ -6,12 +6,17 @@ import type {
|
||||
import {
|
||||
IsBoolean,
|
||||
IsIn,
|
||||
IsISO8601,
|
||||
IsNumber,
|
||||
IsOptional,
|
||||
IsString
|
||||
} from 'class-validator';
|
||||
|
||||
export class UpdateUserSettingDto {
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
annualInterestRate?: number;
|
||||
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
baseCurrency?: string;
|
||||
@ -48,6 +53,14 @@ export class UpdateUserSettingDto {
|
||||
@IsOptional()
|
||||
locale?: string;
|
||||
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
projectedTotalAmount?: number;
|
||||
|
||||
@IsISO8601()
|
||||
@IsOptional()
|
||||
retirementDate?: string;
|
||||
|
||||
@IsNumber()
|
||||
@IsOptional()
|
||||
savingsRate?: number;
|
||||
|
@ -22,7 +22,6 @@ import { User as UserModel } from '@prisma/client';
|
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
|
||||
import { size } from 'lodash';
|
||||
|
||||
import { CreateUserDto } from './create-user.dto';
|
||||
import { UserItem } from './interfaces/user-item.interface';
|
||||
import { UpdateUserSettingDto } from './update-user-setting.dto';
|
||||
import { UserService } from './user.service';
|
||||
@ -66,7 +65,7 @@ export class UserController {
|
||||
}
|
||||
|
||||
@Post()
|
||||
public async signupUser(@Body() data: CreateUserDto): Promise<UserItem> {
|
||||
public async signupUser(): Promise<UserItem> {
|
||||
const isUserSignupEnabled =
|
||||
await this.propertyService.isUserSignupEnabled();
|
||||
|
||||
@ -80,7 +79,6 @@ export class UserController {
|
||||
const hasAdmin = await this.userService.hasAdmin();
|
||||
|
||||
const { accessToken, id, role } = await this.userService.createUser({
|
||||
country: data.country,
|
||||
data: { role: hasAdmin ? 'USER' : 'ADMIN' }
|
||||
});
|
||||
|
||||
|
@ -18,8 +18,6 @@ import { Injectable } from '@nestjs/common';
|
||||
import { Prisma, Role, User } from '@prisma/client';
|
||||
import { sortBy } from 'lodash';
|
||||
|
||||
import { CreateUserDto } from './create-user.dto';
|
||||
|
||||
const crypto = require('crypto');
|
||||
|
||||
@Injectable()
|
||||
@ -234,9 +232,10 @@ export class UserService {
|
||||
}
|
||||
|
||||
public async createUser({
|
||||
country,
|
||||
data
|
||||
}: CreateUserDto & { data: Prisma.UserCreateInput }): Promise<User> {
|
||||
}: {
|
||||
data: Prisma.UserCreateInput;
|
||||
}): Promise<User> {
|
||||
if (!data?.provider) {
|
||||
data.provider = 'ANONYMOUS';
|
||||
}
|
||||
@ -264,7 +263,6 @@ export class UserService {
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
await this.prismaService.analytics.create({
|
||||
data: {
|
||||
country,
|
||||
User: { connect: { id: user.id } }
|
||||
}
|
||||
});
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { UserService } from '@ghostfolio/api/app/user/user.service';
|
||||
import { redactAttributes } from '@ghostfolio/api/helper/object.helper';
|
||||
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
|
||||
import {
|
||||
CallHandler,
|
||||
ExecutionContext,
|
||||
@ -22,7 +23,8 @@ export class RedactValuesInResponseInterceptor<T>
|
||||
return next.handle().pipe(
|
||||
map((data: any) => {
|
||||
const request = context.switchToHttp().getRequest();
|
||||
const hasImpersonationId = !!request.headers?.['impersonation-id'];
|
||||
const hasImpersonationId =
|
||||
!!request.headers?.[HEADER_KEY_IMPERSONATION.toLowerCase()];
|
||||
|
||||
if (
|
||||
hasImpersonationId ||
|
||||
|
@ -24,7 +24,7 @@ export class TransformDataSourceInRequestInterceptor<T>
|
||||
const http = context.switchToHttp();
|
||||
const request = http.getRequest();
|
||||
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true) {
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
if (request.body.dataSource) {
|
||||
request.body.dataSource = decodeDataSource(request.body.dataSource);
|
||||
}
|
||||
|
@ -26,9 +26,7 @@ export class TransformDataSourceInResponseInterceptor<T>
|
||||
): Observable<any> {
|
||||
return next.handle().pipe(
|
||||
map((data: any) => {
|
||||
if (
|
||||
this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') === true
|
||||
) {
|
||||
if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) {
|
||||
data = redactAttributes({
|
||||
options: [
|
||||
{
|
||||
|
@ -10,15 +10,10 @@ async function bootstrap() {
|
||||
const configApp = await NestFactory.create(AppModule);
|
||||
const configService = configApp.get<ConfigService>(ConfigService);
|
||||
|
||||
const NODE_ENV =
|
||||
configService.get<'development' | 'production'>('NODE_ENV') ??
|
||||
'development';
|
||||
|
||||
const app = await NestFactory.create(AppModule, {
|
||||
logger:
|
||||
NODE_ENV === 'production'
|
||||
? ['error', 'log', 'warn']
|
||||
: ['debug', 'error', 'log', 'verbose', 'warn']
|
||||
logger: environment.production
|
||||
? ['error', 'log', 'warn']
|
||||
: ['debug', 'error', 'log', 'verbose', 'warn']
|
||||
});
|
||||
app.enableCors();
|
||||
app.enableVersioning({
|
||||
|
@ -19,10 +19,9 @@ export class ConfigurationService {
|
||||
CACHE_TTL: num({ default: 1 }),
|
||||
DATA_SOURCE_PRIMARY: str({ default: DataSource.YAHOO }),
|
||||
DATA_SOURCES: json({
|
||||
default: [DataSource.MANUAL, DataSource.YAHOO]
|
||||
default: [DataSource.COINGECKO, DataSource.MANUAL, DataSource.YAHOO]
|
||||
}),
|
||||
ENABLE_FEATURE_BLOG: bool({ default: false }),
|
||||
ENABLE_FEATURE_CUSTOM_SYMBOLS: bool({ default: false }),
|
||||
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: bool({ default: false }),
|
||||
ENABLE_FEATURE_READ_ONLY_MODE: bool({ default: false }),
|
||||
ENABLE_FEATURE_SOCIAL_LOGIN: bool({ default: false }),
|
||||
|
@ -152,10 +152,11 @@ export class DataGatheringService {
|
||||
countries,
|
||||
currency,
|
||||
dataSource,
|
||||
isin,
|
||||
name,
|
||||
sectors,
|
||||
url
|
||||
} = assetProfiles[symbol];
|
||||
} = assetProfile;
|
||||
|
||||
try {
|
||||
await this.prismaService.symbolProfile.upsert({
|
||||
@ -165,6 +166,7 @@ export class DataGatheringService {
|
||||
countries,
|
||||
currency,
|
||||
dataSource,
|
||||
isin,
|
||||
name,
|
||||
sectors,
|
||||
symbol,
|
||||
@ -175,6 +177,7 @@ export class DataGatheringService {
|
||||
assetSubClass,
|
||||
countries,
|
||||
currency,
|
||||
isin,
|
||||
name,
|
||||
sectors,
|
||||
url
|
||||
|
@ -163,10 +163,6 @@ export class CoinGeckoService implements DataProviderInterface {
|
||||
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
|
||||
let items: LookupItem[] = [];
|
||||
|
||||
if (aQuery.length <= 2) {
|
||||
return { items };
|
||||
}
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
`${this.URL}/search?query=${aQuery}`,
|
||||
|
@ -7,7 +7,7 @@ import bent from 'bent';
|
||||
const getJSON = bent('json');
|
||||
|
||||
export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
|
||||
private static baseUrl = 'https://data.trackinsight.com/holdings';
|
||||
private static baseUrl = 'https://data.trackinsight.com';
|
||||
private static countries = require('countries-list/dist/countries.json');
|
||||
private static countriesMapping = {
|
||||
'Russian Federation': 'Russia'
|
||||
@ -32,17 +32,29 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
|
||||
return response;
|
||||
}
|
||||
|
||||
const result = await getJSON(
|
||||
`${TrackinsightDataEnhancerService.baseUrl}/${symbol}.json`
|
||||
const profile = await getJSON(
|
||||
`${TrackinsightDataEnhancerService.baseUrl}/data-api/funds/${symbol}.json`
|
||||
).catch(() => {
|
||||
return {};
|
||||
});
|
||||
|
||||
const isin = profile.isin?.split(';')?.[0];
|
||||
|
||||
if (isin) {
|
||||
response.isin = isin;
|
||||
}
|
||||
|
||||
const holdings = await getJSON(
|
||||
`${TrackinsightDataEnhancerService.baseUrl}/holdings/${symbol}.json`
|
||||
).catch(() => {
|
||||
return getJSON(
|
||||
`${TrackinsightDataEnhancerService.baseUrl}/${
|
||||
symbol.split('.')[0]
|
||||
`${TrackinsightDataEnhancerService.baseUrl}/holdings/${
|
||||
symbol.split('.')?.[0]
|
||||
}.json`
|
||||
);
|
||||
});
|
||||
|
||||
if (result.weight < 0.95) {
|
||||
if (holdings?.weight < 0.95) {
|
||||
// Skip if data is inaccurate
|
||||
return response;
|
||||
}
|
||||
@ -52,7 +64,9 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
|
||||
(response.countries as unknown as Country[]).length === 0
|
||||
) {
|
||||
response.countries = [];
|
||||
for (const [name, value] of Object.entries<any>(result.countries)) {
|
||||
for (const [name, value] of Object.entries<any>(
|
||||
holdings?.countries ?? {}
|
||||
)) {
|
||||
let countryCode: string;
|
||||
|
||||
for (const [key, country] of Object.entries<any>(
|
||||
@ -80,7 +94,9 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface {
|
||||
(response.sectors as unknown as Sector[]).length === 0
|
||||
) {
|
||||
response.sectors = [];
|
||||
for (const [name, value] of Object.entries<any>(result.sectors)) {
|
||||
for (const [name, value] of Object.entries<any>(
|
||||
holdings?.sectors ?? {}
|
||||
)) {
|
||||
response.sectors.push({
|
||||
name: TrackinsightDataEnhancerService.sectorsMapping[name] ?? name,
|
||||
weight: value.weight
|
||||
|
@ -8,6 +8,7 @@ import {
|
||||
} from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { PrismaService } from '@ghostfolio/api/services/prisma.service';
|
||||
import { DATE_FORMAT } from '@ghostfolio/common/helper';
|
||||
import { UserWithSettings } from '@ghostfolio/common/interfaces';
|
||||
import { Granularity } from '@ghostfolio/common/types';
|
||||
import { Inject, Injectable, Logger } from '@nestjs/common';
|
||||
import { DataSource, MarketData, SymbolProfile } from '@prisma/client';
|
||||
@ -260,26 +261,51 @@ export class DataProviderService {
|
||||
return response;
|
||||
}
|
||||
|
||||
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
|
||||
public async search({
|
||||
query,
|
||||
user
|
||||
}: {
|
||||
query: string;
|
||||
user: UserWithSettings;
|
||||
}): Promise<{ items: LookupItem[] }> {
|
||||
const promises: Promise<{ items: LookupItem[] }>[] = [];
|
||||
let lookupItems: LookupItem[] = [];
|
||||
|
||||
for (const dataSource of this.configurationService.get('DATA_SOURCES')) {
|
||||
promises.push(
|
||||
this.getDataProvider(DataSource[dataSource]).search(aQuery)
|
||||
);
|
||||
if (query?.length < 2) {
|
||||
return { items: lookupItems };
|
||||
}
|
||||
|
||||
let dataSources = this.configurationService.get('DATA_SOURCES');
|
||||
|
||||
if (
|
||||
this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') &&
|
||||
user.subscription.type === 'Basic'
|
||||
) {
|
||||
dataSources = dataSources.filter((dataSource) => {
|
||||
return !this.isPremiumDataSource(DataSource[dataSource]);
|
||||
});
|
||||
}
|
||||
|
||||
for (const dataSource of dataSources) {
|
||||
promises.push(this.getDataProvider(DataSource[dataSource]).search(query));
|
||||
}
|
||||
|
||||
const searchResults = await Promise.all(promises);
|
||||
|
||||
searchResults.forEach((searchResult) => {
|
||||
lookupItems = lookupItems.concat(searchResult.items);
|
||||
searchResults.forEach(({ items }) => {
|
||||
if (items?.length > 0) {
|
||||
lookupItems = lookupItems.concat(items);
|
||||
}
|
||||
});
|
||||
|
||||
const filteredItems = lookupItems.filter((lookupItem) => {
|
||||
// Only allow symbols with supported currency
|
||||
return lookupItem.currency ? true : false;
|
||||
});
|
||||
const filteredItems = lookupItems
|
||||
.filter((lookupItem) => {
|
||||
// Only allow symbols with supported currency
|
||||
return lookupItem.currency ? true : false;
|
||||
})
|
||||
.sort(({ name: name1 }, { name: name2 }) => {
|
||||
return name1?.toLowerCase().localeCompare(name2?.toLowerCase());
|
||||
});
|
||||
|
||||
return {
|
||||
items: filteredItems
|
||||
@ -295,4 +321,9 @@ export class DataProviderService {
|
||||
|
||||
throw new Error('No data provider has been found.');
|
||||
}
|
||||
|
||||
private isPremiumDataSource(aDataSource: DataSource) {
|
||||
const premiumDataSources: DataSource[] = [DataSource.EOD_HISTORICAL_DATA];
|
||||
return premiumDataSources.includes(aDataSource);
|
||||
}
|
||||
}
|
||||
|
@ -5,13 +5,17 @@ import {
|
||||
IDataProviderHistoricalResponse,
|
||||
IDataProviderResponse
|
||||
} from '@ghostfolio/api/services/interfaces/interfaces';
|
||||
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service';
|
||||
import { DATE_FORMAT } from '@ghostfolio/common/helper';
|
||||
import { Granularity } from '@ghostfolio/common/types';
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { DataSource, SymbolProfile } from '@prisma/client';
|
||||
import {
|
||||
AssetClass,
|
||||
AssetSubClass,
|
||||
DataSource,
|
||||
SymbolProfile
|
||||
} from '@prisma/client';
|
||||
import bent from 'bent';
|
||||
import { format } from 'date-fns';
|
||||
import { format, isToday } from 'date-fns';
|
||||
|
||||
@Injectable()
|
||||
export class EodHistoricalDataService implements DataProviderInterface {
|
||||
@ -19,8 +23,7 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
private readonly URL = 'https://eodhistoricaldata.com/api';
|
||||
|
||||
public constructor(
|
||||
private readonly configurationService: ConfigurationService,
|
||||
private readonly symbolProfileService: SymbolProfileService
|
||||
private readonly configurationService: ConfigurationService
|
||||
) {
|
||||
this.apiKey = this.configurationService.get('EOD_HISTORICAL_DATA_API_KEY');
|
||||
}
|
||||
@ -32,8 +35,15 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
public async getAssetProfile(
|
||||
aSymbol: string
|
||||
): Promise<Partial<SymbolProfile>> {
|
||||
const [searchResult] = await this.getSearchResult(aSymbol);
|
||||
|
||||
return {
|
||||
dataSource: this.getName()
|
||||
assetClass: searchResult?.assetClass,
|
||||
assetSubClass: searchResult?.assetSubClass,
|
||||
currency: searchResult?.currency,
|
||||
dataSource: this.getName(),
|
||||
isin: searchResult?.isin,
|
||||
name: searchResult?.name
|
||||
};
|
||||
}
|
||||
|
||||
@ -122,32 +132,30 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
200
|
||||
);
|
||||
|
||||
const [response, symbolProfiles] = await Promise.all([
|
||||
const [realTimeResponse, searchResponse] = await Promise.all([
|
||||
get(),
|
||||
this.symbolProfileService.getSymbolProfiles(
|
||||
aSymbols.map((symbol) => {
|
||||
return {
|
||||
symbol,
|
||||
dataSource: DataSource.EOD_HISTORICAL_DATA
|
||||
};
|
||||
})
|
||||
)
|
||||
this.search(aSymbols[0])
|
||||
]);
|
||||
|
||||
const quotes = aSymbols.length === 1 ? [response] : response;
|
||||
const quotes =
|
||||
aSymbols.length === 1 ? [realTimeResponse] : realTimeResponse;
|
||||
|
||||
return quotes.reduce((result, item, index, array) => {
|
||||
result[item.code] = {
|
||||
currency: symbolProfiles.find((symbolProfile) => {
|
||||
return symbolProfile.symbol === item.code;
|
||||
})?.currency,
|
||||
dataSource: DataSource.EOD_HISTORICAL_DATA,
|
||||
marketPrice: item.close,
|
||||
marketState: 'delayed'
|
||||
};
|
||||
return quotes.reduce(
|
||||
(
|
||||
result: { [symbol: string]: IDataProviderResponse },
|
||||
{ close, code, timestamp }
|
||||
) => {
|
||||
result[code] = {
|
||||
currency: searchResponse?.items[0]?.currency,
|
||||
dataSource: DataSource.EOD_HISTORICAL_DATA,
|
||||
marketPrice: close,
|
||||
marketState: isToday(new Date(timestamp * 1000)) ? 'open' : 'closed'
|
||||
};
|
||||
|
||||
return result;
|
||||
}, {});
|
||||
return result;
|
||||
},
|
||||
{}
|
||||
);
|
||||
} catch (error) {
|
||||
Logger.error(error, 'EodHistoricalDataService');
|
||||
}
|
||||
@ -156,6 +164,101 @@ export class EodHistoricalDataService implements DataProviderInterface {
|
||||
}
|
||||
|
||||
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
|
||||
return { items: [] };
|
||||
const searchResult = await this.getSearchResult(aQuery);
|
||||
|
||||
return {
|
||||
items: searchResult
|
||||
.filter(({ symbol }) => {
|
||||
return !symbol.toLowerCase().endsWith('forex');
|
||||
})
|
||||
.map(({ currency, dataSource, name, symbol }) => {
|
||||
return { currency, dataSource, name, symbol };
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
private async getSearchResult(aQuery: string): Promise<
|
||||
(LookupItem & {
|
||||
assetClass: AssetClass;
|
||||
assetSubClass: AssetSubClass;
|
||||
isin: string;
|
||||
})[]
|
||||
> {
|
||||
let searchResult = [];
|
||||
|
||||
try {
|
||||
const get = bent(
|
||||
`${this.URL}/search/${aQuery}?api_token=${this.apiKey}`,
|
||||
'GET',
|
||||
'json',
|
||||
200
|
||||
);
|
||||
const response = await get();
|
||||
|
||||
searchResult = response.map(
|
||||
({
|
||||
Code,
|
||||
Currency: currency,
|
||||
Exchange,
|
||||
ISIN: isin,
|
||||
Name: name,
|
||||
Type
|
||||
}) => {
|
||||
const { assetClass, assetSubClass } = this.parseAssetClass({
|
||||
Exchange,
|
||||
Type
|
||||
});
|
||||
|
||||
return {
|
||||
assetClass,
|
||||
assetSubClass,
|
||||
currency,
|
||||
isin,
|
||||
name,
|
||||
dataSource: this.getName(),
|
||||
symbol: `${Code}.${Exchange}`
|
||||
};
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
Logger.error(error, 'EodHistoricalDataService');
|
||||
}
|
||||
|
||||
return searchResult;
|
||||
}
|
||||
|
||||
private parseAssetClass({
|
||||
Exchange,
|
||||
Type
|
||||
}: {
|
||||
Exchange: string;
|
||||
Type: string;
|
||||
}): {
|
||||
assetClass: AssetClass;
|
||||
assetSubClass: AssetSubClass;
|
||||
} {
|
||||
let assetClass: AssetClass;
|
||||
let assetSubClass: AssetSubClass;
|
||||
|
||||
switch (Type?.toLowerCase()) {
|
||||
case 'common stock':
|
||||
assetClass = AssetClass.EQUITY;
|
||||
assetSubClass = AssetSubClass.STOCK;
|
||||
break;
|
||||
case 'currency':
|
||||
assetClass = AssetClass.CASH;
|
||||
|
||||
if (Exchange?.toLowerCase() === 'cc') {
|
||||
assetSubClass = AssetSubClass.CRYPTOCURRENCY;
|
||||
}
|
||||
|
||||
break;
|
||||
case 'etf':
|
||||
assetClass = AssetClass.EQUITY;
|
||||
assetSubClass = AssetSubClass.ETF;
|
||||
break;
|
||||
}
|
||||
|
||||
return { assetClass, assetSubClass };
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import { Injectable, Logger } from '@nestjs/common';
|
||||
import { DataSource, SymbolProfile } from '@prisma/client';
|
||||
import bent from 'bent';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { isUUID } from 'class-validator';
|
||||
import { addDays, format, isBefore } from 'date-fns';
|
||||
|
||||
@Injectable()
|
||||
@ -162,7 +163,7 @@ export class ManualService implements DataProviderInterface {
|
||||
}
|
||||
|
||||
public async search(aQuery: string): Promise<{ items: LookupItem[] }> {
|
||||
const items = await this.prismaService.symbolProfile.findMany({
|
||||
let items = await this.prismaService.symbolProfile.findMany({
|
||||
select: {
|
||||
currency: true,
|
||||
dataSource: true,
|
||||
@ -189,6 +190,11 @@ export class ManualService implements DataProviderInterface {
|
||||
}
|
||||
});
|
||||
|
||||
items = items.filter(({ symbol }) => {
|
||||
// Remove UUID symbols (activities of type ITEM)
|
||||
return !isUUID(symbol);
|
||||
});
|
||||
|
||||
return { items };
|
||||
}
|
||||
}
|
||||
|
@ -168,7 +168,7 @@ export class ExchangeRateDataService {
|
||||
return this.toCurrency(aValue, aFromCurrency, aToCurrency);
|
||||
}
|
||||
|
||||
let factor = 1;
|
||||
let factor: number;
|
||||
|
||||
if (aFromCurrency !== aToCurrency) {
|
||||
const dataSource = this.dataProviderService.getPrimaryDataSource();
|
||||
@ -183,9 +183,29 @@ export class ExchangeRateDataService {
|
||||
if (marketData?.marketPrice) {
|
||||
factor = marketData?.marketPrice;
|
||||
} else {
|
||||
// TODO: Get from data provider service or calculate indirectly via base currency
|
||||
// and market data
|
||||
return this.toCurrency(aValue, aFromCurrency, aToCurrency);
|
||||
// Calculate indirectly via base currency
|
||||
try {
|
||||
const [
|
||||
{ marketPrice: marketPriceBaseCurrencyFromCurrency },
|
||||
{ marketPrice: marketPriceBaseCurrencyToCurrency }
|
||||
] = await Promise.all([
|
||||
this.marketDataService.get({
|
||||
dataSource,
|
||||
date: aDate,
|
||||
symbol: `${this.baseCurrency}${aFromCurrency}`
|
||||
}),
|
||||
this.marketDataService.get({
|
||||
dataSource,
|
||||
date: aDate,
|
||||
symbol: `${this.baseCurrency}${aToCurrency}`
|
||||
})
|
||||
]);
|
||||
|
||||
// Calculate the opposite direction
|
||||
factor =
|
||||
(1 / marketPriceBaseCurrencyFromCurrency) *
|
||||
marketPriceBaseCurrencyToCurrency;
|
||||
} catch {}
|
||||
}
|
||||
}
|
||||
|
||||
@ -193,12 +213,15 @@ export class ExchangeRateDataService {
|
||||
return factor * aValue;
|
||||
}
|
||||
|
||||
// Fallback with error, if currencies are not available
|
||||
Logger.error(
|
||||
`No exchange rate has been found for ${aFromCurrency}${aToCurrency}`,
|
||||
`No exchange rate has been found for ${aFromCurrency}${aToCurrency} at ${format(
|
||||
aDate,
|
||||
DATE_FORMAT
|
||||
)}`,
|
||||
'ExchangeRateDataService'
|
||||
);
|
||||
return aValue;
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private async prepareCurrencies(): Promise<string[]> {
|
||||
|
@ -8,7 +8,6 @@ export interface Environment extends CleanedEnvAccessors {
|
||||
DATA_SOURCE_PRIMARY: string;
|
||||
DATA_SOURCES: string[];
|
||||
ENABLE_FEATURE_BLOG: boolean;
|
||||
ENABLE_FEATURE_CUSTOM_SYMBOLS: boolean;
|
||||
ENABLE_FEATURE_FEAR_AND_GREED_INDEX: boolean;
|
||||
ENABLE_FEATURE_READ_ONLY_MODE: boolean;
|
||||
ENABLE_FEATURE_SOCIAL_LOGIN: boolean;
|
||||
|
@ -1,6 +1,7 @@
|
||||
<div>
|
||||
<gf-line-chart
|
||||
class="mb-4"
|
||||
[colorScheme]="user?.settings?.colorScheme"
|
||||
[historicalDataItems]="historicalDataItems"
|
||||
[isAnimated]="true"
|
||||
[locale]="locale"
|
||||
@ -28,7 +29,7 @@
|
||||
}"
|
||||
[title]="
|
||||
(itemByMonth.key + '-' + (i + 1 < 10 ? '0' + (i + 1) : i + 1)
|
||||
| date: defaultDateFormat) ?? ''
|
||||
| date : defaultDateFormat) ?? ''
|
||||
"
|
||||
(click)="
|
||||
onOpenMarketDataDetail({
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
|
||||
|
||||
import { MarketDataDetailDialog } from './market-data-detail-dialog.component';
|
||||
|
||||
|
@ -152,7 +152,7 @@
|
||||
mat-menu-item
|
||||
(click)="onGatherSymbol({dataSource: element.dataSource, symbol: element.symbol})"
|
||||
>
|
||||
<ng-container i18n>Gather Data</ng-container>
|
||||
<ng-container i18n>Gather Historical Data</ng-container>
|
||||
</button>
|
||||
<button
|
||||
mat-menu-item
|
||||
|
@ -27,7 +27,7 @@
|
||||
[disabled]="assetProfileForm.dirty"
|
||||
(click)="onGatherSymbol({dataSource: data.dataSource, symbol: data.symbol})"
|
||||
>
|
||||
<ng-container i18n>Gather Data</ng-container>
|
||||
<ng-container i18n>Gather Historical Data</ng-container>
|
||||
</button>
|
||||
<button
|
||||
mat-menu-item
|
||||
|
@ -28,7 +28,13 @@
|
||||
>
|
||||
<ng-container i18n>Engagement per Day</ng-container>
|
||||
</th>
|
||||
<th class="mat-header-cell px-1 py-2" i18n>Last Request</th>
|
||||
<th
|
||||
*ngIf="hasPermissionForSubscription"
|
||||
class="mat-header-cell px-1 py-2"
|
||||
i18n
|
||||
>
|
||||
Last Request
|
||||
</th>
|
||||
<th class="mat-header-cell px-1 py-2"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -86,7 +92,10 @@
|
||||
[value]="userItem.engagement"
|
||||
></gf-value>
|
||||
</td>
|
||||
<td class="mat-cell px-1 py-2">
|
||||
<td
|
||||
*ngIf="hasPermissionForSubscription"
|
||||
class="mat-cell px-1 py-2"
|
||||
>
|
||||
{{ formatDistanceToNow(userItem.lastActivity) }}
|
||||
</td>
|
||||
<td class="mat-cell px-1 py-2">
|
||||
|
@ -166,7 +166,6 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
|
||||
},
|
||||
display: true,
|
||||
grid: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
|
||||
display: false
|
||||
},
|
||||
type: 'time',
|
||||
@ -177,13 +176,21 @@ export class BenchmarkComparatorComponent implements OnChanges, OnDestroy {
|
||||
},
|
||||
y: {
|
||||
border: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.1)`,
|
||||
display: false
|
||||
width: 0
|
||||
},
|
||||
display: true,
|
||||
grid: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
|
||||
display: false
|
||||
color: ({ scale, tick }) => {
|
||||
if (
|
||||
tick.value === 0 ||
|
||||
tick.value === scale.max ||
|
||||
tick.value === scale.min
|
||||
) {
|
||||
return `rgba(${getTextColor(this.colorScheme)}, 0.1)`;
|
||||
}
|
||||
|
||||
return 'transparent';
|
||||
}
|
||||
},
|
||||
position: 'right',
|
||||
ticks: {
|
||||
|
@ -56,8 +56,8 @@ export class HeaderComponent implements OnChanges {
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((id) => {
|
||||
this.impersonationId = id;
|
||||
.subscribe((impersonationId) => {
|
||||
this.impersonationId = impersonationId;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -78,8 +78,8 @@ export class HomeHoldingsComponent implements OnDestroy, OnInit {
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((aId) => {
|
||||
this.hasImpersonationId = !!aId;
|
||||
.subscribe((impersonationId) => {
|
||||
this.hasImpersonationId = !!impersonationId;
|
||||
});
|
||||
|
||||
this.update();
|
||||
|
@ -10,6 +10,7 @@
|
||||
symbol="Fear & Greed Index"
|
||||
yMax="100"
|
||||
yMin="0"
|
||||
[colorScheme]="user?.settings?.colorScheme"
|
||||
[historicalDataItems]="historicalDataItems"
|
||||
[isAnimated]="true"
|
||||
[locale]="user?.settings?.locale"
|
||||
|
@ -66,8 +66,8 @@ export class HomeOverviewComponent implements OnDestroy, OnInit {
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((aId) => {
|
||||
this.hasImpersonationId = !!aId;
|
||||
.subscribe((impersonationId) => {
|
||||
this.hasImpersonationId = !!impersonationId;
|
||||
|
||||
this.changeDetectorRef.markForCheck();
|
||||
});
|
||||
|
@ -69,8 +69,8 @@ export class HomeSummaryComponent implements OnDestroy, OnInit {
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((aId) => {
|
||||
this.hasImpersonationId = !!aId;
|
||||
.subscribe((impersonationId) => {
|
||||
this.hasImpersonationId = !!impersonationId;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -283,7 +283,6 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
||||
},
|
||||
display: true,
|
||||
grid: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
|
||||
display: false
|
||||
},
|
||||
min: this.daysInMarket
|
||||
@ -298,13 +297,21 @@ export class InvestmentChartComponent implements OnChanges, OnDestroy {
|
||||
},
|
||||
y: {
|
||||
border: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.1)`,
|
||||
display: false
|
||||
},
|
||||
display: !this.isInPercent,
|
||||
grid: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
|
||||
display: false
|
||||
color: ({ scale, tick }) => {
|
||||
if (
|
||||
tick.value === 0 ||
|
||||
tick.value === scale.max ||
|
||||
tick.value === scale.min
|
||||
) {
|
||||
return `rgba(${getTextColor(this.colorScheme)}, 0.1)`;
|
||||
}
|
||||
|
||||
return 'transparent';
|
||||
}
|
||||
},
|
||||
position: 'right',
|
||||
ticks: {
|
||||
|
@ -17,17 +17,21 @@
|
||||
<ion-icon class="mr-1" name="checkmark-circle-outline"></ion-icon>
|
||||
<span i18n>Portfolio Summary</span>
|
||||
</li>
|
||||
<li class="align-items-center d-flex mb-1">
|
||||
<ion-icon class="mr-1" name="checkmark-circle-outline"></ion-icon>
|
||||
<span i18n>Portfolio Allocations</span>
|
||||
</li>
|
||||
<li class="align-items-center d-flex mb-1">
|
||||
<ion-icon class="mr-1" name="checkmark-circle-outline"></ion-icon>
|
||||
<span i18n>Performance Benchmarks</span>
|
||||
</li>
|
||||
<li class="align-items-center d-flex mb-1">
|
||||
<ion-icon class="mr-1" name="checkmark-circle-outline"></ion-icon>
|
||||
<span i18n>Allocations</span>
|
||||
<span i18n>FIRE Calculator</span>
|
||||
</li>
|
||||
<li class="align-items-center d-flex mb-1">
|
||||
<ion-icon class="mr-1" name="checkmark-circle-outline"></ion-icon>
|
||||
<span i18n>FIRE Calculator</span>
|
||||
<span i18n>Professional Data Provider</span>
|
||||
</li>
|
||||
<li class="align-items-center d-flex mb-1">
|
||||
<ion-icon class="mr-1" name="checkmark-circle-outline"></ion-icon>
|
||||
|
@ -5,14 +5,16 @@ import {
|
||||
HttpRequest
|
||||
} from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import {
|
||||
HEADER_KEY_IMPERSONATION,
|
||||
HEADER_KEY_TIMEZONE,
|
||||
HEADER_KEY_TOKEN
|
||||
} from '@ghostfolio/common/config';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
import { ImpersonationStorageService } from '../services/impersonation-storage.service';
|
||||
import { TokenStorageService } from '../services/token-storage.service';
|
||||
|
||||
const IMPERSONATION_KEY = 'Impersonation-Id';
|
||||
const TOKEN_HEADER_KEY = 'Authorization';
|
||||
|
||||
@Injectable()
|
||||
export class AuthInterceptor implements HttpInterceptor {
|
||||
public constructor(
|
||||
@ -24,21 +26,27 @@ export class AuthInterceptor implements HttpInterceptor {
|
||||
req: HttpRequest<any>,
|
||||
next: HttpHandler
|
||||
): Observable<HttpEvent<any>> {
|
||||
let authReq = req;
|
||||
let request = req;
|
||||
let headers = request.headers.set(
|
||||
HEADER_KEY_TIMEZONE,
|
||||
Intl?.DateTimeFormat().resolvedOptions().timeZone
|
||||
);
|
||||
|
||||
const token = this.tokenStorageService.getToken();
|
||||
const impersonationId = this.impersonationStorageService.getId();
|
||||
|
||||
if (token !== null) {
|
||||
let headers = req.headers.set(TOKEN_HEADER_KEY, `Bearer ${token}`);
|
||||
headers = headers.set(HEADER_KEY_TOKEN, `Bearer ${token}`);
|
||||
|
||||
const impersonationId = this.impersonationStorageService.getId();
|
||||
|
||||
if (impersonationId !== null) {
|
||||
headers = headers.set(IMPERSONATION_KEY, impersonationId);
|
||||
headers = headers.set(HEADER_KEY_IMPERSONATION, impersonationId);
|
||||
}
|
||||
|
||||
authReq = req.clone({ headers });
|
||||
}
|
||||
|
||||
return next.handle(authReq);
|
||||
request = request.clone({ headers });
|
||||
|
||||
return next.handle(request);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,8 +77,8 @@ export class AccountsPageComponent implements OnDestroy, OnInit {
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((aId) => {
|
||||
this.hasImpersonationId = !!aId;
|
||||
.subscribe((impersonationId) => {
|
||||
this.hasImpersonationId = !!impersonationId;
|
||||
});
|
||||
|
||||
this.userService.stateChanged
|
||||
|
@ -17,8 +17,8 @@ export class LandingPageComponent implements OnDestroy, OnInit {
|
||||
[code: string]: { value: number };
|
||||
} = {};
|
||||
public currentYear = format(new Date(), 'yyyy');
|
||||
public demoAuthToken: string;
|
||||
public deviceType: string;
|
||||
public hasPermissionForDemo: boolean;
|
||||
public hasPermissionForStatistics: boolean;
|
||||
public hasPermissionForSubscription: boolean;
|
||||
public hasPermissionToCreateUser: boolean;
|
||||
@ -54,6 +54,7 @@ export class LandingPageComponent implements OnDestroy, OnInit {
|
||||
) {
|
||||
const {
|
||||
countriesOfSubscribers = [],
|
||||
demoAuthToken,
|
||||
globalPermissions,
|
||||
statistics
|
||||
} = this.dataService.fetchInfo();
|
||||
@ -64,6 +65,7 @@ export class LandingPageComponent implements OnDestroy, OnInit {
|
||||
};
|
||||
}
|
||||
|
||||
this.hasPermissionForDemo = !!demoAuthToken;
|
||||
this.hasPermissionForStatistics = hasPermission(
|
||||
globalPermissions,
|
||||
permissions.enableStatistics
|
||||
|
@ -40,12 +40,18 @@
|
||||
>
|
||||
Get Started
|
||||
</a>
|
||||
<div class="d-inline-block mx-3 text-muted">or</div></ng-container
|
||||
>
|
||||
|
||||
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||
Live Demo
|
||||
</a>
|
||||
</ng-container>
|
||||
<ng-container *ngIf="hasPermissionForDemo">
|
||||
<div
|
||||
*ngIf="hasPermissionToCreateUser"
|
||||
class="d-inline-block mx-3 text-muted"
|
||||
>
|
||||
or
|
||||
</div>
|
||||
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||
Live Demo
|
||||
</a>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -379,16 +385,20 @@
|
||||
<div class="col">
|
||||
<h2 class="h4 mb-1 text-center">Are <strong>you</strong> ready?</h2>
|
||||
<p class="lead mb-3 text-center">
|
||||
Join now or check out the example account
|
||||
Join now<ng-container *ngIf="hasPermissionForDemo">
|
||||
or check out the example account</ng-container
|
||||
>
|
||||
</p>
|
||||
<div class="py-2 text-center">
|
||||
<a color="primary" mat-flat-button [routerLink]="['/register']">
|
||||
Get Started
|
||||
</a>
|
||||
<div class="d-inline-block mx-3 text-muted">or</div>
|
||||
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||
Live Demo
|
||||
</a>
|
||||
<ng-container *ngIf="hasPermissionForDemo">
|
||||
<div class="d-inline-block mx-3 text-muted">or</div>
|
||||
<a class="d-inline-block" mat-stroked-button [routerLink]="['/demo']">
|
||||
Live Demo
|
||||
</a>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -88,8 +88,8 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit {
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((aId) => {
|
||||
this.hasImpersonationId = !!aId;
|
||||
.subscribe((impersonationId) => {
|
||||
this.hasImpersonationId = !!impersonationId;
|
||||
});
|
||||
|
||||
this.userService.stateChanged
|
||||
|
@ -9,12 +9,13 @@ import {
|
||||
ViewChild
|
||||
} from '@angular/core';
|
||||
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
||||
import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';
|
||||
import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
|
||||
import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';
|
||||
import {
|
||||
MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA,
|
||||
MatLegacyDialogRef as MatDialogRef
|
||||
} from '@angular/material/legacy-dialog';
|
||||
import { getDateFormatString } from '@ghostfolio/common/helper';
|
||||
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
|
||||
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto';
|
||||
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface';
|
||||
@ -56,6 +57,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
});
|
||||
public currencies: string[] = [];
|
||||
public currentMarketPrice = null;
|
||||
public defaultDateFormat: string;
|
||||
public filteredLookupItems: LookupItem[];
|
||||
public filteredLookupItemsObservable: Observable<LookupItem[]>;
|
||||
public filteredTagsObservable: Observable<Tag[]>;
|
||||
@ -85,6 +87,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
const { currencies, platforms, tags } = this.dataService.fetchInfo();
|
||||
|
||||
this.currencies = currencies;
|
||||
this.defaultDateFormat = getDateFormatString(this.locale);
|
||||
this.platforms = platforms;
|
||||
this.tags = tags.map(({ id, name }) => {
|
||||
return {
|
||||
@ -106,6 +109,10 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
this.data.activity?.SymbolProfile?.currency,
|
||||
Validators.required
|
||||
],
|
||||
currencyOfUnitPrice: [
|
||||
this.data.activity?.SymbolProfile?.currency,
|
||||
Validators.required
|
||||
],
|
||||
dataSource: [
|
||||
this.data.activity?.SymbolProfile?.dataSource,
|
||||
Validators.required
|
||||
@ -131,16 +138,26 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
})
|
||||
],
|
||||
type: [undefined, Validators.required], // Set after value changes subscription
|
||||
unitPrice: [this.data.activity?.unitPrice, Validators.required]
|
||||
unitPrice: [this.data.activity?.unitPrice, Validators.required],
|
||||
unitPriceInCustomCurrency: [
|
||||
this.data.activity?.unitPrice,
|
||||
Validators.required
|
||||
]
|
||||
});
|
||||
|
||||
this.activityForm.valueChanges
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(async () => {
|
||||
let exchangeRate = 1;
|
||||
let exchangeRateOfFee = 1;
|
||||
let exchangeRateOfUnitPrice = 1;
|
||||
|
||||
this.activityForm.controls['feeInCustomCurrency'].setErrors(null);
|
||||
this.activityForm.controls['unitPriceInCustomCurrency'].setErrors(null);
|
||||
|
||||
const currency = this.activityForm.controls['currency'].value;
|
||||
const currencyOfFee = this.activityForm.controls['currencyOfFee'].value;
|
||||
const currencyOfUnitPrice =
|
||||
this.activityForm.controls['currencyOfUnitPrice'].value;
|
||||
const date = this.activityForm.controls['date'].value;
|
||||
|
||||
if (currency && currencyOfFee && currency !== currencyOfFee && date) {
|
||||
@ -154,18 +171,57 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
);
|
||||
|
||||
exchangeRate = marketPrice;
|
||||
} catch {}
|
||||
exchangeRateOfFee = marketPrice;
|
||||
} catch {
|
||||
this.activityForm.controls['feeInCustomCurrency'].setErrors({
|
||||
invalid: true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const feeInCustomCurrency =
|
||||
this.activityForm.controls['feeInCustomCurrency'].value *
|
||||
exchangeRate;
|
||||
exchangeRateOfFee;
|
||||
|
||||
this.activityForm.controls['fee'].setValue(feeInCustomCurrency, {
|
||||
emitEvent: false
|
||||
});
|
||||
|
||||
if (
|
||||
currency &&
|
||||
currencyOfUnitPrice &&
|
||||
currency !== currencyOfUnitPrice &&
|
||||
date
|
||||
) {
|
||||
try {
|
||||
const { marketPrice } = await lastValueFrom(
|
||||
this.dataService
|
||||
.fetchExchangeRateForDate({
|
||||
date,
|
||||
symbol: `${currencyOfUnitPrice}-${currency}`
|
||||
})
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
);
|
||||
|
||||
exchangeRateOfUnitPrice = marketPrice;
|
||||
} catch {
|
||||
this.activityForm.controls['unitPriceInCustomCurrency'].setErrors({
|
||||
invalid: true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const unitPriceInCustomCurrency =
|
||||
this.activityForm.controls['unitPriceInCustomCurrency'].value *
|
||||
exchangeRateOfUnitPrice;
|
||||
|
||||
this.activityForm.controls['unitPrice'].setValue(
|
||||
unitPriceInCustomCurrency,
|
||||
{
|
||||
emitEvent: false
|
||||
}
|
||||
);
|
||||
|
||||
if (
|
||||
this.activityForm.controls['type'].value === 'BUY' ||
|
||||
this.activityForm.controls['type'].value === 'ITEM'
|
||||
@ -187,11 +243,10 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
this.filteredLookupItemsObservable = this.activityForm.controls[
|
||||
'searchSymbol'
|
||||
].valueChanges.pipe(
|
||||
startWith(''),
|
||||
debounceTime(400),
|
||||
distinctUntilChanged(),
|
||||
switchMap((query: string) => {
|
||||
if (isString(query)) {
|
||||
if (isString(query) && query.length > 1) {
|
||||
const filteredLookupItemsObservable =
|
||||
this.dataService.fetchSymbols(query);
|
||||
|
||||
@ -231,6 +286,9 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
this.activityForm.controls['currencyOfFee'].setValue(
|
||||
this.data.user.settings.baseCurrency
|
||||
);
|
||||
this.activityForm.controls['currencyOfUnitPrice'].setValue(
|
||||
this.data.user.settings.baseCurrency
|
||||
);
|
||||
this.activityForm.controls['dataSource'].removeValidators(
|
||||
Validators.required
|
||||
);
|
||||
@ -288,7 +346,8 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
|
||||
public applyCurrentMarketPrice() {
|
||||
this.activityForm.patchValue({
|
||||
unitPrice: this.currentMarketPrice
|
||||
currencyOfUnitPrice: this.activityForm.controls['currency'].value,
|
||||
unitPriceInCustomCurrency: this.currentMarketPrice
|
||||
});
|
||||
}
|
||||
|
||||
@ -415,6 +474,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||
.subscribe(({ currency, dataSource, marketPrice }) => {
|
||||
this.activityForm.controls['currency'].setValue(currency);
|
||||
this.activityForm.controls['currencyOfFee'].setValue(currency);
|
||||
this.activityForm.controls['currencyOfUnitPrice'].setValue(currency);
|
||||
this.activityForm.controls['dataSource'].setValue(dataSource);
|
||||
|
||||
this.currentMarketPrice = marketPrice;
|
||||
|
@ -7,7 +7,7 @@
|
||||
<h1 *ngIf="data.activity.id" i18n mat-dialog-title>Update activity</h1>
|
||||
<h1 *ngIf="!data.activity.id" i18n mat-dialog-title>Add activity</h1>
|
||||
<div class="flex-grow-1 pt-3" mat-dialog-content>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Type</mat-label>
|
||||
<mat-select formControlName="type">
|
||||
@ -18,7 +18,7 @@
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Account</mat-label>
|
||||
<mat-select formControlName="accountId">
|
||||
@ -33,6 +33,7 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
class="mb-3"
|
||||
[ngClass]="{ 'd-none': !activityForm.controls['searchSymbol'].hasValidator(Validators.required) }"
|
||||
>
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
@ -60,7 +61,8 @@
|
||||
<span><b>{{ lookupItem.name }}</b></span>
|
||||
<br />
|
||||
<small class="text-muted"
|
||||
>{{ lookupItem.symbol | gfSymbol }}</small
|
||||
>{{ lookupItem.symbol | gfSymbol }} · {{ lookupItem.currency
|
||||
}}</small
|
||||
>
|
||||
</mat-option>
|
||||
</ng-container>
|
||||
@ -69,6 +71,7 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
class="mb-3"
|
||||
[ngClass]="{ 'd-none': !activityForm.controls['name'].hasValidator(Validators.required) }"
|
||||
>
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
@ -92,7 +95,7 @@
|
||||
<input formControlName="dataSource" matInput />
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Date</mat-label>
|
||||
<input formControlName="date" matInput [matDatepicker]="date" />
|
||||
@ -106,13 +109,60 @@
|
||||
<mat-datepicker #date disabled="false"></mat-datepicker>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Quantity</mat-label>
|
||||
<input formControlName="quantity" matInput type="number" />
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="align-items-start d-flex">
|
||||
<div class="align-items-start d-flex mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label
|
||||
><ng-container [ngSwitch]="activityForm.controls['type']?.value">
|
||||
<ng-container *ngSwitchCase="'DIVIDEND'" i18n
|
||||
>Dividend</ng-container
|
||||
>
|
||||
<ng-container *ngSwitchCase="'ITEM'" i18n>Value</ng-container>
|
||||
<ng-container *ngSwitchDefault i18n>Unit Price</ng-container>
|
||||
</ng-container>
|
||||
</mat-label>
|
||||
<input
|
||||
formControlName="unitPriceInCustomCurrency"
|
||||
matInput
|
||||
type="number"
|
||||
/>
|
||||
<div
|
||||
class="ml-2"
|
||||
matTextSuffix
|
||||
[ngClass]="{ 'd-none': !activityForm.controls['currency']?.value }"
|
||||
>
|
||||
<mat-select formControlName="currencyOfUnitPrice">
|
||||
<mat-option *ngFor="let currency of currencies" [value]="currency">
|
||||
{{ currency }}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</div>
|
||||
<mat-error
|
||||
*ngIf="activityForm.controls['unitPriceInCustomCurrency'].hasError('invalid')"
|
||||
><ng-container i18n
|
||||
>Oops! Could not get the historical exchange rate from</ng-container
|
||||
>
|
||||
{{ activityForm.controls['date']?.value | date: defaultDateFormat
|
||||
}}</mat-error
|
||||
>
|
||||
</mat-form-field>
|
||||
<button
|
||||
*ngIf="currentMarketPrice && (data.activity.type === 'BUY' || data.activity.type === 'SELL')"
|
||||
class="apply-current-market-price ml-2 no-min-width"
|
||||
mat-button
|
||||
title="Apply current market price"
|
||||
type="button"
|
||||
(click)="applyCurrentMarketPrice()"
|
||||
>
|
||||
<ion-icon class="text-muted" name="refresh-outline"></ion-icon>
|
||||
</button>
|
||||
</div>
|
||||
<div class="d-none">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label
|
||||
><ng-container [ngSwitch]="activityForm.controls['type']?.value">
|
||||
@ -128,18 +178,8 @@
|
||||
>{{ activityForm.controls['currency'].value }}</span
|
||||
>
|
||||
</mat-form-field>
|
||||
<button
|
||||
*ngIf="currentMarketPrice && (data.activity.type === 'BUY' || data.activity.type === 'SELL')"
|
||||
class="apply-current-market-price ml-2 no-min-width"
|
||||
mat-button
|
||||
title="Apply current market price"
|
||||
type="button"
|
||||
(click)="applyCurrentMarketPrice()"
|
||||
>
|
||||
<ion-icon class="text-muted" name="refresh-outline"></ion-icon>
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Fee</mat-label>
|
||||
<input formControlName="feeInCustomCurrency" matInput type="number" />
|
||||
@ -154,6 +194,14 @@
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</div>
|
||||
<mat-error
|
||||
*ngIf="activityForm.controls['feeInCustomCurrency'].hasError('invalid')"
|
||||
><ng-container i18n
|
||||
>Oops! Could not get the historical exchange rate from</ng-container
|
||||
>
|
||||
{{ activityForm.controls['date']?.value | date: defaultDateFormat
|
||||
}}</mat-error
|
||||
>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="d-none">
|
||||
@ -165,7 +213,7 @@
|
||||
>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div>
|
||||
<div class="mb-3">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Note</mat-label>
|
||||
<textarea
|
||||
@ -178,6 +226,7 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
class="mb-3"
|
||||
[ngClass]="{ 'd-none': activityForm.controls['type']?.value !== 'ITEM' }"
|
||||
>
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
@ -193,6 +242,7 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div
|
||||
class="mb-3"
|
||||
[ngClass]="{ 'd-none': activityForm.controls['type']?.value !== 'ITEM' }"
|
||||
>
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
@ -207,7 +257,7 @@
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div [ngClass]="{ 'd-none': tags?.length <= 0 }">
|
||||
<div class="mb-3" [ngClass]="{ 'd-none': tags?.length <= 0 }">
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Tags</mat-label>
|
||||
<mat-chip-grid #tagsChipList>
|
||||
|
@ -1,13 +1,13 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatChipsModule } from '@angular/material/chips';
|
||||
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog';
|
||||
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
|
||||
|
@ -118,8 +118,8 @@ export class AllocationsPageComponent implements OnDestroy, OnInit {
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((aId) => {
|
||||
this.hasImpersonationId = !!aId;
|
||||
.subscribe((impersonationId) => {
|
||||
this.hasImpersonationId = !!impersonationId;
|
||||
});
|
||||
|
||||
this.filters$
|
||||
|
@ -109,8 +109,8 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((aId) => {
|
||||
this.hasImpersonationId = !!aId;
|
||||
.subscribe((impersonationId) => {
|
||||
this.hasImpersonationId = !!impersonationId;
|
||||
});
|
||||
|
||||
this.filters$
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
|
||||
import { DataService } from '@ghostfolio/client/services/data.service';
|
||||
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
|
||||
import { UserService } from '@ghostfolio/client/services/user/user.service';
|
||||
import { PortfolioReportRule, User } from '@ghostfolio/common/interfaces';
|
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
|
||||
@ -20,6 +21,7 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
public deviceType: string;
|
||||
public feeRules: PortfolioReportRule[];
|
||||
public fireWealth: Big;
|
||||
public hasImpersonationId: boolean;
|
||||
public hasPermissionToCreateOrder: boolean;
|
||||
public hasPermissionToUpdateUserSettings: boolean;
|
||||
public isLoading = false;
|
||||
@ -33,6 +35,7 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
private changeDetectorRef: ChangeDetectorRef,
|
||||
private dataService: DataService,
|
||||
private deviceService: DeviceDetectorService,
|
||||
private impersonationStorageService: ImpersonationStorageService,
|
||||
private userService: UserService
|
||||
) {}
|
||||
|
||||
@ -70,6 +73,13 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
this.changeDetectorRef.markForCheck();
|
||||
});
|
||||
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((impersonationId) => {
|
||||
this.hasImpersonationId = !!impersonationId;
|
||||
});
|
||||
|
||||
this.userService.stateChanged
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((state) => {
|
||||
@ -91,6 +101,45 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
});
|
||||
}
|
||||
|
||||
public onAnnualInterestRateChange(annualInterestRate: number) {
|
||||
this.dataService
|
||||
.putUserSetting({ annualInterestRate })
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(() => {
|
||||
this.userService.remove();
|
||||
|
||||
this.userService
|
||||
.get()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((user) => {
|
||||
this.user = user;
|
||||
|
||||
this.changeDetectorRef.markForCheck();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public onRetirementDateChange(retirementDate: Date) {
|
||||
this.dataService
|
||||
.putUserSetting({
|
||||
retirementDate: retirementDate.toISOString(),
|
||||
projectedTotalAmount: null
|
||||
})
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(() => {
|
||||
this.userService.remove();
|
||||
|
||||
this.userService
|
||||
.get()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((user) => {
|
||||
this.user = user;
|
||||
|
||||
this.changeDetectorRef.markForCheck();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public onSavingsRateChange(savingsRate: number) {
|
||||
this.dataService
|
||||
.putUserSetting({ savingsRate })
|
||||
@ -109,6 +158,27 @@ export class FirePageComponent implements OnDestroy, OnInit {
|
||||
});
|
||||
}
|
||||
|
||||
public onProjectedTotalAmountChange(projectedTotalAmount: number) {
|
||||
this.dataService
|
||||
.putUserSetting({
|
||||
projectedTotalAmount,
|
||||
retirementDate: null
|
||||
})
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(() => {
|
||||
this.userService.remove();
|
||||
|
||||
this.userService
|
||||
.get()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((user) => {
|
||||
this.user = user;
|
||||
|
||||
this.changeDetectorRef.markForCheck();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public ngOnDestroy() {
|
||||
this.unsubscribeSubject.next();
|
||||
this.unsubscribeSubject.complete();
|
||||
|
@ -11,13 +11,19 @@
|
||||
></gf-premium-indicator>
|
||||
</h4>
|
||||
<gf-fire-calculator
|
||||
[annualInterestRate]="user?.settings?.annualInterestRate"
|
||||
[colorScheme]="user?.settings?.colorScheme"
|
||||
[currency]="user?.settings?.baseCurrency"
|
||||
[deviceType]="deviceType"
|
||||
[fireWealth]="fireWealth?.toNumber()"
|
||||
[hasPermissionToUpdateUserSettings]="hasPermissionToUpdateUserSettings"
|
||||
[hasPermissionToUpdateUserSettings]="!hasImpersonationId && hasPermissionToUpdateUserSettings"
|
||||
[locale]="user?.settings?.locale"
|
||||
[projectedTotalAmount]="user?.settings?.projectedTotalAmount"
|
||||
[retirementDate]="user?.settings?.retirementDate"
|
||||
[savingsRate]="user?.settings?.savingsRate"
|
||||
(annualInterestRateChanged)="onAnnualInterestRateChange($event)"
|
||||
(projectedTotalAmountChanged)="onProjectedTotalAmountChange($event)"
|
||||
(retirementDateChanged)="onRetirementDateChange($event)"
|
||||
(savingsRateChanged)="onSavingsRateChange($event)"
|
||||
></gf-fire-calculator>
|
||||
</div>
|
||||
@ -69,12 +75,14 @@
|
||||
></gf-value>
|
||||
per month</span
|
||||
>, based on your total assets of
|
||||
<gf-value
|
||||
class="d-inline-block"
|
||||
[currency]="user?.settings?.baseCurrency"
|
||||
[locale]="user?.settings?.locale"
|
||||
[value]="fireWealth?.toNumber()"
|
||||
></gf-value>
|
||||
<span class="font-weight-bold"
|
||||
><gf-value
|
||||
class="d-inline-block"
|
||||
[currency]="user?.settings?.baseCurrency"
|
||||
[locale]="user?.settings?.locale"
|
||||
[value]="fireWealth?.toNumber()"
|
||||
></gf-value
|
||||
></span>
|
||||
and a withdrawal rate of 4%.
|
||||
</div>
|
||||
</div>
|
||||
|
@ -72,8 +72,8 @@ export class HoldingsPageComponent implements OnDestroy, OnInit {
|
||||
this.impersonationStorageService
|
||||
.onChangeHasImpersonation()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((aId) => {
|
||||
this.hasImpersonationId = !!aId;
|
||||
.subscribe((impersonationId) => {
|
||||
this.hasImpersonationId = !!impersonationId;
|
||||
});
|
||||
|
||||
this.filters$
|
||||
|
@ -280,6 +280,13 @@
|
||||
<ion-icon name="information-circle-outline"></ion-icon>
|
||||
</span>
|
||||
</li>
|
||||
<li class="align-items-center d-flex mb-1">
|
||||
<ion-icon
|
||||
class="mr-1"
|
||||
name="checkmark-circle-outline"
|
||||
></ion-icon>
|
||||
<span i18n>Professional Data Provider</span>
|
||||
</li>
|
||||
<li class="align-items-center d-flex mb-1">
|
||||
<ion-icon
|
||||
class="mr-1"
|
||||
|
@ -63,7 +63,7 @@ export class RegisterPageComponent implements OnDestroy, OnInit {
|
||||
|
||||
public async createAccount() {
|
||||
this.dataService
|
||||
.postUser({ country: this.userService.getCountry() })
|
||||
.postUser()
|
||||
.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.subscribe(({ accessToken, authToken, role }) => {
|
||||
this.openShowAccessTokenDialog(accessToken, authToken, role);
|
||||
|
@ -21,7 +21,6 @@
|
||||
class="d-inline-block"
|
||||
color="primary"
|
||||
mat-flat-button
|
||||
[disabled]="!demoAuthToken"
|
||||
(click)="createAccount()"
|
||||
>
|
||||
<ng-container i18n>Create Account</ng-container>
|
||||
|
@ -405,8 +405,8 @@ export class DataService {
|
||||
return this.http.post<OrderModel>(`/api/v1/order`, aOrder);
|
||||
}
|
||||
|
||||
public postUser({ country }: { country: string }) {
|
||||
return this.http.post<UserItem>(`/api/v1/user`, { country });
|
||||
public postUser() {
|
||||
return this.http.post<UserItem>(`/api/v1/user`, {});
|
||||
}
|
||||
|
||||
public putAccount(aAccount: UpdateAccountDto) {
|
||||
|
@ -6,9 +6,9 @@ import { SubscriptionInterstitialDialogParams } from '@ghostfolio/client/compone
|
||||
import { SubscriptionInterstitialDialog } from '@ghostfolio/client/components/subscription-interstitial-dialog/subscription-interstitial-dialog.component';
|
||||
import { User } from '@ghostfolio/common/interfaces';
|
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
|
||||
import { timezoneCitiesToCountries } from '@ghostfolio/common/timezone-cities-to-countries';
|
||||
import { parseISO } from 'date-fns';
|
||||
import { DeviceDetectorService } from 'ngx-device-detector';
|
||||
import { Subject, of } from 'rxjs';
|
||||
import { Subject, of, Observable } from 'rxjs';
|
||||
import { throwError } from 'rxjs';
|
||||
import { catchError, map, takeUntil } from 'rxjs/operators';
|
||||
|
||||
@ -46,27 +46,17 @@ export class UserService extends ObservableStore<UserStoreState> {
|
||||
}
|
||||
}
|
||||
|
||||
public getCountry() {
|
||||
let country: string;
|
||||
|
||||
if (Intl) {
|
||||
const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||
const timeZoneArray = timeZone.split('/');
|
||||
const city = timeZoneArray[timeZoneArray.length - 1];
|
||||
|
||||
country = timezoneCitiesToCountries[city];
|
||||
}
|
||||
|
||||
return country;
|
||||
}
|
||||
|
||||
public remove() {
|
||||
this.setState({ user: null }, UserStoreActions.RemoveUser);
|
||||
}
|
||||
|
||||
private fetchUser() {
|
||||
return this.http.get<User>('/api/v1/user').pipe(
|
||||
private fetchUser(): Observable<User> {
|
||||
return this.http.get<any>('/api/v1/user').pipe(
|
||||
map((user) => {
|
||||
if (user.settings?.retirementDate) {
|
||||
user.settings.retirementDate = parseISO(user.settings.retirementDate);
|
||||
}
|
||||
|
||||
this.setState({ user }, UserStoreActions.GetUser);
|
||||
|
||||
if (
|
||||
|
@ -6,7 +6,7 @@
|
||||
<target state="translated">Regististrieren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -50,7 +50,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12,14</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -122,7 +122,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">75,77</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -158,7 +158,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">122,123</context>
|
||||
<context context-type="linenumber">125</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -198,7 +202,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -250,7 +254,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">91,93</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -342,7 +346,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">97,98</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -382,11 +386,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">253,257</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">115,119</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -414,7 +418,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">260,265</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -449,18 +453,6 @@
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f835caf68bff562ddd23556a651e834d5af3380b" datatype="html">
|
||||
<source>Gather Data</source>
|
||||
<target state="translated">Daten einholen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="912825160188860007" datatype="html">
|
||||
<source>Please add a currency:</source>
|
||||
<target state="translated">Bitte Währung hinzufügen:</target>
|
||||
@ -535,7 +527,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="cc65b67b46b69cf06ff1f16a909e61612c9d57b8" datatype="html">
|
||||
<source>Gather Profile Data</source>
|
||||
<target state="translated">Profildaten einholen</target>
|
||||
<target state="translated">Profildaten herunterladen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">137</context>
|
||||
@ -657,12 +649,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="translated">Letzte Abfrage</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
|
||||
@ -878,7 +870,7 @@
|
||||
<target state="translated">Sicherheits-Token</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">10,14</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -890,15 +882,15 @@
|
||||
<target state="translated">oder</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">20,22</context>
|
||||
<context context-type="linenumber">20,19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">54,56</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,29</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -910,7 +902,7 @@
|
||||
<target state="translated">Einloggen mit Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">30,34</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d745a22ae7b825b146ca8185126c482597f1d485" datatype="html">
|
||||
@ -918,7 +910,7 @@
|
||||
<target state="translated">Einloggen mit Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">40,46</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d9b3881b98593a64eebeb867422c00e037b37b9b" datatype="html">
|
||||
@ -926,7 +918,7 @@
|
||||
<target state="translated">Eingeloggt bleiben</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">49,55</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="287d3301a32a65a1b31116bda5d3a6463158c42a" datatype="html">
|
||||
@ -938,7 +930,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">59,63</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="41c1e1f19aabc4a4bf198e4a189436a1f69257bb" datatype="html">
|
||||
@ -958,7 +950,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">14,15</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fe708b572beec788b18edd1b5852d63c07dfaead" datatype="html">
|
||||
@ -970,7 +962,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">17,21</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bbc9e4cebf91162be7d3e324ca5984d576e462c" datatype="html">
|
||||
@ -1094,11 +1086,15 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">15,17</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,122</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1150,7 +1146,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">212,214</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1266,7 +1262,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">113,109</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1726363342938046830" datatype="html">
|
||||
@ -1382,7 +1378,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">23,25</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1566,7 +1562,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">81,83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1826,7 +1822,7 @@
|
||||
<target state="translated">4% Regel</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="803941175683258052" datatype="html">
|
||||
@ -1858,7 +1854,7 @@
|
||||
<target state="translated">Aktivität bearbeiten</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">7,8</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
@ -1866,7 +1862,7 @@
|
||||
<target state="translate">Aktivität hinzufügen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -1874,7 +1870,7 @@
|
||||
<target state="translated">Wertsache</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">16,18</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ab4d451ff9ce6d18d53360c51e7cd6e91c69555" datatype="html">
|
||||
@ -1882,7 +1878,7 @@
|
||||
<target state="translated">Name, Symbol oder ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
|
||||
@ -1894,7 +1890,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">111,112</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1906,7 +1902,11 @@
|
||||
<target state="translated">Stückpreis</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">123,126</context>
|
||||
<context context-type="linenumber">126</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1918,11 +1918,11 @@
|
||||
<target state="translated">Gebühr</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">144,145</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">161,162</context>
|
||||
<context context-type="linenumber">209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1938,7 +1938,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170,173</context>
|
||||
<context context-type="linenumber">218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -1958,7 +1958,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">184,186</context>
|
||||
<context context-type="linenumber">233</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2309808536212982229" datatype="html">
|
||||
@ -1982,7 +1982,7 @@
|
||||
<target state="translated">Der Import wurde abgeschlossen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">102,101</context>
|
||||
<context context-type="linenumber">102</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5080775557941296581" datatype="html">
|
||||
@ -2042,7 +2042,7 @@
|
||||
<target state="translated">Weiter mit Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2050,7 +2050,7 @@
|
||||
<target state="translated">Weiter mit Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2201,28 +2201,12 @@
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b9739d407abc88d6f5876b1e0b548778589baf50" datatype="html">
|
||||
<source>Investment Horizon</source>
|
||||
<target state="translated">Anlagehorizont</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e6bbe25e83a1e135e8e1d3e2ceddadb8529c45e9" datatype="html">
|
||||
<source>years</source>
|
||||
<target state="translated">Jahre</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ba18e93c4572bfe6d14b2a3f333468b12f890e5d" datatype="html">
|
||||
<source>Annual Interest Rate</source>
|
||||
<target state="translated">Jahreszinssatz</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html">
|
||||
@ -2270,7 +2254,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">112,109</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7224997887539831269" datatype="html">
|
||||
@ -2342,7 +2326,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">199,201</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="936788a5ab949fe0d70098ba051ac7a44999ff08" datatype="html">
|
||||
@ -2422,7 +2406,7 @@
|
||||
<target state="translated">Projizierter Gesamtbetrag</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6762743264882388498" datatype="html">
|
||||
@ -2446,7 +2430,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3441715041566940420" datatype="html">
|
||||
@ -2454,7 +2438,7 @@
|
||||
<target state="translated">Verzinsung</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">293</context>
|
||||
<context context-type="linenumber">341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1054498214311181686" datatype="html">
|
||||
@ -2462,7 +2446,7 @@
|
||||
<target state="translated">Ersparnisse</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
<context context-type="linenumber">351</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="aad5320acd7453f912bc8714e72c2fa71e8ab18e" datatype="html">
|
||||
@ -2605,12 +2589,12 @@
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="458363f8e413759aa9e3235a53fd0f64cc916395" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, based on your total assets of <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="translated"> Wenn du heute in den Ruhestand gehen würdest, könnest du <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> pro Jahr<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> oder <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> pro Monat<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> entnehmen, bezogen auf dein Gesamtanlagevermögen von <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> und einer Entnahmerate von 4%. </target>
|
||||
<trans-unit id="dd9d3c5c9805d423310cdfcae53d61297ca62536" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>, based on your total assets of <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="new"> Wenn du heute in den Ruhestand gehen würdest, könnest du <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> pro Jahr<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> oder <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> pro Monat<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> entnehmen, bezogen auf dein Gesamtanlagevermögen von <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> und einer Entnahmerate von 4%. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">51,79</context>
|
||||
<context context-type="linenumber">57,87</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="616064537937996961" datatype="html">
|
||||
@ -2890,7 +2874,7 @@
|
||||
<target state="translated">Datei auswählen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">43,46</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6f9fd3da06dc9000eef0d4dcbb37747b303048e9" datatype="html">
|
||||
@ -2898,7 +2882,7 @@
|
||||
<target state="translated">Folgende Dateiformate werden unterstützt:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">47,50</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">
|
||||
@ -2906,7 +2890,7 @@
|
||||
<target state="translated">Zurück</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">107,111</context>
|
||||
<context context-type="linenumber">107</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ec2d3a89b366d1ca80be056e9e71f0165ae75c7b" datatype="html">
|
||||
@ -2998,7 +2982,7 @@
|
||||
<target state="translated">Importieren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">122,127</context>
|
||||
<context context-type="linenumber">122</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1803867056160333091" datatype="html">
|
||||
@ -3046,7 +3030,7 @@
|
||||
<target state="translated">Position</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">13,15</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="050be0e7937dec05c8c8ded71cebc0bb027b38f6" datatype="html">
|
||||
@ -3054,7 +3038,7 @@
|
||||
<target state="translated">Dividenden laden</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">29,33</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8036977202721714375" datatype="html">
|
||||
@ -3481,6 +3465,38 @@
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="translated">Ups! Der historische Wechselkurs konnte nicht abgerufen werden vom</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7383cd391b1967e03f0636c231d20f036d5c37ee" datatype="html">
|
||||
<source>Retirement Date</source>
|
||||
<target state="translated">Pensionierungsdatum</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="af22005ceeded8dba7571d8b93a3e06bd674c488" datatype="html">
|
||||
<source>Gather Historical Data</source>
|
||||
<target state="translated">Historische Daten herunterladen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<target state="translated">Crear una cuenta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -51,7 +51,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12,14</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -123,7 +123,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">75,77</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -159,7 +159,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">122,123</context>
|
||||
<context context-type="linenumber">125</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -199,7 +203,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -251,7 +255,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">91,93</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -343,7 +347,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">97,98</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -383,11 +387,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">253,257</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">115,119</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -415,7 +419,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">260,265</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -450,18 +454,6 @@
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f835caf68bff562ddd23556a651e834d5af3380b" datatype="html">
|
||||
<source>Gather Data</source>
|
||||
<target state="translated">Recoger datos</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="912825160188860007" datatype="html">
|
||||
<source>Please add a currency:</source>
|
||||
<target state="translated">Por favor, añade una divisa:</target>
|
||||
@ -658,12 +650,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<target state="translated">Última petición</target>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="new">Última petición</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
|
||||
@ -879,7 +871,7 @@
|
||||
<target state="translated">Token de seguridad</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">10,14</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -891,15 +883,15 @@
|
||||
<target state="translated">o</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">20,22</context>
|
||||
<context context-type="linenumber">20,19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">54,56</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,29</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -911,7 +903,7 @@
|
||||
<target state="translated">Iniciar sesión con Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">30,34</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d745a22ae7b825b146ca8185126c482597f1d485" datatype="html">
|
||||
@ -919,7 +911,7 @@
|
||||
<target state="translated">Iniciar sesión con Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">40,46</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d9b3881b98593a64eebeb867422c00e037b37b9b" datatype="html">
|
||||
@ -927,7 +919,7 @@
|
||||
<target state="translated">Seguir conectado</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">49,55</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="287d3301a32a65a1b31116bda5d3a6463158c42a" datatype="html">
|
||||
@ -939,7 +931,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">59,63</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="41c1e1f19aabc4a4bf198e4a189436a1f69257bb" datatype="html">
|
||||
@ -959,7 +951,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">14,15</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fe708b572beec788b18edd1b5852d63c07dfaead" datatype="html">
|
||||
@ -971,7 +963,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">17,21</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bbc9e4cebf91162be7d3e324ca5984d576e462c" datatype="html">
|
||||
@ -1095,11 +1087,15 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">15,17</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,122</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1151,7 +1147,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">212,214</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1267,7 +1263,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">113,109</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1726363342938046830" datatype="html">
|
||||
@ -1383,7 +1379,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">23,25</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1567,7 +1563,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">81,83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1827,7 +1823,7 @@
|
||||
<target state="translated">Regla del 4%</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="803941175683258052" datatype="html">
|
||||
@ -1859,7 +1855,7 @@
|
||||
<target state="translated">Actualizar opereación</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">7,8</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
@ -1867,7 +1863,7 @@
|
||||
<target state="translated">Añadir operación</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -1875,7 +1871,7 @@
|
||||
<target state="new">ARTÍCULO</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">16,18</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ab4d451ff9ce6d18d53360c51e7cd6e91c69555" datatype="html">
|
||||
@ -1883,7 +1879,7 @@
|
||||
<target state="translated">Nombre, símbolo o ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
|
||||
@ -1895,7 +1891,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">111,112</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1907,7 +1903,11 @@
|
||||
<target state="translated">Precio unitario</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">123,126</context>
|
||||
<context context-type="linenumber">126</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1919,11 +1919,11 @@
|
||||
<target state="translated">Comisión</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">144,145</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">161,162</context>
|
||||
<context context-type="linenumber">209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1939,7 +1939,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170,173</context>
|
||||
<context context-type="linenumber">218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -1959,7 +1959,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">184,186</context>
|
||||
<context context-type="linenumber">233</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2309808536212982229" datatype="html">
|
||||
@ -1983,7 +1983,7 @@
|
||||
<target state="translated">La importación se ha completado</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">102,101</context>
|
||||
<context context-type="linenumber">102</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5080775557941296581" datatype="html">
|
||||
@ -2043,7 +2043,7 @@
|
||||
<target state="translated">Continuar con Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2051,7 +2051,7 @@
|
||||
<target state="translated">Continuar con Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2202,28 +2202,12 @@
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b9739d407abc88d6f5876b1e0b548778589baf50" datatype="html">
|
||||
<source>Investment Horizon</source>
|
||||
<target state="translated">Horizonte de inversión</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e6bbe25e83a1e135e8e1d3e2ceddadb8529c45e9" datatype="html">
|
||||
<source>years</source>
|
||||
<target state="translated">años</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ba18e93c4572bfe6d14b2a3f333468b12f890e5d" datatype="html">
|
||||
<source>Annual Interest Rate</source>
|
||||
<target state="translated">Tipo de interés anual</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html">
|
||||
@ -2283,7 +2267,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">112,109</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">
|
||||
@ -2323,7 +2307,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">199,201</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
|
||||
@ -2423,7 +2407,7 @@
|
||||
<target state="translated">Importe total previsto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1054498214311181686" datatype="html">
|
||||
@ -2431,7 +2415,7 @@
|
||||
<target state="translated">Ahorros</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
<context context-type="linenumber">351</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3441715041566940420" datatype="html">
|
||||
@ -2439,7 +2423,7 @@
|
||||
<target state="translated">Interés</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">293</context>
|
||||
<context context-type="linenumber">341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5213771062241898526" datatype="html">
|
||||
@ -2455,7 +2439,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6762743264882388498" datatype="html">
|
||||
@ -2606,12 +2590,12 @@
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="458363f8e413759aa9e3235a53fd0f64cc916395" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, based on your total assets of <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="translated"> Si te jubilas hoy, podrías retirar <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> por año<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> o <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> por mes<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, calculado sobre el total de activos de <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> y una tasa de disposición del 4%. </target>
|
||||
<trans-unit id="dd9d3c5c9805d423310cdfcae53d61297ca62536" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>, based on your total assets of <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="new"> Si te jubilas hoy, podrías retirar <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> por año<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> o <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> por mes<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, calculado sobre el total de activos de <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> y una tasa de disposición del 4%. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">51,79</context>
|
||||
<context context-type="linenumber">57,87</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="616064537937996961" datatype="html">
|
||||
@ -2891,7 +2875,7 @@
|
||||
<target state="translated">Elegir archivo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">43,46</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6f9fd3da06dc9000eef0d4dcbb37747b303048e9" datatype="html">
|
||||
@ -2899,7 +2883,7 @@
|
||||
<target state="translated">Los siguientes formatos de archivo están soportados:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">47,50</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">
|
||||
@ -2907,7 +2891,7 @@
|
||||
<target state="translated">Volver</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">107,111</context>
|
||||
<context context-type="linenumber">107</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ec2d3a89b366d1ca80be056e9e71f0165ae75c7b" datatype="html">
|
||||
@ -2999,7 +2983,7 @@
|
||||
<target state="new">Import</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">122,127</context>
|
||||
<context context-type="linenumber">122</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1803867056160333091" datatype="html">
|
||||
@ -3047,7 +3031,7 @@
|
||||
<target state="new">Holding</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">13,15</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="050be0e7937dec05c8c8ded71cebc0bb027b38f6" datatype="html">
|
||||
@ -3055,7 +3039,7 @@
|
||||
<target state="new">Load Dividends</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">29,33</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8036977202721714375" datatype="html">
|
||||
@ -3482,6 +3466,38 @@
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="new">Oops! Could not get the historical exchange rate from</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="af22005ceeded8dba7571d8b93a3e06bd674c488" datatype="html">
|
||||
<source>Gather Historical Data</source>
|
||||
<target state="new">Gather Historical Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7383cd391b1967e03f0636c231d20f036d5c37ee" datatype="html">
|
||||
<source>Retirement Date</source>
|
||||
<target state="new">Retirement Date</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -50,7 +50,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12,14</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -146,7 +146,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">75,77</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -186,7 +186,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">81,83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -218,7 +218,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">122,123</context>
|
||||
<context context-type="linenumber">125</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -258,7 +262,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -302,7 +306,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">91,93</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -402,7 +406,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">97,98</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -442,11 +446,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">253,257</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">115,119</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -474,7 +478,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">260,265</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4550487415324294802" datatype="html">
|
||||
@ -502,7 +506,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">184,186</context>
|
||||
<context context-type="linenumber">233</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="27fe3d097c64eaec7ff564358f80fb7ba795f484" datatype="html">
|
||||
@ -522,7 +526,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">199,201</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -605,18 +609,6 @@
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f835caf68bff562ddd23556a651e834d5af3380b" datatype="html">
|
||||
<source>Gather Data</source>
|
||||
<target state="translated">Obtenir les Données</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c8d1785038d461ec66b5799db21864182b35900a" datatype="html">
|
||||
<source>Refresh</source>
|
||||
<target state="translated">Rafraîchir</target>
|
||||
@ -698,7 +690,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170,173</context>
|
||||
<context context-type="linenumber">218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="912825160188860007" datatype="html">
|
||||
@ -802,7 +794,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">212,214</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="62f17fd50522539fd4c85854828db9d2e1c5330f" datatype="html">
|
||||
@ -925,12 +917,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<target state="translated">Dernière Requête</target>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="new">Dernière Requête</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||
@ -1118,7 +1110,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">59,63</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3ccabfc3dc288eaa2355ba43298c739f85951ec3" datatype="html">
|
||||
@ -1238,7 +1230,7 @@
|
||||
<target state="translated">Jeton de Sécurité</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">10,14</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -1250,15 +1242,15 @@
|
||||
<target state="translated">ou</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">20,22</context>
|
||||
<context context-type="linenumber">20,19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">54,56</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,29</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -1270,7 +1262,7 @@
|
||||
<target state="translated">Se connecter avec Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">30,34</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d745a22ae7b825b146ca8185126c482597f1d485" datatype="html">
|
||||
@ -1278,7 +1270,7 @@
|
||||
<target state="translated">Se connecter avec Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">40,46</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d9b3881b98593a64eebeb867422c00e037b37b9b" datatype="html">
|
||||
@ -1286,7 +1278,7 @@
|
||||
<target state="translated">Rester connecté</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">49,55</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="41c1e1f19aabc4a4bf198e4a189436a1f69257bb" datatype="html">
|
||||
@ -1306,7 +1298,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">14,15</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fe708b572beec788b18edd1b5852d63c07dfaead" datatype="html">
|
||||
@ -1318,7 +1310,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">17,21</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bbc9e4cebf91162be7d3e324ca5984d576e462c" datatype="html">
|
||||
@ -1450,11 +1442,15 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">15,17</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,122</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1506,7 +1502,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">111,112</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1598,7 +1594,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">112,109</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7224997887539831269" datatype="html">
|
||||
@ -1622,7 +1618,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">113,109</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1726363342938046830" datatype="html">
|
||||
@ -1738,7 +1734,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">23,25</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -2098,7 +2094,7 @@
|
||||
<target state="translated">Mettre à jour activité</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">7,8</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
@ -2106,7 +2102,7 @@
|
||||
<target state="translated">Ajouter activité</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -2114,7 +2110,7 @@
|
||||
<target state="translated">Bien</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">16,18</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ab4d451ff9ce6d18d53360c51e7cd6e91c69555" datatype="html">
|
||||
@ -2122,7 +2118,7 @@
|
||||
<target state="translated">Nom, symbole, ou ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6713459747f0f67e53a8a0be0bba45ed324bc112" datatype="html">
|
||||
@ -2130,7 +2126,11 @@
|
||||
<target state="translated">Prix Unitaire</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">123,126</context>
|
||||
<context context-type="linenumber">126</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -2142,11 +2142,11 @@
|
||||
<target state="translated">Frais</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">144,145</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">161,162</context>
|
||||
<context context-type="linenumber">209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -2166,7 +2166,7 @@
|
||||
<target state="translated">L'import est terminé</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">102,101</context>
|
||||
<context context-type="linenumber">102</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8763985977445247551" datatype="html">
|
||||
@ -2182,7 +2182,7 @@
|
||||
<target state="translated">Choisir Fichier</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">43,46</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6f9fd3da06dc9000eef0d4dcbb37747b303048e9" datatype="html">
|
||||
@ -2190,7 +2190,7 @@
|
||||
<target state="translated">Les formats de fichier suivants sont supportés :</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">47,50</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">
|
||||
@ -2198,7 +2198,7 @@
|
||||
<target state="translated">Retour</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">107,111</context>
|
||||
<context context-type="linenumber">107</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a059709f71aa4c0ac219e160e78a738682ca6a36" datatype="html">
|
||||
@ -2206,7 +2206,7 @@
|
||||
<target state="translated">Importer</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">122,127</context>
|
||||
<context context-type="linenumber">122</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2666668717343771434" datatype="html">
|
||||
@ -2386,7 +2386,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6762743264882388498" datatype="html">
|
||||
@ -2474,15 +2474,15 @@
|
||||
<target state="translated">Règle des 4%</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="458363f8e413759aa9e3235a53fd0f64cc916395" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, based on your total assets of <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="translate"> Si vous prenez votre retraite aujourd'hui, vous pourriez retirer <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> par an<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> ou <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> par mois<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, sur base de vos actifs totaux de <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> et un taux de retrait de 4%. </target>
|
||||
<trans-unit id="dd9d3c5c9805d423310cdfcae53d61297ca62536" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>, based on your total assets of <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="new"> Si vous prenez votre retraite aujourd'hui, vous pourriez retirer <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> par an<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> ou <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> par mois<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, sur base de vos actifs totaux de <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> et un taux de retrait de 4%. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">51,79</context>
|
||||
<context context-type="linenumber">57,87</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4945c8e3bbf650f8dc6d03b16553f2c0bac42b11" datatype="html">
|
||||
@ -2558,7 +2558,7 @@
|
||||
<target state="translated">Creér Compte</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -2570,7 +2570,7 @@
|
||||
<target state="translated">Continue avec Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2578,7 +2578,7 @@
|
||||
<target state="translated">Continuer avec Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2745,28 +2745,12 @@
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b9739d407abc88d6f5876b1e0b548778589baf50" datatype="html">
|
||||
<source>Investment Horizon</source>
|
||||
<target state="translated">Horizon d'Investissement</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e6bbe25e83a1e135e8e1d3e2ceddadb8529c45e9" datatype="html">
|
||||
<source>years</source>
|
||||
<target state="translated">années</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ba18e93c4572bfe6d14b2a3f333468b12f890e5d" datatype="html">
|
||||
<source>Annual Interest Rate</source>
|
||||
<target state="translated">Taux d'Intérêt Annuel</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e34e2478d2d30c9d01758d01b7212411171b9bd5" datatype="html">
|
||||
@ -2774,7 +2758,7 @@
|
||||
<target state="translated">Montant Total Prévu</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3441715041566940420" datatype="html">
|
||||
@ -2782,7 +2766,7 @@
|
||||
<target state="translated">Intérêt</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">293</context>
|
||||
<context context-type="linenumber">341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1054498214311181686" datatype="html">
|
||||
@ -2790,7 +2774,7 @@
|
||||
<target state="translated">Épargne</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
<context context-type="linenumber">351</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2ee26d58f2707416e636887111d5603b35346c4a" datatype="html">
|
||||
@ -3045,7 +3029,7 @@
|
||||
<target state="translated">Position</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">13,15</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="050be0e7937dec05c8c8ded71cebc0bb027b38f6" datatype="html">
|
||||
@ -3053,7 +3037,7 @@
|
||||
<target state="translated">Charger Dividendes</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">29,33</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8036977202721714375" datatype="html">
|
||||
@ -3480,6 +3464,38 @@
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="new">Oops! Could not get the historical exchange rate from</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="af22005ceeded8dba7571d8b93a3e06bd674c488" datatype="html">
|
||||
<source>Gather Historical Data</source>
|
||||
<target state="new">Gather Historical Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7383cd391b1967e03f0636c231d20f036d5c37ee" datatype="html">
|
||||
<source>Retirement Date</source>
|
||||
<target state="new">Retirement Date</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<target state="translated">Crea un account</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -51,7 +51,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12,14</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -123,7 +123,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">75,77</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -159,7 +159,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">122,123</context>
|
||||
<context context-type="linenumber">125</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -199,7 +203,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -251,7 +255,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">91,93</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -343,7 +347,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">97,98</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -383,11 +387,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">253,257</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">115,119</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -415,7 +419,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">260,265</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -450,18 +454,6 @@
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f835caf68bff562ddd23556a651e834d5af3380b" datatype="html">
|
||||
<source>Gather Data</source>
|
||||
<target state="translated">Raccogli i dati</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="912825160188860007" datatype="html">
|
||||
<source>Please add a currency:</source>
|
||||
<target state="translated">Aggiungi una valuta:</target>
|
||||
@ -658,12 +650,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<target state="translated">Ultima richiesta</target>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="new">Ultima richiesta</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
|
||||
@ -879,7 +871,7 @@
|
||||
<target state="translated">Token di sicurezza</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">10,14</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -891,15 +883,15 @@
|
||||
<target state="translated">oppure</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">20,22</context>
|
||||
<context context-type="linenumber">20,19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">54,56</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,29</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -911,7 +903,7 @@
|
||||
<target state="translated">Accedi con Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">30,34</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d745a22ae7b825b146ca8185126c482597f1d485" datatype="html">
|
||||
@ -919,7 +911,7 @@
|
||||
<target state="translated">Accedi con Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">40,46</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d9b3881b98593a64eebeb867422c00e037b37b9b" datatype="html">
|
||||
@ -927,7 +919,7 @@
|
||||
<target state="translated">Rimani connesso</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">49,55</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="287d3301a32a65a1b31116bda5d3a6463158c42a" datatype="html">
|
||||
@ -939,7 +931,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">59,63</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="41c1e1f19aabc4a4bf198e4a189436a1f69257bb" datatype="html">
|
||||
@ -959,7 +951,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">14,15</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fe708b572beec788b18edd1b5852d63c07dfaead" datatype="html">
|
||||
@ -971,7 +963,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">17,21</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bbc9e4cebf91162be7d3e324ca5984d576e462c" datatype="html">
|
||||
@ -1095,11 +1087,15 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">15,17</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,122</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1151,7 +1147,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">212,214</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1267,7 +1263,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">113,109</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1726363342938046830" datatype="html">
|
||||
@ -1383,7 +1379,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">23,25</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1567,7 +1563,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">81,83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1827,7 +1823,7 @@
|
||||
<target state="translated">Regola del 4%</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="803941175683258052" datatype="html">
|
||||
@ -1859,7 +1855,7 @@
|
||||
<target state="translated">Aggiorna l'attività</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">7,8</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
@ -1867,7 +1863,7 @@
|
||||
<target state="translated">Aggiungi un'attività</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -1875,7 +1871,7 @@
|
||||
<target state="new">ARTICOLO</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">16,18</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ab4d451ff9ce6d18d53360c51e7cd6e91c69555" datatype="html">
|
||||
@ -1883,7 +1879,7 @@
|
||||
<target state="translated">Nome, simbolo o ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
|
||||
@ -1895,7 +1891,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">111,112</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1907,7 +1903,11 @@
|
||||
<target state="translated">Prezzo unitario</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">123,126</context>
|
||||
<context context-type="linenumber">126</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1919,11 +1919,11 @@
|
||||
<target state="translated">Commissione</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">144,145</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">161,162</context>
|
||||
<context context-type="linenumber">209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1939,7 +1939,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170,173</context>
|
||||
<context context-type="linenumber">218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -1959,7 +1959,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">184,186</context>
|
||||
<context context-type="linenumber">233</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2309808536212982229" datatype="html">
|
||||
@ -1983,7 +1983,7 @@
|
||||
<target state="translated">L'importazione è stata completata</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">102,101</context>
|
||||
<context context-type="linenumber">102</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5080775557941296581" datatype="html">
|
||||
@ -2043,7 +2043,7 @@
|
||||
<target state="translated">Continua con Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2051,7 +2051,7 @@
|
||||
<target state="translated">Continua con Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2202,28 +2202,12 @@
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b9739d407abc88d6f5876b1e0b548778589baf50" datatype="html">
|
||||
<source>Investment Horizon</source>
|
||||
<target state="translated">Orizzonte di investimento</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e6bbe25e83a1e135e8e1d3e2ceddadb8529c45e9" datatype="html">
|
||||
<source>years</source>
|
||||
<target state="translated">anni</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ba18e93c4572bfe6d14b2a3f333468b12f890e5d" datatype="html">
|
||||
<source>Annual Interest Rate</source>
|
||||
<target state="translated">Tasso di interesse annuo</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html">
|
||||
@ -2283,7 +2267,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">112,109</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">
|
||||
@ -2323,7 +2307,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">199,201</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
|
||||
@ -2423,7 +2407,7 @@
|
||||
<target state="translated">Importo totale previsto</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1054498214311181686" datatype="html">
|
||||
@ -2431,7 +2415,7 @@
|
||||
<target state="translated">Risparmio</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
<context context-type="linenumber">351</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3441715041566940420" datatype="html">
|
||||
@ -2439,7 +2423,7 @@
|
||||
<target state="translated">Interesse</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">293</context>
|
||||
<context context-type="linenumber">341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5213771062241898526" datatype="html">
|
||||
@ -2455,7 +2439,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6762743264882388498" datatype="html">
|
||||
@ -2606,12 +2590,12 @@
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="458363f8e413759aa9e3235a53fd0f64cc916395" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, based on your total assets of <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="translated">Se andassi in pensione oggi, potresti ritirare <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> all'anno<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> o <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> al mese<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, sulla base dei tuoi asset totali pari a <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> e un tasso di prelievo del 4%. </target>
|
||||
<trans-unit id="dd9d3c5c9805d423310cdfcae53d61297ca62536" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>, based on your total assets of <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="new">Se andassi in pensione oggi, potresti ritirare <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> all'anno<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> o <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> al mese<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, sulla base dei tuoi asset totali pari a <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> e un tasso di prelievo del 4%. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">51,79</context>
|
||||
<context context-type="linenumber">57,87</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="616064537937996961" datatype="html">
|
||||
@ -2891,7 +2875,7 @@
|
||||
<target state="new">Choose File</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">43,46</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6f9fd3da06dc9000eef0d4dcbb37747b303048e9" datatype="html">
|
||||
@ -2899,7 +2883,7 @@
|
||||
<target state="new">The following file formats are supported:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">47,50</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">
|
||||
@ -2907,7 +2891,7 @@
|
||||
<target state="new">Back</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">107,111</context>
|
||||
<context context-type="linenumber">107</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ec2d3a89b366d1ca80be056e9e71f0165ae75c7b" datatype="html">
|
||||
@ -2999,7 +2983,7 @@
|
||||
<target state="new">Import</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">122,127</context>
|
||||
<context context-type="linenumber">122</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1803867056160333091" datatype="html">
|
||||
@ -3047,7 +3031,7 @@
|
||||
<target state="new">Holding</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">13,15</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="050be0e7937dec05c8c8ded71cebc0bb027b38f6" datatype="html">
|
||||
@ -3055,7 +3039,7 @@
|
||||
<target state="new">Load Dividends</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">29,33</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8036977202721714375" datatype="html">
|
||||
@ -3482,6 +3466,38 @@
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="new">Oops! Could not get the historical exchange rate from</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="af22005ceeded8dba7571d8b93a3e06bd674c488" datatype="html">
|
||||
<source>Gather Historical Data</source>
|
||||
<target state="new">Gather Historical Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7383cd391b1967e03f0636c231d20f036d5c37ee" datatype="html">
|
||||
<source>Retirement Date</source>
|
||||
<target state="new">Retirement Date</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<target state="translated">Account aanmaken</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -50,7 +50,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12,14</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -122,7 +122,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">75,77</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -158,7 +158,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">122,123</context>
|
||||
<context context-type="linenumber">125</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -198,7 +202,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -250,7 +254,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">91,93</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -342,7 +346,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">97,98</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -382,11 +386,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">253,257</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">115,119</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -414,7 +418,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">260,265</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -449,18 +453,6 @@
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f835caf68bff562ddd23556a651e834d5af3380b" datatype="html">
|
||||
<source>Gather Data</source>
|
||||
<target state="translated">Gegevens verzamelen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="912825160188860007" datatype="html">
|
||||
<source>Please add a currency:</source>
|
||||
<target state="translated">Voeg een valuta toe:</target>
|
||||
@ -657,12 +649,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<target state="translated">Laatste verzoek</target>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="new">Laatste verzoek</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
|
||||
@ -878,7 +870,7 @@
|
||||
<target state="translated">Beveiligingstoken</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">10,14</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -890,15 +882,15 @@
|
||||
<target state="translated">of</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">20,22</context>
|
||||
<context context-type="linenumber">20,19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">54,56</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,29</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -910,7 +902,7 @@
|
||||
<target state="translated">Aanmelden met Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">30,34</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d745a22ae7b825b146ca8185126c482597f1d485" datatype="html">
|
||||
@ -918,7 +910,7 @@
|
||||
<target state="translated">Aanmelden met Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">40,46</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d9b3881b98593a64eebeb867422c00e037b37b9b" datatype="html">
|
||||
@ -926,7 +918,7 @@
|
||||
<target state="translated">Aangemeld blijven</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">49,55</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="287d3301a32a65a1b31116bda5d3a6463158c42a" datatype="html">
|
||||
@ -938,7 +930,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">59,63</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="41c1e1f19aabc4a4bf198e4a189436a1f69257bb" datatype="html">
|
||||
@ -958,7 +950,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">14,15</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fe708b572beec788b18edd1b5852d63c07dfaead" datatype="html">
|
||||
@ -970,7 +962,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">17,21</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bbc9e4cebf91162be7d3e324ca5984d576e462c" datatype="html">
|
||||
@ -1094,11 +1086,15 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">15,17</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,122</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1150,7 +1146,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">212,214</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1266,7 +1262,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">113,109</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1726363342938046830" datatype="html">
|
||||
@ -1382,7 +1378,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">23,25</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1566,7 +1562,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">81,83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1826,7 +1822,7 @@
|
||||
<target state="translated">4% regel</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="803941175683258052" datatype="html">
|
||||
@ -1858,7 +1854,7 @@
|
||||
<target state="translated">Activiteit bijwerken</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">7,8</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
@ -1866,7 +1862,7 @@
|
||||
<target state="translated">Activiteit toevoegen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
@ -1874,7 +1870,7 @@
|
||||
<target state="translated">Item</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">16,18</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ab4d451ff9ce6d18d53360c51e7cd6e91c69555" datatype="html">
|
||||
@ -1882,7 +1878,7 @@
|
||||
<target state="translated">Naam, symbool of ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
|
||||
@ -1894,7 +1890,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">111,112</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1906,7 +1902,11 @@
|
||||
<target state="translated">Prijs per eenheid</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">123,126</context>
|
||||
<context context-type="linenumber">126</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1918,11 +1918,11 @@
|
||||
<target state="translated">Transactiekosten</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">144,145</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">161,162</context>
|
||||
<context context-type="linenumber">209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1938,7 +1938,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170,173</context>
|
||||
<context context-type="linenumber">218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -1958,7 +1958,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">184,186</context>
|
||||
<context context-type="linenumber">233</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2309808536212982229" datatype="html">
|
||||
@ -1982,7 +1982,7 @@
|
||||
<target state="translated">Import is voltooid</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">102,101</context>
|
||||
<context context-type="linenumber">102</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5080775557941296581" datatype="html">
|
||||
@ -2042,7 +2042,7 @@
|
||||
<target state="translated">Ga verder met Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2050,7 +2050,7 @@
|
||||
<target state="translated">Verder met Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2201,28 +2201,12 @@
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b9739d407abc88d6f5876b1e0b548778589baf50" datatype="html">
|
||||
<source>Investment Horizon</source>
|
||||
<target state="translated">Investeringshorizon</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e6bbe25e83a1e135e8e1d3e2ceddadb8529c45e9" datatype="html">
|
||||
<source>years</source>
|
||||
<target state="translated">jaren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ba18e93c4572bfe6d14b2a3f333468b12f890e5d" datatype="html">
|
||||
<source>Annual Interest Rate</source>
|
||||
<target state="translated">Jaarlijkse rentevoet</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html">
|
||||
@ -2282,7 +2266,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">112,109</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">
|
||||
@ -2322,7 +2306,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">199,201</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
|
||||
@ -2422,7 +2406,7 @@
|
||||
<target state="translated">Verwacht totaalbedrag</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1054498214311181686" datatype="html">
|
||||
@ -2430,7 +2414,7 @@
|
||||
<target state="translated">Besparingen</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
<context context-type="linenumber">351</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3441715041566940420" datatype="html">
|
||||
@ -2438,7 +2422,7 @@
|
||||
<target state="translated">Rente</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">293</context>
|
||||
<context context-type="linenumber">341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5213771062241898526" datatype="html">
|
||||
@ -2454,7 +2438,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6762743264882388498" datatype="html">
|
||||
@ -2605,12 +2589,12 @@
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="458363f8e413759aa9e3235a53fd0f64cc916395" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, based on your total assets of <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="translated"> Mocht u vandaag met pension gaan, kunt u <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per jaar<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> of <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per maand<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> opnemen, gebaseerd op al uw activa <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> en een opnamepercentage van 4%. </target>
|
||||
<trans-unit id="dd9d3c5c9805d423310cdfcae53d61297ca62536" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>, based on your total assets of <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="new"> Mocht u vandaag met pension gaan, kunt u <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per jaar<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> of <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per maand<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> opnemen, gebaseerd op al uw activa <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> en een opnamepercentage van 4%. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">51,79</context>
|
||||
<context context-type="linenumber">57,87</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="616064537937996961" datatype="html">
|
||||
@ -2890,7 +2874,7 @@
|
||||
<target state="translated">Kies bestand</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">43,46</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6f9fd3da06dc9000eef0d4dcbb37747b303048e9" datatype="html">
|
||||
@ -2898,7 +2882,7 @@
|
||||
<target state="translated">The volgende bestandsformaten worden ondersteund:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">47,50</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">
|
||||
@ -2906,7 +2890,7 @@
|
||||
<target state="translated">Terug</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">107,111</context>
|
||||
<context context-type="linenumber">107</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ec2d3a89b366d1ca80be056e9e71f0165ae75c7b" datatype="html">
|
||||
@ -2998,7 +2982,7 @@
|
||||
<target state="translated">Importeren</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">122,127</context>
|
||||
<context context-type="linenumber">122</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1803867056160333091" datatype="html">
|
||||
@ -3046,7 +3030,7 @@
|
||||
<target state="translated">Participatie</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">13,15</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="050be0e7937dec05c8c8ded71cebc0bb027b38f6" datatype="html">
|
||||
@ -3054,7 +3038,7 @@
|
||||
<target state="new">Load Dividends</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">29,33</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8036977202721714375" datatype="html">
|
||||
@ -3481,6 +3465,38 @@
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="new">Oops! Could not get the historical exchange rate from</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7383cd391b1967e03f0636c231d20f036d5c37ee" datatype="html">
|
||||
<source>Retirement Date</source>
|
||||
<target state="translated">Pensioen Datum</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="af22005ceeded8dba7571d8b93a3e06bd674c488" datatype="html">
|
||||
<source>Gather Historical Data</source>
|
||||
<target state="new">Gather Historical Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -50,7 +50,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12,14</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -146,7 +146,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">75,77</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -186,7 +186,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">81,83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -218,7 +218,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">122,123</context>
|
||||
<context context-type="linenumber">125</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -258,7 +262,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -302,7 +306,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">91,93</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -402,7 +406,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">97,98</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -442,11 +446,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">253,257</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">115,119</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -474,7 +478,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">260,265</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4550487415324294802" datatype="html">
|
||||
@ -502,7 +506,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">184,186</context>
|
||||
<context context-type="linenumber">233</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="27fe3d097c64eaec7ff564358f80fb7ba795f484" datatype="html">
|
||||
@ -522,7 +526,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">199,201</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -605,18 +609,6 @@
|
||||
<context context-type="linenumber">38</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f835caf68bff562ddd23556a651e834d5af3380b" datatype="html">
|
||||
<source>Gather Data</source>
|
||||
<target state="new">Gather Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="912825160188860007" datatype="html">
|
||||
<source>Please add a currency:</source>
|
||||
<target state="new">Please add a currency:</target>
|
||||
@ -809,12 +801,12 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<target state="new">Last Request</target>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<target state="new"> Last Request </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3cc9c2ae277393b3946b38c088dabff671b1ee1b" datatype="html">
|
||||
@ -1002,7 +994,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">59,63</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3ccabfc3dc288eaa2355ba43298c739f85951ec3" datatype="html">
|
||||
@ -1114,7 +1106,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="112783260724635106" datatype="html">
|
||||
@ -1138,7 +1130,7 @@
|
||||
<target state="new">Security Token</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">10,14</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -1150,15 +1142,15 @@
|
||||
<target state="new">or</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">20,22</context>
|
||||
<context context-type="linenumber">20,19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">54,56</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,29</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -1170,7 +1162,7 @@
|
||||
<target state="new">Sign in with Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">30,34</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d745a22ae7b825b146ca8185126c482597f1d485" datatype="html">
|
||||
@ -1178,7 +1170,7 @@
|
||||
<target state="new">Sign in with Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">40,46</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d9b3881b98593a64eebeb867422c00e037b37b9b" datatype="html">
|
||||
@ -1186,7 +1178,7 @@
|
||||
<target state="new">Stay signed in</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">49,55</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="41c1e1f19aabc4a4bf198e4a189436a1f69257bb" datatype="html">
|
||||
@ -1206,7 +1198,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">14,15</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fe708b572beec788b18edd1b5852d63c07dfaead" datatype="html">
|
||||
@ -1218,7 +1210,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">17,21</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bbc9e4cebf91162be7d3e324ca5984d576e462c" datatype="html">
|
||||
@ -1350,11 +1342,15 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">15,17</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,122</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1406,7 +1402,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">111,112</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1498,7 +1494,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">212,214</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1586,7 +1582,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">112,109</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7224997887539831269" datatype="html">
|
||||
@ -1610,7 +1606,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">113,109</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1726363342938046830" datatype="html">
|
||||
@ -1726,7 +1722,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">23,25</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -2038,7 +2034,7 @@
|
||||
<target state="new">Update activity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">7,8</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
@ -2046,7 +2042,7 @@
|
||||
<target state="new">Add activity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3229595422546554334" datatype="html">
|
||||
@ -2062,7 +2058,7 @@
|
||||
<target state="new">Item</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">16,18</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ab4d451ff9ce6d18d53360c51e7cd6e91c69555" datatype="html">
|
||||
@ -2070,7 +2066,7 @@
|
||||
<target state="new">Name, symbol or ISIN</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6713459747f0f67e53a8a0be0bba45ed324bc112" datatype="html">
|
||||
@ -2078,7 +2074,11 @@
|
||||
<target state="new">Unit Price</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">123,126</context>
|
||||
<context context-type="linenumber">126</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -2090,11 +2090,11 @@
|
||||
<target state="new">Fee</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">144,145</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">161,162</context>
|
||||
<context context-type="linenumber">209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -2110,7 +2110,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170,173</context>
|
||||
<context context-type="linenumber">218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="848497846891931418" datatype="html">
|
||||
@ -2126,7 +2126,7 @@
|
||||
<target state="new">Import has been completed</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">102,101</context>
|
||||
<context context-type="linenumber">102</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="73f8489a3ae4d805787b8350d3d91e03e830115b" datatype="html">
|
||||
@ -2134,7 +2134,7 @@
|
||||
<target state="new">Choose File</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">43,46</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6f9fd3da06dc9000eef0d4dcbb37747b303048e9" datatype="html">
|
||||
@ -2142,7 +2142,7 @@
|
||||
<target state="new">The following file formats are supported:</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">47,50</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">
|
||||
@ -2150,7 +2150,7 @@
|
||||
<target state="new">Back</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">107,111</context>
|
||||
<context context-type="linenumber">107</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2666668717343771434" datatype="html">
|
||||
@ -2386,15 +2386,15 @@
|
||||
<target state="new">4% Rule</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="458363f8e413759aa9e3235a53fd0f64cc916395" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, based on your total assets of <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="new"> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, based on your total assets of <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> and a withdrawal rate of 4%. </target>
|
||||
<trans-unit id="dd9d3c5c9805d423310cdfcae53d61297ca62536" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>, based on your total assets of <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> and a withdrawal rate of 4%. </source>
|
||||
<target state="new"> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>, based on your total assets of <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> and a withdrawal rate of 4%. </target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">51,79</context>
|
||||
<context context-type="linenumber">57,87</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="803941175683258052" datatype="html">
|
||||
@ -2482,7 +2482,7 @@
|
||||
<target state="new">Create Account</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -2494,7 +2494,7 @@
|
||||
<target state="new">Continue with Internet Identity</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
@ -2502,7 +2502,7 @@
|
||||
<target state="new">Continue with Google</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -2661,28 +2661,12 @@
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b9739d407abc88d6f5876b1e0b548778589baf50" datatype="html">
|
||||
<source>Investment Horizon</source>
|
||||
<target state="new">Investment Horizon</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e6bbe25e83a1e135e8e1d3e2ceddadb8529c45e9" datatype="html">
|
||||
<source>years</source>
|
||||
<target state="new">years</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ba18e93c4572bfe6d14b2a3f333468b12f890e5d" datatype="html">
|
||||
<source>Annual Interest Rate</source>
|
||||
<target state="new">Annual Interest Rate</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e34e2478d2d30c9d01758d01b7212411171b9bd5" datatype="html">
|
||||
@ -2690,7 +2674,7 @@
|
||||
<target state="new">Projected Total Amount</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3441715041566940420" datatype="html">
|
||||
@ -2698,7 +2682,7 @@
|
||||
<target state="new">Interest</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">293</context>
|
||||
<context context-type="linenumber">341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1054498214311181686" datatype="html">
|
||||
@ -2706,7 +2690,7 @@
|
||||
<target state="new">Savings</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
<context context-type="linenumber">351</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4086606389696938932" datatype="html">
|
||||
@ -3006,7 +2990,7 @@
|
||||
<target state="new">Import</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">122,127</context>
|
||||
<context context-type="linenumber">122</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7765499580020598783" datatype="html">
|
||||
@ -3046,7 +3030,7 @@
|
||||
<target state="new">Holding</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">13,15</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="050be0e7937dec05c8c8ded71cebc0bb027b38f6" datatype="html">
|
||||
@ -3054,7 +3038,7 @@
|
||||
<target state="new">Load Dividends</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">29,33</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8036977202721714375" datatype="html">
|
||||
@ -3481,6 +3465,38 @@
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<target state="new">Oops! Could not get the historical exchange rate from</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="af22005ceeded8dba7571d8b93a3e06bd674c488" datatype="html">
|
||||
<source>Gather Historical Data</source>
|
||||
<target state="new">Gather Historical Data</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7383cd391b1967e03f0636c231d20f036d5c37ee" datatype="html">
|
||||
<source>Retirement Date</source>
|
||||
<target state="new">Retirement Date</target>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<source>Create Account</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">27,29</context>
|
||||
<context context-type="linenumber">26</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -47,7 +47,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">12,14</context>
|
||||
<context context-type="linenumber">12</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -114,7 +114,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">75,77</context>
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -148,7 +148,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">122,123</context>
|
||||
<context context-type="linenumber">125</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">172</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -186,7 +190,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">108</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -234,7 +238,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">91,93</context>
|
||||
<context context-type="linenumber">94</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3bb2d877ef3ef7a032ff8b84147cd4fefbdde1e9" datatype="html">
|
||||
@ -315,7 +319,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">97,98</context>
|
||||
<context context-type="linenumber">100</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -353,11 +357,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">253,257</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">115,119</context>
|
||||
<context context-type="linenumber">115</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -384,7 +388,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">260,265</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="86c6e9437398addbc04b6570de19b2cb4afe6084" datatype="html">
|
||||
@ -416,17 +420,6 @@
|
||||
<context context-type="linenumber">78</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f835caf68bff562ddd23556a651e834d5af3380b" datatype="html">
|
||||
<source>Gather Data</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="912825160188860007" datatype="html">
|
||||
<source>Please add a currency:</source>
|
||||
<context-group purpose="location">
|
||||
@ -600,11 +593,11 @@
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="083561a93ac2071e11aeac8580394b43fabf2f46" datatype="html">
|
||||
<source>Last Request</source>
|
||||
<trans-unit id="a5e368dd1104a015e020de33a532e53e4d97525f" datatype="html">
|
||||
<source> Last Request </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-users/admin-users.html</context>
|
||||
<context context-type="linenumber">31</context>
|
||||
<context context-type="linenumber">35,37</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="68ca4a6d3699c0b1141421f8ca995cb1ed736128" datatype="html">
|
||||
@ -800,7 +793,7 @@
|
||||
<source>Security Token</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">10,14</context>
|
||||
<context context-type="linenumber">10</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html</context>
|
||||
@ -811,15 +804,15 @@
|
||||
<source>or</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">20,22</context>
|
||||
<context context-type="linenumber">20,19</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">54,56</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">31,32</context>
|
||||
<context context-type="linenumber">30,29</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/webauthn/webauthn-page.html</context>
|
||||
@ -830,21 +823,21 @@
|
||||
<source>Sign in with Internet Identity</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">30,34</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d745a22ae7b825b146ca8185126c482597f1d485" datatype="html">
|
||||
<source>Sign in with Google</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">40,46</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d9b3881b98593a64eebeb867422c00e037b37b9b" datatype="html">
|
||||
<source>Stay signed in</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">49,55</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="287d3301a32a65a1b31116bda5d3a6463158c42a" datatype="html">
|
||||
@ -855,7 +848,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html</context>
|
||||
<context context-type="linenumber">59,63</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="41c1e1f19aabc4a4bf198e4a189436a1f69257bb" datatype="html">
|
||||
@ -873,7 +866,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">14,15</context>
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fe708b572beec788b18edd1b5852d63c07dfaead" datatype="html">
|
||||
@ -884,7 +877,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">17,21</context>
|
||||
<context context-type="linenumber">17</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bbc9e4cebf91162be7d3e324ca5984d576e462c" datatype="html">
|
||||
@ -994,11 +987,15 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">15,17</context>
|
||||
<context context-type="linenumber">15</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">120,122</context>
|
||||
<context context-type="linenumber">123</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6785405835169448749" datatype="html">
|
||||
@ -1046,7 +1043,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">212,214</context>
|
||||
<context context-type="linenumber">262</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="43d544c2e88959f6c59cc4db419528fb0776bd6c" datatype="html">
|
||||
@ -1150,7 +1147,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">113,109</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1726363342938046830" datatype="html">
|
||||
@ -1252,7 +1249,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">23,25</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1415,7 +1412,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">81,83</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1646,7 +1643,7 @@
|
||||
<source>4% Rule</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">28</context>
|
||||
<context context-type="linenumber">34</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="803941175683258052" datatype="html">
|
||||
@ -1675,28 +1672,28 @@
|
||||
<source>Update activity</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">7,8</context>
|
||||
<context context-type="linenumber">7</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="49af37bcd0c34e88ab989641e52ef92f3fb56e06" datatype="html">
|
||||
<source>Add activity</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">8,11</context>
|
||||
<context context-type="linenumber">8</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9bca420227979312de74f0a932a003437410b1ab" datatype="html">
|
||||
<source>Item</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">16,18</context>
|
||||
<context context-type="linenumber">16</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5ab4d451ff9ce6d18d53360c51e7cd6e91c69555" datatype="html">
|
||||
<source>Name, symbol or ISIN</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">39,42</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ca30c1aa79fb5ab487fbd2caa4ca01f2f6691d70" datatype="html">
|
||||
@ -1707,7 +1704,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">111,112</context>
|
||||
<context context-type="linenumber">114</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1718,7 +1715,11 @@
|
||||
<source>Unit Price</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">123,126</context>
|
||||
<context context-type="linenumber">126</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">173</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1729,11 +1730,11 @@
|
||||
<source>Fee</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">144,145</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">161,162</context>
|
||||
<context context-type="linenumber">209</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/activities-table/activities-table.component.html</context>
|
||||
@ -1748,7 +1749,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">170,173</context>
|
||||
<context context-type="linenumber">218</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="584c9433705e9bfdd2e7a9f0192690f453d36196" datatype="html">
|
||||
@ -1767,7 +1768,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">184,186</context>
|
||||
<context context-type="linenumber">233</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="2309808536212982229" datatype="html">
|
||||
@ -1788,7 +1789,7 @@
|
||||
<source>Import has been completed</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">102,101</context>
|
||||
<context context-type="linenumber">102</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5080775557941296581" datatype="html">
|
||||
@ -1841,14 +1842,14 @@
|
||||
<source>Continue with Internet Identity</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">41,44</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c7eb7fc17d2f646c6c835f4da0b96f255b515cf4" datatype="html">
|
||||
<source>Continue with Google</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/register/register-page.html</context>
|
||||
<context context-type="linenumber">51,56</context>
|
||||
<context context-type="linenumber">50</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3a6e5a6aa78ca864f6542410c5dafb6334538106" datatype="html">
|
||||
@ -1982,25 +1983,11 @@
|
||||
<context context-type="linenumber">14</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b9739d407abc88d6f5876b1e0b548778589baf50" datatype="html">
|
||||
<source>Investment Horizon</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e6bbe25e83a1e135e8e1d3e2ceddadb8529c45e9" datatype="html">
|
||||
<source>years</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ba18e93c4572bfe6d14b2a3f333468b12f890e5d" datatype="html">
|
||||
<source>Annual Interest Rate</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">27</context>
|
||||
<context context-type="linenumber">21</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="c004f99bac91f7dc28e87d458f80e5035ae99884" datatype="html">
|
||||
@ -2054,7 +2041,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts</context>
|
||||
<context context-type="linenumber">112,109</context>
|
||||
<context context-type="linenumber">112</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="024cdb2814b0cb3f4ced148f1a0b9854447cb214" datatype="html">
|
||||
@ -2091,7 +2078,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">199,201</context>
|
||||
<context context-type="linenumber">249</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3c5ec7bc638db6f37c402e4afab2084f8763e268" datatype="html">
|
||||
@ -2181,21 +2168,21 @@
|
||||
<source>Projected Total Amount</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">44</context>
|
||||
<context context-type="linenumber">60</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1054498214311181686" datatype="html">
|
||||
<source>Savings</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">303</context>
|
||||
<context context-type="linenumber">351</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3441715041566940420" datatype="html">
|
||||
<source>Interest</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">293</context>
|
||||
<context context-type="linenumber">341</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5213771062241898526" datatype="html">
|
||||
@ -2210,7 +2197,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.ts</context>
|
||||
<context context-type="linenumber">283</context>
|
||||
<context context-type="linenumber">331</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6762743264882388498" datatype="html">
|
||||
@ -2344,11 +2331,11 @@
|
||||
<context context-type="linenumber">25</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="458363f8e413759aa9e3235a53fd0f64cc916395" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span >"/>, based on your total assets of <x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value>"/> and a withdrawal rate of 4%. </source>
|
||||
<trans-unit id="dd9d3c5c9805d423310cdfcae53d61297ca62536" datatype="html">
|
||||
<source> If you retire today, you would be able to withdraw <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerYear?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per year<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> or <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_1" ctype="x-gf_value_1" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="withdrawalRatePerMonth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/> per month<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/>, based on your total assets of <x id="START_TAG_SPAN" ctype="x-span" equiv-text="<span class="font-weight-bold" >"/><x id="START_TAG_GF_VALUE_2" ctype="x-gf_value_2" equiv-text="<gf-value class="d-inline-block" [currency]="user?.settings?.baseCurrency" [locale]="user?.settings?.locale" [value]="fireWealth?.toNumber()" >"/><x id="CLOSE_TAG_GF_VALUE" ctype="x-gf_value" equiv-text="</gf-value >"/><x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="</span>"/> and a withdrawal rate of 4%. </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/fire/fire-page.html</context>
|
||||
<context context-type="linenumber">51,79</context>
|
||||
<context context-type="linenumber">57,87</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5fb13fb4a8447e59cdf05dc196ade39c02a6f8aa" datatype="html">
|
||||
@ -2594,21 +2581,21 @@
|
||||
<source>The following file formats are supported:</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">47,50</context>
|
||||
<context context-type="linenumber">47</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="73f8489a3ae4d805787b8350d3d91e03e830115b" datatype="html">
|
||||
<source>Choose File</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">43,46</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="cda31dbd724cf5f4fa7a4274d9120651490c8a8c" datatype="html">
|
||||
<source>Back</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">107,111</context>
|
||||
<context context-type="linenumber">107</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ec2d3a89b366d1ca80be056e9e71f0165ae75c7b" datatype="html">
|
||||
@ -2697,7 +2684,7 @@
|
||||
<source>Import</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">122,127</context>
|
||||
<context context-type="linenumber">122</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3229595422546554334" datatype="html">
|
||||
@ -2732,14 +2719,14 @@
|
||||
<source>Load Dividends</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">29,33</context>
|
||||
<context context-type="linenumber">29</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="0f845001c88b82c18535e6d44f5597061f506e42" datatype="html">
|
||||
<source>Holding</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html</context>
|
||||
<context context-type="linenumber">13,15</context>
|
||||
<context context-type="linenumber">13</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8036977202721714375" datatype="html">
|
||||
@ -3123,6 +3110,35 @@
|
||||
<context context-type="linenumber">2</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f15e6e0a8fb2412d0fc8c40bc2946ccac969f491" datatype="html">
|
||||
<source>Oops! Could not get the historical exchange rate from</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">148</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html</context>
|
||||
<context context-type="linenumber">200</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7383cd391b1967e03f0636c231d20f036d5c37ee" datatype="html">
|
||||
<source>Retirement Date</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">libs/ui/src/lib/fire-calculator/fire-calculator.component.html</context>
|
||||
<context context-type="linenumber">32</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="af22005ceeded8dba7571d8b93a3e06bd674c488" datatype="html">
|
||||
<source>Gather Historical Data</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/admin-market-data.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -227,7 +227,7 @@ body {
|
||||
}
|
||||
|
||||
ngx-skeleton-loader {
|
||||
.loader {
|
||||
.skeleton-loader {
|
||||
background-color: #323232;
|
||||
}
|
||||
}
|
||||
@ -319,7 +319,7 @@ ngx-skeleton-loader {
|
||||
line-height: 0;
|
||||
outline: 0;
|
||||
|
||||
.loader {
|
||||
.skeleton-loader {
|
||||
display: flex;
|
||||
margin: 0 !important;
|
||||
outline: 0;
|
||||
|
@ -2,8 +2,6 @@ import { DataSource } from '@prisma/client';
|
||||
import { JobOptions, JobStatus } from 'bull';
|
||||
import ms from 'ms';
|
||||
|
||||
export const DEMO_USER_ID = '9b112b4d-3b7d-4bad-9bdd-3b0f7b4dac2f';
|
||||
|
||||
export const ghostfolioPrefix = 'GF';
|
||||
export const ghostfolioScraperApiSymbolPrefix = `_${ghostfolioPrefix}_`;
|
||||
export const ghostfolioCashSymbol = `${ghostfolioScraperApiSymbolPrefix}CASH`;
|
||||
@ -69,12 +67,17 @@ export const GATHER_HISTORICAL_MARKET_DATA_PROCESS_OPTIONS: JobOptions = {
|
||||
}
|
||||
};
|
||||
|
||||
export const HEADER_KEY_IMPERSONATION = 'Impersonation-Id';
|
||||
export const HEADER_KEY_TIMEZONE = 'Timezone';
|
||||
export const HEADER_KEY_TOKEN = 'Authorization';
|
||||
|
||||
export const MAX_CHART_ITEMS = 365;
|
||||
|
||||
export const PROPERTY_BENCHMARKS = 'BENCHMARKS';
|
||||
export const PROPERTY_COUNTRIES_OF_SUBSCRIBERS = 'COUNTRIES_OF_SUBSCRIBERS';
|
||||
export const PROPERTY_COUPONS = 'COUPONS';
|
||||
export const PROPERTY_CURRENCIES = 'CURRENCIES';
|
||||
export const PROPERTY_DEMO_USER_ID = 'DEMO_USER_ID';
|
||||
export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE';
|
||||
export const PROPERTY_IS_USER_SIGNUP_ENABLED = 'IS_USER_SIGNUP_ENABLED';
|
||||
export const PROPERTY_SLACK_COMMUNITY_USERS = 'SLACK_COMMUNITY_USERS';
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { ColorScheme, DateRange, ViewMode } from '@ghostfolio/common/types';
|
||||
|
||||
export interface UserSettings {
|
||||
annualInterestRate?: number;
|
||||
baseCurrency?: string;
|
||||
benchmark?: string;
|
||||
colorScheme?: ColorScheme;
|
||||
@ -10,6 +11,8 @@ export interface UserSettings {
|
||||
isRestrictedView?: boolean;
|
||||
language?: string;
|
||||
locale?: string;
|
||||
projectedTotalAmount?: number;
|
||||
retirementDate?: string;
|
||||
savingsRate?: number;
|
||||
viewMode?: ViewMode;
|
||||
}
|
||||
|
@ -1,426 +0,0 @@
|
||||
export const timezoneCitiesToCountries = {
|
||||
Abidjan: 'CI',
|
||||
Accra: 'GH',
|
||||
Adak: 'US',
|
||||
Addis_Ababa: 'ET',
|
||||
Adelaide: 'AU',
|
||||
Aden: 'YE',
|
||||
Algiers: 'DZ',
|
||||
Almaty: 'KZ',
|
||||
Amman: 'JO',
|
||||
Amsterdam: 'NL',
|
||||
Anadyr: 'RU',
|
||||
Anchorage: 'US',
|
||||
Andorra: 'AD',
|
||||
Anguilla: 'AI',
|
||||
Antananarivo: 'MG',
|
||||
Antigua: 'AG',
|
||||
Apia: 'WS',
|
||||
Aqtau: 'KZ',
|
||||
Aqtobe: 'KZ',
|
||||
Araguaina: 'BR',
|
||||
Aruba: 'AW',
|
||||
Ashgabat: 'TM',
|
||||
Asmara: 'ER',
|
||||
Astrakhan: 'RU',
|
||||
Asuncion: 'PY',
|
||||
Athens: 'GR',
|
||||
Atikokan: 'CA',
|
||||
Atyrau: 'KZ',
|
||||
Auckland: 'NZ',
|
||||
Azores: 'PT',
|
||||
Baghdad: 'IQ',
|
||||
Bahia: 'BR',
|
||||
Bahia_Banderas: 'MX',
|
||||
Bahrain: 'BH',
|
||||
Baku: 'AZ',
|
||||
Bamako: 'ML',
|
||||
Bangkok: 'TH',
|
||||
Bangui: 'CF',
|
||||
Banjul: 'GM',
|
||||
Barbados: 'BB',
|
||||
Barnaul: 'RU',
|
||||
Beirut: 'LB',
|
||||
Belem: 'BR',
|
||||
Belgrade: 'RS',
|
||||
Belize: 'BZ',
|
||||
Berlin: 'DE',
|
||||
Bermuda: 'BM',
|
||||
Beulah: 'US',
|
||||
Bishkek: 'KG',
|
||||
Bissau: 'GW',
|
||||
'Blanc-Sablon': 'CA',
|
||||
Blantyre: 'MW',
|
||||
Boa_Vista: 'BR',
|
||||
Bogota: 'CO',
|
||||
Boise: 'US',
|
||||
Bougainville: 'PG',
|
||||
Bratislava: 'SK',
|
||||
Brazzaville: 'CG',
|
||||
Brisbane: 'AU',
|
||||
Broken_Hill: 'AU',
|
||||
Brunei: 'BN',
|
||||
Brussels: 'BE',
|
||||
Bucharest: 'RO',
|
||||
Budapest: 'HU',
|
||||
Buenos_Aires: 'AR',
|
||||
Bujumbura: 'BI',
|
||||
Busingen: 'DE',
|
||||
Cairo: 'EG',
|
||||
Cambridge_Bay: 'CA',
|
||||
Campo_Grande: 'BR',
|
||||
Canary: 'ES',
|
||||
Cancun: 'MX',
|
||||
Cape_Verde: 'CV',
|
||||
Caracas: 'VE',
|
||||
Casablanca: 'MA',
|
||||
Casey: 'AQ',
|
||||
Catamarca: 'AR',
|
||||
Cayenne: 'GF',
|
||||
Cayman: 'KY',
|
||||
Center: 'US',
|
||||
Ceuta: 'ES',
|
||||
Chagos: 'IO',
|
||||
Chatham: 'NZ',
|
||||
Chicago: 'US',
|
||||
Chihuahua: 'MX',
|
||||
Chisinau: 'MD',
|
||||
Chita: 'RU',
|
||||
Choibalsan: 'MN',
|
||||
Christmas: 'CX',
|
||||
Chuuk: 'FM',
|
||||
Cocos: 'CC',
|
||||
Colombo: 'LK',
|
||||
Comoro: 'KM',
|
||||
Conakry: 'GN',
|
||||
Copenhagen: 'DK',
|
||||
Cordoba: 'AR',
|
||||
Costa_Rica: 'CR',
|
||||
Creston: 'CA',
|
||||
Cuiaba: 'BR',
|
||||
Curacao: 'CW',
|
||||
Dakar: 'SN',
|
||||
Damascus: 'SY',
|
||||
Danmarkshavn: 'GL',
|
||||
Dar_es_Salaam: 'TZ',
|
||||
Darwin: 'AU',
|
||||
Davis: 'AQ',
|
||||
Dawson: 'CA',
|
||||
Dawson_Creek: 'CA',
|
||||
Denver: 'US',
|
||||
Detroit: 'US',
|
||||
Dhaka: 'BD',
|
||||
Dili: 'TL',
|
||||
Djibouti: 'DJ',
|
||||
Dominica: 'DM',
|
||||
Douala: 'CM',
|
||||
Dubai: 'AE',
|
||||
Dublin: 'IE',
|
||||
DumontDUrville: 'AQ',
|
||||
Dushanbe: 'TJ',
|
||||
Easter: 'CL',
|
||||
Edmonton: 'CA',
|
||||
Efate: 'VU',
|
||||
Eirunepe: 'BR',
|
||||
El_Aaiun: 'EH',
|
||||
El_Salvador: 'SV',
|
||||
Eucla: 'AU',
|
||||
Fakaofo: 'TK',
|
||||
Famagusta: 'CY',
|
||||
Faroe: 'FO',
|
||||
Fiji: 'FJ',
|
||||
Fort_Nelson: 'CA',
|
||||
Fortaleza: 'BR',
|
||||
Freetown: 'SL',
|
||||
Funafuti: 'TV',
|
||||
Gaborone: 'BW',
|
||||
Galapagos: 'EC',
|
||||
Gambier: 'PF',
|
||||
Gaza: 'PS',
|
||||
Gibraltar: 'GI',
|
||||
Glace_Bay: 'CA',
|
||||
Goose_Bay: 'CA',
|
||||
Grand_Turk: 'TC',
|
||||
Grenada: 'GD',
|
||||
Guadalcanal: 'SB',
|
||||
Guadeloupe: 'GP',
|
||||
Guam: 'GU',
|
||||
Guatemala: 'GT',
|
||||
Guayaquil: 'EC',
|
||||
Guernsey: 'GG',
|
||||
Guyana: 'GY',
|
||||
Halifax: 'CA',
|
||||
Harare: 'ZW',
|
||||
Havana: 'CU',
|
||||
Hebron: 'PS',
|
||||
Helsinki: 'FI',
|
||||
Hermosillo: 'MX',
|
||||
Ho_Chi_Minh: 'VN',
|
||||
Hobart: 'AU',
|
||||
Hong_Kong: 'HK',
|
||||
Honolulu: 'US',
|
||||
Hovd: 'MN',
|
||||
Indianapolis: 'US',
|
||||
Inuvik: 'CA',
|
||||
Iqaluit: 'CA',
|
||||
Irkutsk: 'RU',
|
||||
Isle_of_Man: 'IM',
|
||||
Istanbul: 'TR',
|
||||
Jakarta: 'ID',
|
||||
Jamaica: 'JM',
|
||||
Jayapura: 'ID',
|
||||
Jersey: 'JE',
|
||||
Jerusalem: 'IL',
|
||||
Johannesburg: 'ZA',
|
||||
Juba: 'SS',
|
||||
Jujuy: 'AR',
|
||||
Juneau: 'US',
|
||||
Kabul: 'AF',
|
||||
Kaliningrad: 'RU',
|
||||
Kamchatka: 'RU',
|
||||
Kampala: 'UG',
|
||||
Kanton: 'KI',
|
||||
Karachi: 'PK',
|
||||
Kathmandu: 'NP',
|
||||
Kerguelen: 'TF',
|
||||
Khandyga: 'RU',
|
||||
Khartoum: 'SD',
|
||||
Kiev: 'UA',
|
||||
Kigali: 'RW',
|
||||
Kinshasa: 'CD',
|
||||
Kiritimati: 'KI',
|
||||
Kirov: 'RU',
|
||||
Knox: 'US',
|
||||
Kolkata: 'IN',
|
||||
Kosrae: 'FM',
|
||||
Kralendijk: 'NL',
|
||||
Krasnoyarsk: 'RU',
|
||||
Kuala_Lumpur: 'MY',
|
||||
Kuching: 'MY',
|
||||
Kuwait: 'KW',
|
||||
Kwajalein: 'MH',
|
||||
La_Paz: 'BO',
|
||||
La_Rioja: 'AR',
|
||||
Lagos: 'NG',
|
||||
Libreville: 'GA',
|
||||
Lima: 'PE',
|
||||
Lindeman: 'AU',
|
||||
Lisbon: 'PT',
|
||||
Ljubljana: 'SI',
|
||||
Lome: 'TG',
|
||||
London: 'GB',
|
||||
Longyearbyen: 'SJ',
|
||||
Lord_Howe: 'AU',
|
||||
Los_Angeles: 'US',
|
||||
Louisville: 'US',
|
||||
Lower_Princes: 'SX',
|
||||
Luanda: 'AO',
|
||||
Lubumbashi: 'CD',
|
||||
Lusaka: 'ZM',
|
||||
Luxembourg: 'LU',
|
||||
Macau: 'MO',
|
||||
Maceio: 'BR',
|
||||
Macquarie: 'AU',
|
||||
Madeira: 'PT',
|
||||
Madrid: 'ES',
|
||||
Magadan: 'RU',
|
||||
Mahe: 'SC',
|
||||
Majuro: 'MH',
|
||||
Makassar: 'ID',
|
||||
Malabo: 'GQ',
|
||||
Maldives: 'MV',
|
||||
Malta: 'MT',
|
||||
Managua: 'NI',
|
||||
Manaus: 'BR',
|
||||
Manila: 'PH',
|
||||
Maputo: 'MZ',
|
||||
Marengo: 'US',
|
||||
Mariehamn: 'AX',
|
||||
Marigot: 'MF',
|
||||
Marquesas: 'PF',
|
||||
Martinique: 'MQ',
|
||||
Maseru: 'LS',
|
||||
Matamoros: 'MX',
|
||||
Mauritius: 'MU',
|
||||
Mawson: 'AQ',
|
||||
Mayotte: 'YT',
|
||||
Mazatlan: 'MX',
|
||||
Mbabane: 'SZ',
|
||||
McMurdo: 'AQ',
|
||||
Melbourne: 'AU',
|
||||
Mendoza: 'AR',
|
||||
Menominee: 'US',
|
||||
Merida: 'MX',
|
||||
Metlakatla: 'US',
|
||||
Mexico_City: 'MX',
|
||||
Midway: 'UM',
|
||||
Minsk: 'BY',
|
||||
Miquelon: 'PM',
|
||||
Mogadishu: 'SO',
|
||||
Monaco: 'MC',
|
||||
Moncton: 'CA',
|
||||
Monrovia: 'LR',
|
||||
Monterrey: 'MX',
|
||||
Montevideo: 'UY',
|
||||
Monticello: 'US',
|
||||
Montserrat: 'MS',
|
||||
Moscow: 'RU',
|
||||
Muscat: 'OM',
|
||||
Nairobi: 'KE',
|
||||
Nassau: 'BS',
|
||||
Nauru: 'NR',
|
||||
Ndjamena: 'TD',
|
||||
New_Salem: 'US',
|
||||
New_York: 'US',
|
||||
Niamey: 'NE',
|
||||
Nicosia: 'CY',
|
||||
Nipigon: 'CA',
|
||||
Niue: 'NU',
|
||||
Nome: 'US',
|
||||
Norfolk: 'NF',
|
||||
Noronha: 'BR',
|
||||
Nouakchott: 'MR',
|
||||
Noumea: 'NC',
|
||||
Novokuznetsk: 'RU',
|
||||
Novosibirsk: 'RU',
|
||||
Nuuk: 'GL',
|
||||
Ojinaga: 'MX',
|
||||
Omsk: 'RU',
|
||||
Oral: 'KZ',
|
||||
Oslo: 'NO',
|
||||
Ouagadougou: 'BF',
|
||||
Pago_Pago: 'AS',
|
||||
Palau: 'PW',
|
||||
Palmer: 'AQ',
|
||||
Panama: 'PA',
|
||||
Pangnirtung: 'CA',
|
||||
Paramaribo: 'SR',
|
||||
Paris: 'FR',
|
||||
Perth: 'AU',
|
||||
Petersburg: 'US',
|
||||
Phnom_Penh: 'KH',
|
||||
Phoenix: 'US',
|
||||
Pitcairn: 'PN',
|
||||
Podgorica: 'ME',
|
||||
Pohnpei: 'FM',
|
||||
Pontianak: 'ID',
|
||||
'Port-au-Prince': 'HT',
|
||||
Port_Moresby: 'PG',
|
||||
Port_of_Spain: 'TT',
|
||||
'Porto-Novo': 'BJ',
|
||||
Porto_Velho: 'BR',
|
||||
Prague: 'CZ',
|
||||
Puerto_Rico: 'PR',
|
||||
Punta_Arenas: 'CL',
|
||||
Pyongyang: 'KP',
|
||||
Qatar: 'QA',
|
||||
Qostanay: 'KZ',
|
||||
Qyzylorda: 'KZ',
|
||||
Rainy_River: 'CA',
|
||||
Rankin_Inlet: 'CA',
|
||||
Rarotonga: 'CK',
|
||||
Recife: 'BR',
|
||||
Regina: 'CA',
|
||||
Resolute: 'CA',
|
||||
Reunion: 'RE',
|
||||
Reykjavik: 'IS',
|
||||
Riga: 'LV',
|
||||
Rio_Branco: 'BR',
|
||||
Rio_Gallegos: 'AR',
|
||||
Riyadh: 'SA',
|
||||
Rome: 'IT',
|
||||
Rothera: 'AQ',
|
||||
Saipan: 'MP',
|
||||
Sakhalin: 'RU',
|
||||
Salta: 'AR',
|
||||
Samara: 'RU',
|
||||
Samarkand: 'UZ',
|
||||
San_Juan: 'AR',
|
||||
San_Luis: 'AR',
|
||||
San_Marino: 'SM',
|
||||
Santarem: 'BR',
|
||||
Santiago: 'CL',
|
||||
Santo_Domingo: 'DO',
|
||||
Sao_Paulo: 'BR',
|
||||
Sao_Tome: 'ST',
|
||||
Sarajevo: 'BA',
|
||||
Saratov: 'RU',
|
||||
Scoresbysund: 'GL',
|
||||
Seoul: 'KR',
|
||||
Shanghai: 'CN',
|
||||
Simferopol: 'RU',
|
||||
Singapore: 'SG',
|
||||
Sitka: 'US',
|
||||
Skopje: 'MK',
|
||||
Sofia: 'BG',
|
||||
South_Georgia: 'GS',
|
||||
Srednekolymsk: 'RU',
|
||||
St_Barthelemy: 'BL',
|
||||
St_Helena: 'SH',
|
||||
St_Johns: 'CA',
|
||||
St_Kitts: 'KN',
|
||||
St_Lucia: 'LC',
|
||||
St_Thomas: 'VI',
|
||||
St_Vincent: 'VC',
|
||||
Stanley: 'FK',
|
||||
Stockholm: 'SE',
|
||||
Swift_Current: 'CA',
|
||||
Sydney: 'AU',
|
||||
Syowa: 'AQ',
|
||||
Tahiti: 'PF',
|
||||
Taipei: 'TW',
|
||||
Tallinn: 'EE',
|
||||
Tarawa: 'KI',
|
||||
Tashkent: 'UZ',
|
||||
Tbilisi: 'GE',
|
||||
Tegucigalpa: 'HN',
|
||||
Tehran: 'IR',
|
||||
Tell_City: 'US',
|
||||
Thimphu: 'BT',
|
||||
Thule: 'GL',
|
||||
Thunder_Bay: 'CA',
|
||||
Tijuana: 'MX',
|
||||
Tirane: 'AL',
|
||||
Tokyo: 'JP',
|
||||
Tomsk: 'RU',
|
||||
Tongatapu: 'TO',
|
||||
Toronto: 'CA',
|
||||
Tortola: 'VI (UK)',
|
||||
Tripoli: 'LY',
|
||||
Troll: 'AQ',
|
||||
Tucuman: 'AR',
|
||||
Tunis: 'TN',
|
||||
Ulaanbaatar: 'MN',
|
||||
Ulyanovsk: 'RU',
|
||||
Urumqi: 'CN',
|
||||
Ushuaia: 'AR',
|
||||
'Ust-Nera': 'RU',
|
||||
Uzhgorod: 'UA',
|
||||
Vaduz: 'LI',
|
||||
Vancouver: 'CA',
|
||||
Vatican: 'VA',
|
||||
Vevay: 'US',
|
||||
Vienna: 'AT',
|
||||
Vientiane: 'LA',
|
||||
Vilnius: 'LT',
|
||||
Vincennes: 'US',
|
||||
Vladivostok: 'RU',
|
||||
Volgograd: 'RU',
|
||||
Vostok: 'AQ',
|
||||
Wake: 'UM',
|
||||
Wallis: 'WF',
|
||||
Warsaw: 'PL',
|
||||
Whitehorse: 'CA',
|
||||
Winamac: 'US',
|
||||
Windhoek: 'NA',
|
||||
Winnipeg: 'CA',
|
||||
Yakutat: 'US',
|
||||
Yakutsk: 'RU',
|
||||
Yangon: 'MM',
|
||||
Yekaterinburg: 'RU',
|
||||
Yellowknife: 'CA',
|
||||
Yerevan: 'AM',
|
||||
Zagreb: 'HR',
|
||||
Zaporozhye: 'UA',
|
||||
Zurich: 'CH'
|
||||
};
|
@ -17,12 +17,6 @@
|
||||
<span class="ml-2" matTextSuffix>{{ currency }}</span>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Investment Horizon</mat-label>
|
||||
<input formControlName="time" matInput type="number" />
|
||||
<span class="ml-2" i18n matTextSuffix>years</span>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Annual Interest Rate</mat-label>
|
||||
<input
|
||||
@ -34,15 +28,44 @@
|
||||
<div class="ml-2" matTextSuffix>%</div>
|
||||
</mat-form-field>
|
||||
|
||||
<gf-value
|
||||
i18n
|
||||
size="large"
|
||||
[currency]="currency"
|
||||
[isCurrency]="true"
|
||||
[locale]="locale"
|
||||
[value]="projectedTotalAmount"
|
||||
>Projected Total Amount</gf-value
|
||||
>
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Retirement Date</mat-label>
|
||||
<div>
|
||||
{{
|
||||
calculatorForm.controls['retirementDate'].value
|
||||
| date : 'MMMM YYYY'
|
||||
}}
|
||||
</div>
|
||||
<input
|
||||
class="d-none"
|
||||
formControlName="retirementDate"
|
||||
matInput
|
||||
[matDatepicker]="datepicker"
|
||||
/>
|
||||
<mat-datepicker-toggle
|
||||
matIconSuffix
|
||||
[disabled]="hasPermissionToUpdateUserSettings !== true"
|
||||
[for]="datepicker"
|
||||
></mat-datepicker-toggle>
|
||||
<mat-datepicker
|
||||
#datepicker
|
||||
startView="multi-year"
|
||||
[disabled]="hasPermissionToUpdateUserSettings !== true"
|
||||
(monthSelected)="setMonthAndYear($event, datepicker)"
|
||||
>
|
||||
</mat-datepicker>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field appearance="outline" class="w-100">
|
||||
<mat-label i18n>Projected Total Amount</mat-label>
|
||||
<input
|
||||
formControlName="projectedTotalAmount"
|
||||
matInput
|
||||
step="100"
|
||||
type="number"
|
||||
/>
|
||||
<span class="ml-2" matTextSuffix>{{ currency }}</span>
|
||||
</mat-form-field>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-md-9 text-center">
|
||||
|
@ -8,4 +8,31 @@
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
::ng-deep {
|
||||
.mdc-text-field--disabled {
|
||||
.mdc-floating-label,
|
||||
.mdc-text-field__input {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.mdc-notched-outline__leading,
|
||||
.mdc-notched-outline__notch,
|
||||
.mdc-notched-outline__trailing {
|
||||
border-color: rgba(var(--dark-disabled-text));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
:host-context(.is-dark-theme) {
|
||||
::ng-deep {
|
||||
.mdc-text-field--disabled {
|
||||
.mdc-notched-outline__leading,
|
||||
.mdc-notched-outline__notch,
|
||||
.mdc-notched-outline__trailing {
|
||||
border-color: rgba(var(--light-disabled-text));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
import 'chartjs-adapter-date-fns';
|
||||
|
||||
import {
|
||||
AfterViewInit,
|
||||
ChangeDetectionStrategy,
|
||||
ChangeDetectorRef,
|
||||
Component,
|
||||
@ -13,6 +12,7 @@ import {
|
||||
ViewChild
|
||||
} from '@angular/core';
|
||||
import { FormBuilder, FormControl } from '@angular/forms';
|
||||
import { MatDatepicker } from '@angular/material/datepicker';
|
||||
import {
|
||||
getTooltipOptions,
|
||||
transformTickToAbbreviation
|
||||
@ -28,29 +28,41 @@ import {
|
||||
Tooltip
|
||||
} from 'chart.js';
|
||||
import * as Color from 'color';
|
||||
import { getMonth } from 'date-fns';
|
||||
import {
|
||||
add,
|
||||
addYears,
|
||||
getMonth,
|
||||
setMonth,
|
||||
setYear,
|
||||
startOfMonth,
|
||||
sub
|
||||
} from 'date-fns';
|
||||
import { isNumber } from 'lodash';
|
||||
import { Subject, takeUntil } from 'rxjs';
|
||||
import { debounceTime, Subject, takeUntil } from 'rxjs';
|
||||
|
||||
import { FireCalculatorService } from './fire-calculator.service';
|
||||
|
||||
@Component({
|
||||
selector: 'gf-fire-calculator',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
templateUrl: './fire-calculator.component.html',
|
||||
styleUrls: ['./fire-calculator.component.scss']
|
||||
selector: 'gf-fire-calculator',
|
||||
styleUrls: ['./fire-calculator.component.scss'],
|
||||
templateUrl: './fire-calculator.component.html'
|
||||
})
|
||||
export class FireCalculatorComponent
|
||||
implements AfterViewInit, OnChanges, OnDestroy
|
||||
{
|
||||
export class FireCalculatorComponent implements OnChanges, OnDestroy {
|
||||
@Input() annualInterestRate = 5;
|
||||
@Input() colorScheme: ColorScheme;
|
||||
@Input() currency: string;
|
||||
@Input() deviceType: string;
|
||||
@Input() fireWealth: number;
|
||||
@Input() hasPermissionToUpdateUserSettings: boolean;
|
||||
@Input() locale: string;
|
||||
@Input() projectedTotalAmount = 0;
|
||||
@Input() retirementDate: Date;
|
||||
@Input() savingsRate = 0;
|
||||
|
||||
@Output() annualInterestRateChanged = new EventEmitter<number>();
|
||||
@Output() projectedTotalAmountChanged = new EventEmitter<number>();
|
||||
@Output() retirementDateChanged = new EventEmitter<Date>();
|
||||
@Output() savingsRateChanged = new EventEmitter<number>();
|
||||
|
||||
@ViewChild('chartCanvas') chartCanvas;
|
||||
@ -59,13 +71,17 @@ export class FireCalculatorComponent
|
||||
annualInterestRate: new FormControl<number>(undefined),
|
||||
paymentPerPeriod: new FormControl<number>(undefined),
|
||||
principalInvestmentAmount: new FormControl<number>(undefined),
|
||||
time: new FormControl<number>(undefined)
|
||||
projectedTotalAmount: new FormControl<number>(undefined),
|
||||
retirementDate: new FormControl<Date>(undefined)
|
||||
});
|
||||
public chart: Chart<'bar'>;
|
||||
public isLoading = true;
|
||||
public projectedTotalAmount: number;
|
||||
public periodsToRetire = 0;
|
||||
|
||||
private readonly CONTRIBUTION_PERIOD = 12;
|
||||
private readonly DEFAULT_RETIREMENT_DATE = startOfMonth(
|
||||
addYears(new Date(), 10)
|
||||
);
|
||||
private unsubscribeSubject = new Subject<void>();
|
||||
|
||||
public constructor(
|
||||
@ -83,10 +99,11 @@ export class FireCalculatorComponent
|
||||
|
||||
this.calculatorForm.setValue(
|
||||
{
|
||||
annualInterestRate: 5,
|
||||
annualInterestRate: this.annualInterestRate,
|
||||
paymentPerPeriod: this.savingsRate,
|
||||
principalInvestmentAmount: 0,
|
||||
time: 10
|
||||
projectedTotalAmount: this.projectedTotalAmount,
|
||||
retirementDate: this.retirementDate ?? this.DEFAULT_RETIREMENT_DATE
|
||||
},
|
||||
{
|
||||
emitEvent: false
|
||||
@ -99,48 +116,47 @@ export class FireCalculatorComponent
|
||||
this.initialize();
|
||||
});
|
||||
|
||||
this.calculatorForm
|
||||
.get('annualInterestRate')
|
||||
.valueChanges.pipe(debounceTime(500), takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((annualInterestRate) => {
|
||||
this.annualInterestRateChanged.emit(annualInterestRate);
|
||||
});
|
||||
this.calculatorForm
|
||||
.get('paymentPerPeriod')
|
||||
.valueChanges.pipe(takeUntil(this.unsubscribeSubject))
|
||||
.valueChanges.pipe(debounceTime(500), takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((savingsRate) => {
|
||||
this.savingsRateChanged.emit(savingsRate);
|
||||
});
|
||||
}
|
||||
|
||||
public ngAfterViewInit() {
|
||||
if (isNumber(this.fireWealth) && this.fireWealth >= 0) {
|
||||
setTimeout(() => {
|
||||
// Wait for the chartCanvas
|
||||
this.calculatorForm.patchValue(
|
||||
{
|
||||
principalInvestmentAmount: this.fireWealth,
|
||||
paymentPerPeriod: this.savingsRate ?? 0
|
||||
},
|
||||
{
|
||||
emitEvent: false
|
||||
}
|
||||
);
|
||||
this.calculatorForm.get('principalInvestmentAmount').disable();
|
||||
|
||||
this.changeDetectorRef.markForCheck();
|
||||
this.calculatorForm
|
||||
.get('projectedTotalAmount')
|
||||
.valueChanges.pipe(debounceTime(500), takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((projectedTotalAmount) => {
|
||||
this.projectedTotalAmountChanged.emit(projectedTotalAmount);
|
||||
});
|
||||
this.calculatorForm
|
||||
.get('retirementDate')
|
||||
.valueChanges.pipe(debounceTime(500), takeUntil(this.unsubscribeSubject))
|
||||
.subscribe((retirementDate) => {
|
||||
this.retirementDateChanged.emit(retirementDate);
|
||||
});
|
||||
}
|
||||
|
||||
if (this.hasPermissionToUpdateUserSettings === true) {
|
||||
this.calculatorForm.get('paymentPerPeriod').enable({ emitEvent: false });
|
||||
} else {
|
||||
this.calculatorForm.get('paymentPerPeriod').disable({ emitEvent: false });
|
||||
}
|
||||
}
|
||||
|
||||
public ngOnChanges() {
|
||||
this.periodsToRetire = this.getPeriodsToRetire();
|
||||
|
||||
if (isNumber(this.fireWealth) && this.fireWealth >= 0) {
|
||||
setTimeout(() => {
|
||||
// Wait for the chartCanvas
|
||||
this.calculatorForm.patchValue(
|
||||
{
|
||||
annualInterestRate: this.annualInterestRate,
|
||||
principalInvestmentAmount: this.fireWealth,
|
||||
paymentPerPeriod: this.savingsRate ?? 0
|
||||
paymentPerPeriod: this.savingsRate ?? 0,
|
||||
projectedTotalAmount:
|
||||
Number(this.getProjectedTotalAmount().toFixed(0)) ?? 0,
|
||||
retirementDate:
|
||||
this.getRetirementDate() ?? this.DEFAULT_RETIREMENT_DATE
|
||||
},
|
||||
{
|
||||
emitEvent: false
|
||||
@ -153,10 +169,37 @@ export class FireCalculatorComponent
|
||||
}
|
||||
|
||||
if (this.hasPermissionToUpdateUserSettings === true) {
|
||||
this.calculatorForm
|
||||
.get('annualInterestRate')
|
||||
.enable({ emitEvent: false });
|
||||
this.calculatorForm.get('paymentPerPeriod').enable({ emitEvent: false });
|
||||
this.calculatorForm
|
||||
.get('projectedTotalAmount')
|
||||
.enable({ emitEvent: false });
|
||||
} else {
|
||||
this.calculatorForm
|
||||
.get('annualInterestRate')
|
||||
.disable({ emitEvent: false });
|
||||
this.calculatorForm.get('paymentPerPeriod').disable({ emitEvent: false });
|
||||
this.calculatorForm
|
||||
.get('projectedTotalAmount')
|
||||
.disable({ emitEvent: false });
|
||||
}
|
||||
|
||||
this.calculatorForm.get('retirementDate').disable({ emitEvent: false });
|
||||
}
|
||||
|
||||
public setMonthAndYear(
|
||||
normalizedMonthAndYear: Date,
|
||||
datepicker: MatDatepicker<Date>
|
||||
) {
|
||||
const retirementDate = this.calculatorForm.get('retirementDate').value;
|
||||
const newRetirementDate = setMonth(
|
||||
setYear(retirementDate, normalizedMonthAndYear.getFullYear()),
|
||||
normalizedMonthAndYear.getMonth()
|
||||
);
|
||||
this.calculatorForm.get('retirementDate').setValue(newRetirementDate);
|
||||
datepicker.close();
|
||||
}
|
||||
|
||||
public ngOnDestroy() {
|
||||
@ -261,17 +304,22 @@ export class FireCalculatorComponent
|
||||
const labels = [];
|
||||
|
||||
// Principal investment amount
|
||||
const P: number =
|
||||
this.calculatorForm.get('principalInvestmentAmount').value || 0;
|
||||
const P: number = this.getP();
|
||||
|
||||
// Payment per period
|
||||
const PMT = this.calculatorForm.get('paymentPerPeriod').value;
|
||||
const PMT = this.getPMT();
|
||||
|
||||
// Annual interest rate
|
||||
const r: number = this.calculatorForm.get('annualInterestRate').value / 100;
|
||||
const r: number = this.getR();
|
||||
|
||||
// Calculate retirement date
|
||||
// if we want to retire at month x, we need the projectedTotalAmount at month x-1
|
||||
const lastPeriodDate = sub(this.getRetirementDate(), { months: 1 });
|
||||
const yearsToRetire = lastPeriodDate.getFullYear() - currentYear;
|
||||
|
||||
// Time
|
||||
const t = this.calculatorForm.get('time').value;
|
||||
// +1 to take into account the current year
|
||||
const t = yearsToRetire + 1;
|
||||
|
||||
for (let year = currentYear; year < currentYear + t; year++) {
|
||||
labels.push(year);
|
||||
@ -308,7 +356,7 @@ export class FireCalculatorComponent
|
||||
for (let period = 1; period <= t; period++) {
|
||||
const periodInMonths =
|
||||
period * this.CONTRIBUTION_PERIOD - monthsPassedInCurrentYear;
|
||||
const { interest, principal, totalAmount } =
|
||||
const { interest, principal } =
|
||||
this.fireCalculatorService.calculateCompoundInterest({
|
||||
P,
|
||||
periodInMonths,
|
||||
@ -319,10 +367,6 @@ export class FireCalculatorComponent
|
||||
datasetDeposit.data.push(this.fireWealth);
|
||||
datasetInterest.data.push(interest.toNumber());
|
||||
datasetSavings.data.push(principal.minus(this.fireWealth).toNumber());
|
||||
|
||||
if (period === t) {
|
||||
this.projectedTotalAmount = totalAmount.toNumber();
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
@ -330,4 +374,67 @@ export class FireCalculatorComponent
|
||||
datasets: [datasetDeposit, datasetSavings, datasetInterest]
|
||||
};
|
||||
}
|
||||
|
||||
private getP() {
|
||||
return this.fireWealth || 0;
|
||||
}
|
||||
|
||||
private getPeriodsToRetire(): number {
|
||||
if (this.projectedTotalAmount) {
|
||||
const periods = this.fireCalculatorService.calculatePeriodsToRetire({
|
||||
P: this.getP(),
|
||||
totalAmount: this.projectedTotalAmount,
|
||||
PMT: this.getPMT(),
|
||||
r: this.getR()
|
||||
});
|
||||
|
||||
return periods;
|
||||
} else {
|
||||
const today = new Date();
|
||||
const retirementDate =
|
||||
this.retirementDate ?? this.DEFAULT_RETIREMENT_DATE;
|
||||
|
||||
return (
|
||||
12 * (retirementDate.getFullYear() - today.getFullYear()) +
|
||||
retirementDate.getMonth() -
|
||||
today.getMonth()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private getPMT() {
|
||||
return this.savingsRate ?? 0;
|
||||
}
|
||||
|
||||
private getProjectedTotalAmount() {
|
||||
if (this.projectedTotalAmount) {
|
||||
return this.projectedTotalAmount || 0;
|
||||
} else {
|
||||
const { totalAmount } =
|
||||
this.fireCalculatorService.calculateCompoundInterest({
|
||||
P: this.getP(),
|
||||
periodInMonths: this.periodsToRetire,
|
||||
PMT: this.getPMT(),
|
||||
r: this.getR()
|
||||
});
|
||||
|
||||
return totalAmount.toNumber();
|
||||
}
|
||||
}
|
||||
|
||||
private getR() {
|
||||
return this.calculatorForm.get('annualInterestRate').value / 100;
|
||||
}
|
||||
|
||||
private getRetirementDate(): Date {
|
||||
const monthsToRetire = this.periodsToRetire % 12;
|
||||
const yearsToRetire = Math.floor(this.periodsToRetire / 12);
|
||||
|
||||
return startOfMonth(
|
||||
add(new Date(), {
|
||||
months: monthsToRetire,
|
||||
years: yearsToRetire
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -2,11 +2,11 @@ import { CommonModule } from '@angular/common';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
|
||||
|
||||
import { GfValueModule } from '../value';
|
||||
import { FireCalculatorComponent } from './fire-calculator.component';
|
||||
import { FireCalculatorService } from './fire-calculator.service';
|
||||
|
||||
@ -16,8 +16,8 @@ import { FireCalculatorService } from './fire-calculator.service';
|
||||
imports: [
|
||||
CommonModule,
|
||||
FormsModule,
|
||||
GfValueModule,
|
||||
MatButtonModule,
|
||||
MatDatepickerModule,
|
||||
MatFormFieldModule,
|
||||
MatInputModule,
|
||||
NgxSkeletonLoaderModule,
|
||||
|
@ -0,0 +1,69 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import Big from 'big.js';
|
||||
|
||||
import { FireCalculatorService } from './fire-calculator.service';
|
||||
|
||||
describe('FireCalculatorService', () => {
|
||||
let fireCalculatorService: FireCalculatorService;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [FireCalculatorService]
|
||||
}).compile();
|
||||
|
||||
fireCalculatorService = module.get<FireCalculatorService>(
|
||||
FireCalculatorService
|
||||
);
|
||||
});
|
||||
|
||||
describe('Test periods to retire', () => {
|
||||
it('should return the correct amount of periods to retire with no interst rate', async () => {
|
||||
const r = 0;
|
||||
const P = 1000;
|
||||
const totalAmount = 1900;
|
||||
const PMT = 100;
|
||||
|
||||
const periodsToRetire = fireCalculatorService.calculatePeriodsToRetire({
|
||||
P,
|
||||
r,
|
||||
PMT,
|
||||
totalAmount
|
||||
});
|
||||
|
||||
expect(periodsToRetire).toBe(9);
|
||||
});
|
||||
|
||||
it('should return the 0 when total amount is 0', async () => {
|
||||
const r = 0.05;
|
||||
const P = 100000;
|
||||
const totalAmount = 0;
|
||||
const PMT = 10000;
|
||||
|
||||
const periodsToRetire = fireCalculatorService.calculatePeriodsToRetire({
|
||||
P,
|
||||
r,
|
||||
PMT,
|
||||
totalAmount
|
||||
});
|
||||
|
||||
expect(periodsToRetire).toBe(0);
|
||||
});
|
||||
|
||||
it('should return the correct amount of periods to retire with interst rate', async () => {
|
||||
const r = 0.05;
|
||||
const P = 598478.96;
|
||||
const totalAmount = 812399.66;
|
||||
const PMT = 6000;
|
||||
const expectedPeriods = 24;
|
||||
|
||||
const periodsToRetire = fireCalculatorService.calculatePeriodsToRetire({
|
||||
P,
|
||||
r,
|
||||
PMT,
|
||||
totalAmount
|
||||
});
|
||||
|
||||
expect(Math.round(periodsToRetire)).toBe(expectedPeriods);
|
||||
});
|
||||
});
|
||||
});
|
@ -40,4 +40,36 @@ export class FireCalculatorService {
|
||||
totalAmount
|
||||
};
|
||||
}
|
||||
|
||||
public calculatePeriodsToRetire({
|
||||
P,
|
||||
PMT,
|
||||
r,
|
||||
totalAmount
|
||||
}: {
|
||||
P: number;
|
||||
PMT: number;
|
||||
r: number;
|
||||
totalAmount: number;
|
||||
}) {
|
||||
if (r == 0) {
|
||||
// No compound interest
|
||||
return (totalAmount - P) / PMT;
|
||||
} else if (totalAmount <= P) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const periodInterest = new Big(r).div(this.COMPOUND_PERIOD);
|
||||
const numerator1: number = Math.log10(
|
||||
new Big(totalAmount).plus(new Big(PMT).div(periodInterest)).toNumber()
|
||||
);
|
||||
const numerator2: number = Math.log10(
|
||||
new Big(P).plus(new Big(PMT).div(periodInterest)).toNumber()
|
||||
);
|
||||
const denominator: number = Math.log10(
|
||||
new Big(1).plus(periodInterest).toNumber()
|
||||
);
|
||||
|
||||
return (numerator1 - numerator2) / denominator;
|
||||
}
|
||||
}
|
||||
|
@ -217,7 +217,6 @@ export class LineChartComponent implements AfterViewInit, OnChanges, OnDestroy {
|
||||
},
|
||||
display: this.showXAxis,
|
||||
grid: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
|
||||
display: false
|
||||
},
|
||||
time: {
|
||||
@ -228,12 +227,23 @@ export class LineChartComponent implements AfterViewInit, OnChanges, OnDestroy {
|
||||
},
|
||||
y: {
|
||||
border: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.1)`
|
||||
width: 0
|
||||
},
|
||||
display: this.showYAxis,
|
||||
grid: {
|
||||
color: `rgba(${getTextColor(this.colorScheme)}, 0.8)`,
|
||||
display: false
|
||||
color: ({ scale, tick }) => {
|
||||
if (
|
||||
tick.value === 0 ||
|
||||
tick.value === scale.max ||
|
||||
tick.value === scale.min ||
|
||||
tick.value === this.yMax ||
|
||||
tick.value === this.yMin
|
||||
) {
|
||||
return `rgba(${getTextColor(this.colorScheme)}, 0.1)`;
|
||||
}
|
||||
|
||||
return 'transparent';
|
||||
}
|
||||
},
|
||||
max: this.yMax,
|
||||
min: this.yMin,
|
||||
|
@ -7,7 +7,6 @@ import { LineChartComponent } from './line-chart.component';
|
||||
@NgModule({
|
||||
declarations: [LineChartComponent],
|
||||
exports: [LineChartComponent],
|
||||
imports: [CommonModule, NgxSkeletonLoaderModule],
|
||||
providers: []
|
||||
imports: [CommonModule, NgxSkeletonLoaderModule]
|
||||
})
|
||||
export class GfLineChartModule {}
|
||||
|
@ -10,7 +10,6 @@ import { NoTransactionsInfoComponent } from './no-transactions-info.component';
|
||||
declarations: [NoTransactionsInfoComponent],
|
||||
exports: [NoTransactionsInfoComponent],
|
||||
imports: [CommonModule, GfLogoModule, MatButtonModule, RouterModule],
|
||||
providers: [],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||
})
|
||||
export class GfNoTransactionsInfoModule {}
|
||||
|
@ -7,7 +7,6 @@ import { PortfolioProportionChartComponent } from './portfolio-proportion-chart.
|
||||
@NgModule({
|
||||
declarations: [PortfolioProportionChartComponent],
|
||||
exports: [PortfolioProportionChartComponent],
|
||||
imports: [CommonModule, NgxSkeletonLoaderModule],
|
||||
providers: []
|
||||
imports: [CommonModule, NgxSkeletonLoaderModule]
|
||||
})
|
||||
export class GfPortfolioProportionChartModule {}
|
||||
|
@ -8,7 +8,6 @@ import { PremiumIndicatorComponent } from './premium-indicator.component';
|
||||
declarations: [PremiumIndicatorComponent],
|
||||
exports: [PremiumIndicatorComponent],
|
||||
imports: [CommonModule, RouterModule],
|
||||
providers: [],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||
})
|
||||
export class GfPremiumIndicatorModule {}
|
||||
|
@ -8,7 +8,6 @@ import { TrendIndicatorComponent } from './trend-indicator.component';
|
||||
declarations: [TrendIndicatorComponent],
|
||||
exports: [TrendIndicatorComponent],
|
||||
imports: [CommonModule, NgxSkeletonLoaderModule],
|
||||
providers: [],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||
})
|
||||
export class GfTrendIndicatorModule {}
|
||||
|
15
package.json
15
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ghostfolio",
|
||||
"version": "1.239.0",
|
||||
"version": "1.246.0",
|
||||
"homepage": "https://ghostfol.io",
|
||||
"license": "AGPL-3.0",
|
||||
"scripts": {
|
||||
@ -83,7 +83,7 @@
|
||||
"@prisma/client": "4.10.1",
|
||||
"@simplewebauthn/browser": "5.2.1",
|
||||
"@simplewebauthn/server": "5.2.1",
|
||||
"@stripe/stripe-js": "1.22.0",
|
||||
"@stripe/stripe-js": "1.47.0",
|
||||
"alphavantage": "2.2.0",
|
||||
"bent": "7.3.12",
|
||||
"big.js": "6.2.1",
|
||||
@ -100,6 +100,7 @@
|
||||
"class-transformer": "0.3.2",
|
||||
"class-validator": "0.13.1",
|
||||
"color": "4.2.3",
|
||||
"countries-and-timezones": "3.4.1",
|
||||
"countries-list": "2.6.1",
|
||||
"countup.js": "2.3.2",
|
||||
"date-fns": "2.29.3",
|
||||
@ -111,10 +112,10 @@
|
||||
"marked": "4.2.12",
|
||||
"ms": "3.0.0-canary.1",
|
||||
"ng-extract-i18n-merge": "2.5.0",
|
||||
"ngx-device-detector": "3.0.0",
|
||||
"ngx-device-detector": "5.0.1",
|
||||
"ngx-markdown": "15.1.0",
|
||||
"ngx-skeleton-loader": "5.0.0",
|
||||
"ngx-stripe": "13.0.0",
|
||||
"ngx-skeleton-loader": "7.0.0",
|
||||
"ngx-stripe": "15.5.0",
|
||||
"papaparse": "5.3.1",
|
||||
"passport": "0.6.0",
|
||||
"passport-google-oauth20": "2.0.0",
|
||||
@ -122,9 +123,9 @@
|
||||
"prisma": "4.10.1",
|
||||
"reflect-metadata": "0.1.13",
|
||||
"rxjs": "7.5.6",
|
||||
"stripe": "8.199.0",
|
||||
"stripe": "11.12.0",
|
||||
"svgmap": "2.6.0",
|
||||
"twitter-api-v2": "1.10.3",
|
||||
"twitter-api-v2": "1.14.2",
|
||||
"uuid": "9.0.0",
|
||||
"yahoo-finance2": "2.3.10",
|
||||
"zone.js": "0.12.0"
|
||||
|
@ -0,0 +1,2 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "SymbolProfile" ADD COLUMN "isin" TEXT;
|
@ -119,6 +119,7 @@ model SymbolProfile {
|
||||
currency String
|
||||
dataSource DataSource
|
||||
id String @id @default(uuid())
|
||||
isin String?
|
||||
name String?
|
||||
updatedAt DateTime @updatedAt
|
||||
scraperConfiguration Json?
|
||||
|
299
prisma/seed.js
299
prisma/seed.js
@ -1,293 +1,7 @@
|
||||
const {
|
||||
AccountType,
|
||||
DataSource,
|
||||
PrismaClient,
|
||||
Role,
|
||||
Type
|
||||
} = require('@prisma/client');
|
||||
const { PrismaClient } = require('@prisma/client');
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
const platformBitcoinSuisse = await prisma.platform.upsert({
|
||||
create: {
|
||||
id: '70b6e475-a2b9-4527-99db-943e4f38ce45',
|
||||
name: 'Bitcoin Suisse',
|
||||
url: 'https://www.bitcoinsuisse.com'
|
||||
},
|
||||
update: {},
|
||||
where: { id: '70b6e475-a2b9-4527-99db-943e4f38ce45' }
|
||||
});
|
||||
|
||||
const platformBitpanda = await prisma.platform.upsert({
|
||||
create: {
|
||||
id: 'debf9110-498f-4811-b972-7ebbd317e730',
|
||||
name: 'Bitpanda',
|
||||
url: 'https://www.bitpanda.com'
|
||||
},
|
||||
update: {},
|
||||
where: { id: 'debf9110-498f-4811-b972-7ebbd317e730' }
|
||||
});
|
||||
|
||||
const platformCoinbase = await prisma.platform.upsert({
|
||||
create: {
|
||||
id: '8dc24b88-bb92-4152-af25-fe6a31643e26',
|
||||
name: 'Coinbase',
|
||||
url: 'https://www.coinbase.com'
|
||||
},
|
||||
update: {},
|
||||
where: { id: '8dc24b88-bb92-4152-af25-fe6a31643e26' }
|
||||
});
|
||||
|
||||
const platformDegiro = await prisma.platform.upsert({
|
||||
create: {
|
||||
id: '94c1a2f4-a666-47be-84cd-4c8952e74c81',
|
||||
name: 'DEGIRO',
|
||||
url: 'https://www.degiro.eu'
|
||||
},
|
||||
update: {},
|
||||
where: { id: '94c1a2f4-a666-47be-84cd-4c8952e74c81' }
|
||||
});
|
||||
|
||||
const platformInteractiveBrokers = await prisma.platform.upsert({
|
||||
create: {
|
||||
id: '9da3a8a7-4795-43e3-a6db-ccb914189737',
|
||||
name: 'Interactive Brokers',
|
||||
url: 'https://www.interactivebrokers.com'
|
||||
},
|
||||
update: {},
|
||||
where: { id: '9da3a8a7-4795-43e3-a6db-ccb914189737' }
|
||||
});
|
||||
|
||||
const platformPostFinance = await prisma.platform.upsert({
|
||||
create: {
|
||||
id: '5377d9df-0d25-42c2-9d9b-e4c63166281e',
|
||||
name: 'PostFinance',
|
||||
url: 'https://www.postfinance.ch'
|
||||
},
|
||||
update: {},
|
||||
where: { id: '5377d9df-0d25-42c2-9d9b-e4c63166281e' }
|
||||
});
|
||||
|
||||
const platformSwissquote = await prisma.platform.upsert({
|
||||
create: {
|
||||
id: '1377d9df-0d25-42c2-9d9b-e4c63156291f',
|
||||
name: 'Swissquote',
|
||||
url: 'https://swissquote.com'
|
||||
},
|
||||
update: {},
|
||||
where: { id: '1377d9df-0d25-42c2-9d9b-e4c63156291f' }
|
||||
});
|
||||
|
||||
const userDemo = await prisma.user.upsert({
|
||||
create: {
|
||||
accessToken:
|
||||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjliMTEyYjRkLTNiN2QtNGJhZC05YmRkLTNiMGY3YjRkYWMyZiIsImlhdCI6MTYxODUxMjAxNCwiZXhwIjoxNjIxMTA0MDE0fQ.l3WUxpI0hxuQtdPrD0kd7sem6S2kx_7CrdNvkmlKuWw',
|
||||
Account: {
|
||||
create: [
|
||||
{
|
||||
accountType: AccountType.SECURITIES,
|
||||
balance: 0,
|
||||
currency: 'USD',
|
||||
id: 'd804de69-0429-42dc-b6ca-b308fd7dd926',
|
||||
name: 'Coinbase Account',
|
||||
platformId: platformCoinbase.id
|
||||
},
|
||||
{
|
||||
accountType: AccountType.SECURITIES,
|
||||
balance: 0,
|
||||
currency: 'EUR',
|
||||
id: '65cfb79d-b6c7-4591-9d46-73426bc62094',
|
||||
name: 'DEGIRO Account',
|
||||
platformId: platformDegiro.id
|
||||
},
|
||||
{
|
||||
accountType: AccountType.SECURITIES,
|
||||
balance: 0,
|
||||
currency: 'USD',
|
||||
id: '480269ce-e12a-4fd1-ac88-c4b0ff3f899c',
|
||||
isDefault: true,
|
||||
name: 'Interactive Brokers Account',
|
||||
platformId: platformInteractiveBrokers.id
|
||||
}
|
||||
]
|
||||
},
|
||||
id: '9b112b4d-3b7d-4bad-9bdd-3b0f7b4dac2f',
|
||||
role: Role.DEMO
|
||||
},
|
||||
update: {},
|
||||
where: { id: '9b112b4d-3b7d-4bad-9bdd-3b0f7b4dac2f' }
|
||||
});
|
||||
|
||||
await prisma.symbolProfile.createMany({
|
||||
data: [
|
||||
{
|
||||
assetClass: 'EQUITY',
|
||||
assetSubClass: 'STOCK',
|
||||
countries: [{ code: 'US', weight: 1 }],
|
||||
currency: 'USD',
|
||||
dataSource: DataSource.YAHOO,
|
||||
id: '2bd26362-136e-411c-b578-334084b4cdcc',
|
||||
name: 'Amazon.com Inc.',
|
||||
sectors: [{ name: 'Consumer Cyclical', weight: 1 }],
|
||||
symbol: 'AMZN'
|
||||
},
|
||||
{
|
||||
assetClass: 'CASH',
|
||||
assetSubClass: 'CRYPTOCURRENCY',
|
||||
countries: undefined,
|
||||
currency: 'USD',
|
||||
dataSource: DataSource.YAHOO,
|
||||
id: 'fdc42ea6-1321-44f5-9fb0-d7f1f2cf9b1e',
|
||||
name: 'Bitcoin USD',
|
||||
sectors: undefined,
|
||||
symbol: 'BTCUSD'
|
||||
},
|
||||
{
|
||||
assetClass: 'EQUITY',
|
||||
assetSubClass: 'STOCK',
|
||||
countries: [{ code: 'US', weight: 1 }],
|
||||
currency: 'USD',
|
||||
dataSource: DataSource.YAHOO,
|
||||
id: 'd1ee9681-fb21-4f99-a3b7-afd4fc04df2e',
|
||||
name: 'Tesla Inc.',
|
||||
sectors: [{ name: 'Consumer Cyclical', weight: 1 }],
|
||||
symbol: 'TSLA'
|
||||
},
|
||||
{
|
||||
assetClass: 'EQUITY',
|
||||
assetSubClass: 'ETF',
|
||||
countries: [
|
||||
{ code: 'US', weight: 0.9886789999999981 },
|
||||
{ code: 'NL', weight: 0.000203 },
|
||||
{ code: 'CA', weight: 0.000362 }
|
||||
],
|
||||
currency: 'USD',
|
||||
dataSource: DataSource.YAHOO,
|
||||
id: '7d9c8540-061e-4e7e-b019-0d0f4a84e796',
|
||||
name: 'Vanguard Total Stock Market Index Fund ETF',
|
||||
sectors: [
|
||||
{ name: 'Technology', weight: 0.31393799999999955 },
|
||||
{ name: 'Consumer Cyclical', weight: 0.149224 },
|
||||
{ name: 'Financials', weight: 0.11716100000000002 },
|
||||
{ name: 'Healthcare', weight: 0.13285199999999994 },
|
||||
{ name: 'Consumer Staples', weight: 0.053919000000000016 },
|
||||
{ name: 'Energy', weight: 0.025529999999999997 },
|
||||
{ name: 'Telecommunications', weight: 0.012579 },
|
||||
{ name: 'Industrials', weight: 0.09526399999999995 },
|
||||
{ name: 'Utilities', weight: 0.024791999999999988 },
|
||||
{ name: 'Materials', weight: 0.027664 },
|
||||
{ name: 'Real Estate', weight: 0.03239999999999998 },
|
||||
{ name: 'Communication', weight: 0.0036139999999999996 },
|
||||
{ name: 'Other', weight: 0.000218 }
|
||||
],
|
||||
symbol: 'VTI'
|
||||
}
|
||||
],
|
||||
skipDuplicates: true
|
||||
});
|
||||
|
||||
await prisma.order.createMany({
|
||||
data: [
|
||||
{
|
||||
accountId: '65cfb79d-b6c7-4591-9d46-73426bc62094',
|
||||
accountUserId: userDemo.id,
|
||||
date: new Date(Date.UTC(2017, 0, 3, 0, 0, 0)),
|
||||
fee: 30,
|
||||
id: 'cf7c0418-8535-4089-ae3d-5dbfa0aec2e1',
|
||||
quantity: 50,
|
||||
symbolProfileId: 'd1ee9681-fb21-4f99-a3b7-afd4fc04df2e', // TSLA
|
||||
type: Type.BUY,
|
||||
unitPrice: 42.97,
|
||||
userId: userDemo.id
|
||||
},
|
||||
{
|
||||
accountId: 'd804de69-0429-42dc-b6ca-b308fd7dd926',
|
||||
accountUserId: userDemo.id,
|
||||
date: new Date(Date.UTC(2017, 7, 16, 0, 0, 0)),
|
||||
fee: 29.9,
|
||||
id: 'a1c5d73a-8631-44e5-ac44-356827a5212c',
|
||||
quantity: 0.5614682,
|
||||
symbolProfileId: 'fdc42ea6-1321-44f5-9fb0-d7f1f2cf9b1e', // BTCUSD
|
||||
type: Type.BUY,
|
||||
unitPrice: 3562.089535970158,
|
||||
userId: userDemo.id
|
||||
},
|
||||
{
|
||||
accountId: '480269ce-e12a-4fd1-ac88-c4b0ff3f899c',
|
||||
accountUserId: userDemo.id,
|
||||
date: new Date(Date.UTC(2018, 9, 1, 0, 0, 0)),
|
||||
fee: 80.79,
|
||||
id: '71c08e2a-4a86-44ae-a890-c337de5d5f9b',
|
||||
quantity: 5,
|
||||
symbolProfileId: '2bd26362-136e-411c-b578-334084b4cdcc', // AMZN
|
||||
type: Type.BUY,
|
||||
unitPrice: 2021.99,
|
||||
userId: userDemo.id
|
||||
},
|
||||
{
|
||||
accountId: '480269ce-e12a-4fd1-ac88-c4b0ff3f899c',
|
||||
accountUserId: userDemo.id,
|
||||
date: new Date(Date.UTC(2019, 2, 1, 0, 0, 0)),
|
||||
fee: 19.9,
|
||||
id: '385f2c2c-d53e-4937-b0e5-e92ef6020d4e',
|
||||
quantity: 10,
|
||||
symbolProfileId: '7d9c8540-061e-4e7e-b019-0d0f4a84e796', // VTI
|
||||
type: Type.BUY,
|
||||
unitPrice: 144.38,
|
||||
userId: userDemo.id
|
||||
},
|
||||
{
|
||||
accountId: '480269ce-e12a-4fd1-ac88-c4b0ff3f899c',
|
||||
accountUserId: userDemo.id,
|
||||
date: new Date(Date.UTC(2019, 8, 3, 0, 0, 0)),
|
||||
fee: 19.9,
|
||||
id: '185f2c2c-d53e-4937-b0e5-a93ef6020d4e',
|
||||
quantity: 10,
|
||||
symbolProfileId: '7d9c8540-061e-4e7e-b019-0d0f4a84e796', // VTI
|
||||
type: Type.BUY,
|
||||
unitPrice: 147.99,
|
||||
userId: userDemo.id
|
||||
},
|
||||
{
|
||||
accountId: '480269ce-e12a-4fd1-ac88-c4b0ff3f899c',
|
||||
accountUserId: userDemo.id,
|
||||
date: new Date(Date.UTC(2020, 2, 2, 0, 0, 0)),
|
||||
fee: 19.9,
|
||||
id: '347b0430-a84f-4031-a0f9-390399066ad6',
|
||||
quantity: 10,
|
||||
symbolProfileId: '7d9c8540-061e-4e7e-b019-0d0f4a84e796', // VTI
|
||||
type: Type.BUY,
|
||||
unitPrice: 151.41,
|
||||
userId: userDemo.id
|
||||
},
|
||||
{
|
||||
accountId: '480269ce-e12a-4fd1-ac88-c4b0ff3f899c',
|
||||
accountUserId: userDemo.id,
|
||||
date: new Date(Date.UTC(2020, 8, 1, 0, 0, 0)),
|
||||
fee: 19.9,
|
||||
id: '67ec3f47-3189-4b63-ba05-60d3a06b302f',
|
||||
quantity: 10,
|
||||
symbolProfileId: '7d9c8540-061e-4e7e-b019-0d0f4a84e796', // VTI
|
||||
type: Type.BUY,
|
||||
unitPrice: 177.69,
|
||||
userId: userDemo.id
|
||||
},
|
||||
{
|
||||
accountId: '480269ce-e12a-4fd1-ac88-c4b0ff3f899c',
|
||||
accountUserId: userDemo.id,
|
||||
date: new Date(Date.UTC(2020, 2, 1, 0, 0, 0)),
|
||||
fee: 19.9,
|
||||
id: 'd01c6fbc-fa8d-47e6-8e80-66f882d2bfd2',
|
||||
quantity: 10,
|
||||
symbolProfileId: '7d9c8540-061e-4e7e-b019-0d0f4a84e796', // VTI
|
||||
type: Type.BUY,
|
||||
unitPrice: 203.15,
|
||||
userId: userDemo.id
|
||||
}
|
||||
],
|
||||
skipDuplicates: true
|
||||
});
|
||||
|
||||
await prisma.tag.createMany({
|
||||
data: [
|
||||
{
|
||||
@ -297,17 +11,6 @@ async function main() {
|
||||
],
|
||||
skipDuplicates: true
|
||||
});
|
||||
|
||||
console.log({
|
||||
platformBitcoinSuisse,
|
||||
platformBitpanda,
|
||||
platformCoinbase,
|
||||
platformDegiro,
|
||||
platformInteractiveBrokers,
|
||||
platformPostFinance,
|
||||
platformSwissquote,
|
||||
userDemo
|
||||
});
|
||||
}
|
||||
|
||||
main()
|
||||
|
59
yarn.lock
59
yarn.lock
@ -5859,10 +5859,10 @@
|
||||
regenerator-runtime "^0.13.7"
|
||||
resolve-from "^5.0.0"
|
||||
|
||||
"@stripe/stripe-js@1.22.0":
|
||||
version "1.22.0"
|
||||
resolved "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.22.0.tgz"
|
||||
integrity sha512-fm8TR8r4LwbXgBIYdPmeMjJJkxxFC66tvoliNnmXOpUgZSgQKoNPW3ON0ZphZIiif1oqWNhAaSrr7tOvGu+AFg==
|
||||
"@stripe/stripe-js@1.47.0":
|
||||
version "1.47.0"
|
||||
resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.47.0.tgz#48626a2e43302330aa826ce498a2d9761db4053d"
|
||||
integrity sha512-jKSClqEIKS2MbPCXlSsseDSZyJ3dVrfUrYMz5LBY1o9iS2tfKbpTZACt8r2g+xyQozI+uHr76pVTyFsmBKA4Mg==
|
||||
|
||||
"@tootallnate/once@2":
|
||||
version "2.0.0"
|
||||
@ -9352,6 +9352,11 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1:
|
||||
path-type "^4.0.0"
|
||||
yaml "^1.10.0"
|
||||
|
||||
countries-and-timezones@3.4.1:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/countries-and-timezones/-/countries-and-timezones-3.4.1.tgz#0ec2540f57e42f0f740eb2acaede786043347fe1"
|
||||
integrity sha512-INeHGCony4XUUR8iGL/lmt9s1Oi+n+gFHeJAMfbV5hJfYeDOB8JG1oxz5xFQu5oBZoRCJe/87k1Vzue9DoIauA==
|
||||
|
||||
countries-list@2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.npmjs.org/countries-list/-/countries-list-2.6.1.tgz"
|
||||
@ -16464,10 +16469,10 @@ ng-extract-i18n-merge@2.5.0:
|
||||
xml_normalize "~0.8.4"
|
||||
xmldoc "~1.1.2"
|
||||
|
||||
ngx-device-detector@3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/ngx-device-detector/-/ngx-device-detector-3.0.0.tgz"
|
||||
integrity sha512-mzegvxnNTDkHTxh+UeWnCUgZ91/XDOcN2kj8aCupvA7wNgDc/NZ0L90feKJsc+wES7IWq0/DIIKq2F732WOkfw==
|
||||
ngx-device-detector@5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ngx-device-detector/-/ngx-device-detector-5.0.1.tgz#da511f0393fff7dab45a3dfa72d40981c5e81e3c"
|
||||
integrity sha512-hVKaGzyXzy6zeliYyN7runz3eOOsh3tmZ8A6P5MSpHIjVjSx3pUJcobFTKNyHGn/zGS4JFWuhSSb7QmNwmqK9w==
|
||||
dependencies:
|
||||
tslib "^2.0.0"
|
||||
|
||||
@ -16484,18 +16489,18 @@ ngx-markdown@15.1.0:
|
||||
mermaid "^9.1.2"
|
||||
prismjs "^1.28.0"
|
||||
|
||||
ngx-skeleton-loader@5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/ngx-skeleton-loader/-/ngx-skeleton-loader-5.0.0.tgz"
|
||||
integrity sha512-6cz8UAu4WcYnBp/LnU053LCIwjKNZWX8GX1v3bvqQVdDa1ubsEeJm+CZxk5B8W2jP9CcFhvWrBlmmVUyl1Yxug==
|
||||
ngx-skeleton-loader@7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ngx-skeleton-loader/-/ngx-skeleton-loader-7.0.0.tgz#3b1325025a7208a20f3a0fdba6e578532a09cfcd"
|
||||
integrity sha512-myc6GNcNhyksZrimIFkCxeihi0kQ8JhQVZiGbtiIv4gYrnnRk5nXbs3kYitK8E8OstHG+jlsmRofqGBxuIsYTA==
|
||||
dependencies:
|
||||
perf-marks "^1.13.4"
|
||||
tslib "^2.0.0"
|
||||
|
||||
ngx-stripe@13.0.0:
|
||||
version "13.0.0"
|
||||
resolved "https://registry.npmjs.org/ngx-stripe/-/ngx-stripe-13.0.0.tgz"
|
||||
integrity sha512-SImKvoC/mZZrtzh2UUmxFdkqMLKX2y+BtcvMAPdHD4D7miXWEjCTZeXt8h85mcfy7y1NKKwIipH4CSr9eBzZ4w==
|
||||
ngx-stripe@15.5.0:
|
||||
version "15.5.0"
|
||||
resolved "https://registry.yarnpkg.com/ngx-stripe/-/ngx-stripe-15.5.0.tgz#b05fc1cf9f55bb5e7f307ac5cfdf29807a2f48a9"
|
||||
integrity sha512-Ut3JANfxSzl/4qy+pokHOXGVITgNSlSMv7XGN2Y4tPDk6BVUD9SSl/3VuXW9UdbKAmX0XS68nRACiKCOSet5zw==
|
||||
dependencies:
|
||||
tslib "^2.3.0"
|
||||
|
||||
@ -18268,14 +18273,14 @@ qs@6.10.3:
|
||||
dependencies:
|
||||
side-channel "^1.0.4"
|
||||
|
||||
qs@6.11.0:
|
||||
qs@6.11.0, qs@^6.11.0:
|
||||
version "6.11.0"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
|
||||
integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
|
||||
dependencies:
|
||||
side-channel "^1.0.4"
|
||||
|
||||
qs@^6.10.0, qs@^6.4.0, qs@^6.6.0:
|
||||
qs@^6.10.0, qs@^6.4.0:
|
||||
version "6.10.5"
|
||||
resolved "https://registry.npmjs.org/qs/-/qs-6.10.5.tgz"
|
||||
integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ==
|
||||
@ -20016,13 +20021,13 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
|
||||
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
|
||||
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
|
||||
|
||||
stripe@8.199.0:
|
||||
version "8.199.0"
|
||||
resolved "https://registry.npmjs.org/stripe/-/stripe-8.199.0.tgz"
|
||||
integrity sha512-Bc5Zfp6eOOCdde9x5NPrAczeGSKuNwemzjsfGJXWtpbUfQXgJujzTGgkhx2YuzamqakDYJkTgf9w7Ry2uY8QNA==
|
||||
stripe@11.12.0:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.yarnpkg.com/stripe/-/stripe-11.12.0.tgz#2d7d4c37a6447a972128b1266e027693241704e3"
|
||||
integrity sha512-7yzFyVV/eYpYalfjnw1f9sh/N3r5QVdx5MFtmpOg2QikKVAW4AptXC8P0wj1KNCd/LIo23nTDo0+m9788jHswg==
|
||||
dependencies:
|
||||
"@types/node" ">=8.1.0"
|
||||
qs "^6.6.0"
|
||||
qs "^6.11.0"
|
||||
|
||||
strong-log-transformer@^2.1.0:
|
||||
version "2.1.0"
|
||||
@ -20674,10 +20679,10 @@ tweetnacl@^1.0.1:
|
||||
resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz"
|
||||
integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
|
||||
|
||||
twitter-api-v2@1.10.3:
|
||||
version "1.10.3"
|
||||
resolved "https://registry.npmjs.org/twitter-api-v2/-/twitter-api-v2-1.10.3.tgz"
|
||||
integrity sha512-AbCboiTOWv4DUPbAlF43Uyk4iK/QRk354pNdKgtOmv45+BWGB5Kdv6ls+C99pww/DyLBiXgQEnuyGv4d1HdRhw==
|
||||
twitter-api-v2@1.14.2:
|
||||
version "1.14.2"
|
||||
resolved "https://registry.yarnpkg.com/twitter-api-v2/-/twitter-api-v2-1.14.2.tgz#d928eeb588f3a195a1db8059f0654b75d4278d3a"
|
||||
integrity sha512-389e/rWaN8zWkmD5z2IpKVb5+ojPxVtrexQoGBI1Xfib1mE/9M7k7zbnZ3Q/WLwthwcWkQIlB25ecT64AL8LvQ==
|
||||
|
||||
type-check@^0.4.0, type-check@~0.4.0:
|
||||
version "0.4.0"
|
||||
|
Reference in New Issue
Block a user