Browse Source

Refactor asset sub class EMERGENCY_FUND

pull/749/head
Thomas 3 years ago
parent
commit
c4e56ad849
  1. 20
      apps/api/src/app/portfolio/portfolio.service-new.ts
  2. 20
      apps/api/src/app/portfolio/portfolio.service.ts
  3. 6
      apps/client/src/app/components/positions-table/positions-table.component.ts
  4. 2
      libs/common/src/lib/config.ts

20
apps/api/src/app/portfolio/portfolio.service-new.ts

@ -20,13 +20,16 @@ import { ImpersonationService } from '@ghostfolio/api/services/impersonation.ser
import { MarketState } from '@ghostfolio/api/services/interfaces/interfaces'; import { MarketState } from '@ghostfolio/api/services/interfaces/interfaces';
import { EnhancedSymbolProfile } from '@ghostfolio/api/services/interfaces/symbol-profile.interface'; import { EnhancedSymbolProfile } from '@ghostfolio/api/services/interfaces/symbol-profile.interface';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service';
import { UNKNOWN_KEY, baseCurrency } from '@ghostfolio/common/config'; import {
ASSET_SUB_CLASS_EMERGENCY_FUND,
UNKNOWN_KEY,
baseCurrency
} from '@ghostfolio/common/config';
import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper'; import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper';
import { import {
Accounts, Accounts,
PortfolioDetails, PortfolioDetails,
PortfolioPerformanceResponse, PortfolioPerformanceResponse,
PortfolioPosition,
PortfolioReport, PortfolioReport,
PortfolioSummary, PortfolioSummary,
Position, Position,
@ -967,9 +970,7 @@ export class PortfolioServiceNew {
value: Big; value: Big;
userCurrency: string; userCurrency: string;
}) { }) {
const cashPositions: { const cashPositions: PortfolioDetails['holdings'] = {};
[symbol: string]: Partial<PortfolioPosition>;
} = {};
for (const account of cashDetails.accounts) { for (const account of cashDetails.accounts) {
const convertedBalance = this.exchangeRateDataService.toCurrency( const convertedBalance = this.exchangeRateDataService.toCurrency(
@ -993,6 +994,7 @@ export class PortfolioServiceNew {
assetSubClass: AssetClass.CASH, assetSubClass: AssetClass.CASH,
countries: [], countries: [],
currency: account.currency, currency: account.currency,
dataSource: undefined,
grossPerformance: 0, grossPerformance: 0,
grossPerformancePercent: 0, grossPerformancePercent: 0,
investment: convertedBalance, investment: convertedBalance,
@ -1010,12 +1012,12 @@ export class PortfolioServiceNew {
} }
} }
cashPositions['EMERGENCY_FUND'] = { cashPositions[ASSET_SUB_CLASS_EMERGENCY_FUND] = {
...cashPositions[userCurrency], ...cashPositions[userCurrency],
assetSubClass: 'EMERGENCY_FUND', assetSubClass: ASSET_SUB_CLASS_EMERGENCY_FUND,
investment: emergencyFund.toNumber(), investment: emergencyFund.toNumber(),
name: 'EMERGENCY_FUND', name: ASSET_SUB_CLASS_EMERGENCY_FUND,
symbol: 'EMERGENCY_FUND', symbol: ASSET_SUB_CLASS_EMERGENCY_FUND,
value: emergencyFund.toNumber() value: emergencyFund.toNumber()
}; };
cashPositions[userCurrency].investment = new Big( cashPositions[userCurrency].investment = new Big(

20
apps/api/src/app/portfolio/portfolio.service.ts

@ -21,13 +21,16 @@ import { ImpersonationService } from '@ghostfolio/api/services/impersonation.ser
import { MarketState } from '@ghostfolio/api/services/interfaces/interfaces'; import { MarketState } from '@ghostfolio/api/services/interfaces/interfaces';
import { EnhancedSymbolProfile } from '@ghostfolio/api/services/interfaces/symbol-profile.interface'; import { EnhancedSymbolProfile } from '@ghostfolio/api/services/interfaces/symbol-profile.interface';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service';
import { UNKNOWN_KEY, baseCurrency } from '@ghostfolio/common/config'; import {
UNKNOWN_KEY,
baseCurrency,
ASSET_SUB_CLASS_EMERGENCY_FUND
} from '@ghostfolio/common/config';
import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper'; import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper';
import { import {
Accounts, Accounts,
PortfolioDetails, PortfolioDetails,
PortfolioPerformanceResponse, PortfolioPerformanceResponse,
PortfolioPosition,
PortfolioReport, PortfolioReport,
PortfolioSummary, PortfolioSummary,
Position, Position,
@ -931,9 +934,7 @@ export class PortfolioService {
userCurrency: string; userCurrency: string;
value: Big; value: Big;
}) { }) {
const cashPositions: { const cashPositions: PortfolioDetails['holdings'] = {};
[symbol: string]: Partial<PortfolioPosition>;
} = {};
for (const account of cashDetails.accounts) { for (const account of cashDetails.accounts) {
const convertedBalance = this.exchangeRateDataService.toCurrency( const convertedBalance = this.exchangeRateDataService.toCurrency(
@ -957,6 +958,7 @@ export class PortfolioService {
assetSubClass: AssetClass.CASH, assetSubClass: AssetClass.CASH,
countries: [], countries: [],
currency: account.currency, currency: account.currency,
dataSource: undefined,
grossPerformance: 0, grossPerformance: 0,
grossPerformancePercent: 0, grossPerformancePercent: 0,
investment: convertedBalance, investment: convertedBalance,
@ -974,12 +976,12 @@ export class PortfolioService {
} }
} }
cashPositions['EMERGENCY_FUND'] = { cashPositions[ASSET_SUB_CLASS_EMERGENCY_FUND] = {
...cashPositions[userCurrency], ...cashPositions[userCurrency],
assetSubClass: 'EMERGENCY_FUND', assetSubClass: ASSET_SUB_CLASS_EMERGENCY_FUND,
investment: emergencyFund.toNumber(), investment: emergencyFund.toNumber(),
name: 'EMERGENCY_FUND', name: ASSET_SUB_CLASS_EMERGENCY_FUND,
symbol: 'EMERGENCY_FUND', symbol: ASSET_SUB_CLASS_EMERGENCY_FUND,
value: emergencyFund.toNumber() value: emergencyFund.toNumber()
}; };

6
apps/client/src/app/components/positions-table/positions-table.component.ts

@ -13,6 +13,7 @@ import { MatPaginator } from '@angular/material/paginator';
import { MatSort } from '@angular/material/sort'; import { MatSort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table'; import { MatTableDataSource } from '@angular/material/table';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { ASSET_SUB_CLASS_EMERGENCY_FUND } from '@ghostfolio/common/config';
import { PortfolioPosition, UniqueAsset } from '@ghostfolio/common/interfaces'; import { PortfolioPosition, UniqueAsset } from '@ghostfolio/common/interfaces';
import { AssetClass, Order as OrderModel } from '@prisma/client'; import { AssetClass, Order as OrderModel } from '@prisma/client';
import { Subject, Subscription } from 'rxjs'; import { Subject, Subscription } from 'rxjs';
@ -39,7 +40,10 @@ export class PositionsTableComponent implements OnChanges, OnDestroy, OnInit {
public dataSource: MatTableDataSource<PortfolioPosition> = public dataSource: MatTableDataSource<PortfolioPosition> =
new MatTableDataSource(); new MatTableDataSource();
public displayedColumns = []; public displayedColumns = [];
public ignoreAssetSubClasses = [AssetClass.CASH.toString(), 'EMERGENCY_FUND']; public ignoreAssetSubClasses = [
AssetClass.CASH.toString(),
ASSET_SUB_CLASS_EMERGENCY_FUND
];
public isLoading = true; public isLoading = true;
public pageSize = 7; public pageSize = 7;
public routeQueryParams: Subscription; public routeQueryParams: Subscription;

2
libs/common/src/lib/config.ts

@ -42,6 +42,8 @@ export const warnColorRgb = {
b: 69 b: 69
}; };
export const ASSET_SUB_CLASS_EMERGENCY_FUND = 'EMERGENCY_FUND';
export const DEFAULT_DATE_FORMAT = 'dd.MM.yyyy'; export const DEFAULT_DATE_FORMAT = 'dd.MM.yyyy';
export const DEFAULT_DATE_FORMAT_MONTH_YEAR = 'MMM yyyy'; export const DEFAULT_DATE_FORMAT_MONTH_YEAR = 'MMM yyyy';

Loading…
Cancel
Save