|
|
@ -258,14 +258,9 @@ export class PortfolioService { |
|
|
|
): Promise<PortfolioPositionDetail> { |
|
|
|
const userId = await this.getUserId(aImpersonationId); |
|
|
|
|
|
|
|
const portfolioCalculator = new PortfolioCalculator( |
|
|
|
this.currentRateService, |
|
|
|
this.request.user.Settings.currency |
|
|
|
); |
|
|
|
|
|
|
|
const { transactionPoints } = await this.getTransactionPoints(userId); |
|
|
|
const orders = await this.getOrders(userId); |
|
|
|
|
|
|
|
if (transactionPoints?.length <= 0) { |
|
|
|
if (orders.length <= 0) { |
|
|
|
return { |
|
|
|
averagePrice: undefined, |
|
|
|
currency: undefined, |
|
|
@ -283,7 +278,24 @@ export class PortfolioService { |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
portfolioCalculator.setTransactionPoints(transactionPoints); |
|
|
|
const positionCurrency = orders[0].currency; |
|
|
|
|
|
|
|
const portfolioOrders: PortfolioOrder[] = orders.map((order) => ({ |
|
|
|
currency: order.currency, |
|
|
|
date: format(order.date, DATE_FORMAT), |
|
|
|
name: order.SymbolProfile?.name, |
|
|
|
quantity: new Big(order.quantity), |
|
|
|
symbol: order.symbol, |
|
|
|
type: <OrderType>order.type, |
|
|
|
unitPrice: new Big(order.unitPrice) |
|
|
|
})); |
|
|
|
|
|
|
|
const portfolioCalculator = new PortfolioCalculator( |
|
|
|
this.currentRateService, |
|
|
|
positionCurrency |
|
|
|
); |
|
|
|
portfolioCalculator.computeTransactionPoints(portfolioOrders); |
|
|
|
const transactionPoints = portfolioCalculator.getTransactionPoints(); |
|
|
|
|
|
|
|
const portfolioStart = parseDate(transactionPoints[0].date); |
|
|
|
const currentPositions = await portfolioCalculator.getCurrentPositions( |
|
|
@ -299,16 +311,22 @@ export class PortfolioService { |
|
|
|
averagePrice, |
|
|
|
currency, |
|
|
|
firstBuyDate, |
|
|
|
investment, |
|
|
|
marketPrice, |
|
|
|
quantity, |
|
|
|
transactionCount |
|
|
|
} = position; |
|
|
|
|
|
|
|
// Convert market price back to currency of position
|
|
|
|
const marketPrice = this.exchangeRateDataService.toCurrency( |
|
|
|
position.marketPrice, |
|
|
|
this.request.user.Settings.currency, |
|
|
|
currency |
|
|
|
// Convert investment and gross performance to currency of user
|
|
|
|
const userCurrency = this.request.user.Settings.currency; |
|
|
|
const investment = this.exchangeRateDataService.toCurrency( |
|
|
|
position.investment.toNumber(), |
|
|
|
currency, |
|
|
|
userCurrency |
|
|
|
); |
|
|
|
const grossPerformance = this.exchangeRateDataService.toCurrency( |
|
|
|
position.grossPerformance.toNumber(), |
|
|
|
currency, |
|
|
|
userCurrency |
|
|
|
); |
|
|
|
|
|
|
|
const historicalData = await this.dataProviderService.getHistorical( |
|
|
@ -357,15 +375,15 @@ export class PortfolioService { |
|
|
|
return { |
|
|
|
currency, |
|
|
|
firstBuyDate, |
|
|
|
grossPerformance, |
|
|
|
investment, |
|
|
|
marketPrice, |
|
|
|
maxPrice, |
|
|
|
minPrice, |
|
|
|
transactionCount, |
|
|
|
averagePrice: averagePrice.toNumber(), |
|
|
|
grossPerformance: position.grossPerformance.toNumber(), |
|
|
|
grossPerformancePercent: position.grossPerformancePercentage.toNumber(), |
|
|
|
historicalData: historicalDataArray, |
|
|
|
investment: investment.toNumber(), |
|
|
|
quantity: quantity.toNumber(), |
|
|
|
symbol: aSymbol |
|
|
|
}; |
|
|
|