|
|
@ -615,7 +615,7 @@ export class PortfolioService { |
|
|
|
withExcludedAccounts |
|
|
|
}); |
|
|
|
|
|
|
|
const summary = await this.getSummary(impersonationId); |
|
|
|
const summary = await this.getSummary({ impersonationId }); |
|
|
|
|
|
|
|
return { |
|
|
|
accounts, |
|
|
@ -956,77 +956,6 @@ export class PortfolioService { |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
public async getPerformance( |
|
|
|
aImpersonationId: string, |
|
|
|
aDateRange: DateRange = 'max' |
|
|
|
): Promise<PortfolioPerformanceResponse> { |
|
|
|
const userId = await this.getUserId(aImpersonationId, this.request.user.id); |
|
|
|
|
|
|
|
const { portfolioOrders, transactionPoints } = |
|
|
|
await this.getTransactionPoints({ |
|
|
|
userId |
|
|
|
}); |
|
|
|
|
|
|
|
const portfolioCalculator = new PortfolioCalculator({ |
|
|
|
currency: this.request.user.Settings.settings.baseCurrency, |
|
|
|
currentRateService: this.currentRateService, |
|
|
|
orders: portfolioOrders |
|
|
|
}); |
|
|
|
|
|
|
|
if (transactionPoints?.length <= 0) { |
|
|
|
return { |
|
|
|
hasErrors: false, |
|
|
|
performance: { |
|
|
|
currentGrossPerformance: 0, |
|
|
|
currentGrossPerformancePercent: 0, |
|
|
|
currentNetPerformance: 0, |
|
|
|
currentNetPerformancePercent: 0, |
|
|
|
currentValue: 0 |
|
|
|
} |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
portfolioCalculator.setTransactionPoints(transactionPoints); |
|
|
|
|
|
|
|
const portfolioStart = parseDate(transactionPoints[0].date); |
|
|
|
const startDate = this.getStartDate(aDateRange, portfolioStart); |
|
|
|
const currentPositions = await portfolioCalculator.getCurrentPositions( |
|
|
|
startDate |
|
|
|
); |
|
|
|
|
|
|
|
const hasErrors = currentPositions.hasErrors; |
|
|
|
const currentValue = currentPositions.currentValue.toNumber(); |
|
|
|
const currentGrossPerformance = currentPositions.grossPerformance; |
|
|
|
let currentGrossPerformancePercent = |
|
|
|
currentPositions.grossPerformancePercentage; |
|
|
|
const currentNetPerformance = currentPositions.netPerformance; |
|
|
|
let currentNetPerformancePercent = |
|
|
|
currentPositions.netPerformancePercentage; |
|
|
|
|
|
|
|
if (currentGrossPerformance.mul(currentGrossPerformancePercent).lt(0)) { |
|
|
|
// If algebraic sign is different, harmonize it
|
|
|
|
currentGrossPerformancePercent = currentGrossPerformancePercent.mul(-1); |
|
|
|
} |
|
|
|
|
|
|
|
if (currentNetPerformance.mul(currentNetPerformancePercent).lt(0)) { |
|
|
|
// If algebraic sign is different, harmonize it
|
|
|
|
currentNetPerformancePercent = currentNetPerformancePercent.mul(-1); |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|
errors: currentPositions.errors, |
|
|
|
hasErrors: currentPositions.hasErrors || hasErrors, |
|
|
|
performance: { |
|
|
|
currentValue, |
|
|
|
currentGrossPerformance: currentGrossPerformance.toNumber(), |
|
|
|
currentGrossPerformancePercent: |
|
|
|
currentGrossPerformancePercent.toNumber(), |
|
|
|
currentNetPerformance: currentNetPerformance.toNumber(), |
|
|
|
currentNetPerformancePercent: currentNetPerformancePercent.toNumber() |
|
|
|
} |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
public async getPerformanceV2({ |
|
|
|
dateRange = 'max', |
|
|
|
impersonationId |
|
|
@ -1393,14 +1322,18 @@ export class PortfolioService { |
|
|
|
return portfolioStart; |
|
|
|
} |
|
|
|
|
|
|
|
private async getSummary( |
|
|
|
aImpersonationId: string |
|
|
|
): Promise<PortfolioSummary> { |
|
|
|
private async getSummary({ |
|
|
|
impersonationId |
|
|
|
}: { |
|
|
|
impersonationId: string; |
|
|
|
}): Promise<PortfolioSummary> { |
|
|
|
const userCurrency = this.request.user.Settings.settings.baseCurrency; |
|
|
|
const userId = await this.getUserId(aImpersonationId, this.request.user.id); |
|
|
|
const userId = await this.getUserId(impersonationId, this.request.user.id); |
|
|
|
const user = await this.userService.user({ id: userId }); |
|
|
|
|
|
|
|
const performanceInformation = await this.getPerformance(aImpersonationId); |
|
|
|
const performanceInformation = await this.getPerformanceV2({ |
|
|
|
impersonationId |
|
|
|
}); |
|
|
|
|
|
|
|
const { balanceInBaseCurrency } = await this.accountService.getCashDetails({ |
|
|
|
userId, |
|
|
|