|
@ -1148,74 +1148,49 @@ export class PortfolioService { |
|
|
|
|
|
|
|
|
public async getReport(impersonationId: string): Promise<PortfolioReport> { |
|
|
public async getReport(impersonationId: string): Promise<PortfolioReport> { |
|
|
const userId = await this.getUserId(impersonationId, this.request.user.id); |
|
|
const userId = await this.getUserId(impersonationId, this.request.user.id); |
|
|
const user = await this.userService.user({ id: userId }); |
|
|
const userSettings = <UserSettings>this.request.user.Settings.settings; |
|
|
const userCurrency = this.getUserCurrency(user); |
|
|
|
|
|
|
|
|
|
|
|
const { activities } = |
|
|
|
|
|
await this.orderService.getOrdersForPortfolioCalculator({ |
|
|
|
|
|
userCurrency, |
|
|
|
|
|
userId |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
const portfolioCalculator = this.calculatorFactory.createCalculator({ |
|
|
const { accounts, holdings, summary } = await this.getDetails({ |
|
|
activities, |
|
|
impersonationId, |
|
|
userId, |
|
|
userId, |
|
|
calculationType: PerformanceCalculationType.TWR, |
|
|
withMarkets: true, |
|
|
currency: this.request.user.Settings.settings.baseCurrency |
|
|
withSummary: true |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
let { totalFeesWithCurrencyEffect, positions, totalInvestment } = |
|
|
|
|
|
await portfolioCalculator.getSnapshot(); |
|
|
|
|
|
|
|
|
|
|
|
positions = positions.filter((item) => !item.quantity.eq(0)); |
|
|
|
|
|
|
|
|
|
|
|
const portfolioItemsNow: { [symbol: string]: TimelinePosition } = {}; |
|
|
|
|
|
|
|
|
|
|
|
for (const position of positions) { |
|
|
|
|
|
portfolioItemsNow[position.symbol] = position; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const { accounts } = await this.getValueOfAccountsAndPlatforms({ |
|
|
|
|
|
activities, |
|
|
|
|
|
portfolioItemsNow, |
|
|
|
|
|
userCurrency, |
|
|
|
|
|
userId |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
const userSettings = <UserSettings>this.request.user.Settings.settings; |
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
return { |
|
|
rules: { |
|
|
rules: { |
|
|
accountClusterRisk: isEmpty(activities) |
|
|
accountClusterRisk: |
|
|
? undefined |
|
|
summary.ordersCount > 0 |
|
|
: await this.rulesService.evaluate( |
|
|
? await this.rulesService.evaluate( |
|
|
[ |
|
|
[ |
|
|
new AccountClusterRiskCurrentInvestment( |
|
|
new AccountClusterRiskCurrentInvestment( |
|
|
this.exchangeRateDataService, |
|
|
this.exchangeRateDataService, |
|
|
accounts |
|
|
accounts |
|
|
), |
|
|
), |
|
|
new AccountClusterRiskSingleAccount( |
|
|
new AccountClusterRiskSingleAccount( |
|
|
this.exchangeRateDataService, |
|
|
this.exchangeRateDataService, |
|
|
accounts |
|
|
accounts |
|
|
) |
|
|
) |
|
|
], |
|
|
], |
|
|
userSettings |
|
|
userSettings |
|
|
), |
|
|
) |
|
|
currencyClusterRisk: isEmpty(activities) |
|
|
: undefined, |
|
|
? undefined |
|
|
currencyClusterRisk: |
|
|
: await this.rulesService.evaluate( |
|
|
summary.ordersCount > 0 |
|
|
[ |
|
|
? await this.rulesService.evaluate( |
|
|
new CurrencyClusterRiskBaseCurrencyCurrentInvestment( |
|
|
[ |
|
|
this.exchangeRateDataService, |
|
|
new CurrencyClusterRiskBaseCurrencyCurrentInvestment( |
|
|
positions |
|
|
this.exchangeRateDataService, |
|
|
), |
|
|
Object.values(holdings) |
|
|
new CurrencyClusterRiskCurrentInvestment( |
|
|
), |
|
|
this.exchangeRateDataService, |
|
|
new CurrencyClusterRiskCurrentInvestment( |
|
|
positions |
|
|
this.exchangeRateDataService, |
|
|
) |
|
|
Object.values(holdings) |
|
|
], |
|
|
) |
|
|
userSettings |
|
|
], |
|
|
), |
|
|
userSettings |
|
|
|
|
|
) |
|
|
|
|
|
: undefined, |
|
|
emergencyFund: await this.rulesService.evaluate( |
|
|
emergencyFund: await this.rulesService.evaluate( |
|
|
[ |
|
|
[ |
|
|
new EmergencyFundSetup( |
|
|
new EmergencyFundSetup( |
|
@ -1229,8 +1204,8 @@ export class PortfolioService { |
|
|
[ |
|
|
[ |
|
|
new FeeRatioInitialInvestment( |
|
|
new FeeRatioInitialInvestment( |
|
|
this.exchangeRateDataService, |
|
|
this.exchangeRateDataService, |
|
|
totalInvestment.toNumber(), |
|
|
summary.committedFunds, |
|
|
totalFeesWithCurrencyEffect.toNumber() |
|
|
summary.fees |
|
|
) |
|
|
) |
|
|
], |
|
|
], |
|
|
userSettings |
|
|
userSettings |
|
|