|
|
@ -569,7 +569,7 @@ export class PortfolioService { |
|
|
|
|
|
|
|
const emergencyFundInCash = emergencyFund |
|
|
|
.minus( |
|
|
|
this.getEmergencyFundPositionsValueInBaseCurrency({ |
|
|
|
this.getEmergencyFundHoldingsValueInBaseCurrency({ |
|
|
|
holdings |
|
|
|
}) |
|
|
|
) |
|
|
@ -608,8 +608,8 @@ export class PortfolioService { |
|
|
|
userCurrency, |
|
|
|
userId, |
|
|
|
balanceInBaseCurrency: cashDetails.balanceInBaseCurrency, |
|
|
|
emergencyFundPositionsValueInBaseCurrency: |
|
|
|
this.getEmergencyFundPositionsValueInBaseCurrency({ |
|
|
|
emergencyFundHoldingsValueInBaseCurrency: |
|
|
|
this.getEmergencyFundHoldingsValueInBaseCurrency({ |
|
|
|
holdings |
|
|
|
}) |
|
|
|
}); |
|
|
@ -1263,8 +1263,11 @@ export class PortfolioService { |
|
|
|
[ |
|
|
|
new EmergencyFundSetup( |
|
|
|
this.exchangeRateDataService, |
|
|
|
userSettings.emergencyFund || |
|
|
|
this.getEmergencyFundPositionsValueInBaseCurrency({ holdings }) |
|
|
|
this.getTotalEmergencyFund({ |
|
|
|
userSettings, |
|
|
|
emergencyFundHoldingsValueInBaseCurrency: |
|
|
|
this.getEmergencyFundHoldingsValueInBaseCurrency({ holdings }) |
|
|
|
}).toNumber() |
|
|
|
) |
|
|
|
], |
|
|
|
userSettings |
|
|
@ -1586,7 +1589,7 @@ export class PortfolioService { |
|
|
|
return dividendsByGroup; |
|
|
|
} |
|
|
|
|
|
|
|
private getEmergencyFundPositionsValueInBaseCurrency({ |
|
|
|
private getEmergencyFundHoldingsValueInBaseCurrency({ |
|
|
|
holdings |
|
|
|
}: { |
|
|
|
holdings: PortfolioDetails['holdings']; |
|
|
@ -1601,14 +1604,14 @@ export class PortfolioService { |
|
|
|
); |
|
|
|
}); |
|
|
|
|
|
|
|
let valueInBaseCurrencyOfEmergencyFundPositions = new Big(0); |
|
|
|
let valueInBaseCurrencyOfEmergencyFundHoldings = new Big(0); |
|
|
|
|
|
|
|
for (const { valueInBaseCurrency } of emergencyFundHoldings) { |
|
|
|
valueInBaseCurrencyOfEmergencyFundPositions = |
|
|
|
valueInBaseCurrencyOfEmergencyFundPositions.plus(valueInBaseCurrency); |
|
|
|
valueInBaseCurrencyOfEmergencyFundHoldings = |
|
|
|
valueInBaseCurrencyOfEmergencyFundHoldings.plus(valueInBaseCurrency); |
|
|
|
} |
|
|
|
|
|
|
|
return valueInBaseCurrencyOfEmergencyFundPositions.toNumber(); |
|
|
|
return valueInBaseCurrencyOfEmergencyFundHoldings.toNumber(); |
|
|
|
} |
|
|
|
|
|
|
|
private getInitialCashPosition({ |
|
|
@ -1775,7 +1778,7 @@ export class PortfolioService { |
|
|
|
|
|
|
|
private async getSummary({ |
|
|
|
balanceInBaseCurrency, |
|
|
|
emergencyFundPositionsValueInBaseCurrency, |
|
|
|
emergencyFundHoldingsValueInBaseCurrency, |
|
|
|
filteredValueInBaseCurrency, |
|
|
|
impersonationId, |
|
|
|
portfolioCalculator, |
|
|
@ -1783,7 +1786,7 @@ export class PortfolioService { |
|
|
|
userId |
|
|
|
}: { |
|
|
|
balanceInBaseCurrency: number; |
|
|
|
emergencyFundPositionsValueInBaseCurrency: number; |
|
|
|
emergencyFundHoldingsValueInBaseCurrency: number; |
|
|
|
filteredValueInBaseCurrency: Big; |
|
|
|
impersonationId: string; |
|
|
|
portfolioCalculator: PortfolioCalculator; |
|
|
@ -1828,12 +1831,10 @@ export class PortfolioService { |
|
|
|
const dividendInBaseCurrency = |
|
|
|
await portfolioCalculator.getDividendInBaseCurrency(); |
|
|
|
|
|
|
|
const emergencyFund = new Big( |
|
|
|
Math.max( |
|
|
|
emergencyFundPositionsValueInBaseCurrency, |
|
|
|
(user.Settings?.settings as UserSettings)?.emergencyFund ?? 0 |
|
|
|
) |
|
|
|
); |
|
|
|
const totalEmergencyFund = this.getTotalEmergencyFund({ |
|
|
|
emergencyFundHoldingsValueInBaseCurrency, |
|
|
|
userSettings: user.Settings?.settings as UserSettings |
|
|
|
}); |
|
|
|
|
|
|
|
const fees = await portfolioCalculator.getFeesInBaseCurrency(); |
|
|
|
|
|
|
@ -1859,8 +1860,8 @@ export class PortfolioService { |
|
|
|
}).toNumber(); |
|
|
|
|
|
|
|
const cash = new Big(balanceInBaseCurrency) |
|
|
|
.minus(emergencyFund) |
|
|
|
.plus(emergencyFundPositionsValueInBaseCurrency) |
|
|
|
.minus(totalEmergencyFund) |
|
|
|
.plus(emergencyFundHoldingsValueInBaseCurrency) |
|
|
|
.toNumber(); |
|
|
|
|
|
|
|
const committedFunds = new Big(totalBuy).minus(totalSell); |
|
|
@ -1929,11 +1930,11 @@ export class PortfolioService { |
|
|
|
currentValueInBaseCurrency: currentValueInBaseCurrency.toNumber(), |
|
|
|
dividendInBaseCurrency: dividendInBaseCurrency.toNumber(), |
|
|
|
emergencyFund: { |
|
|
|
assets: emergencyFundPositionsValueInBaseCurrency, |
|
|
|
cash: emergencyFund |
|
|
|
.minus(emergencyFundPositionsValueInBaseCurrency) |
|
|
|
assets: emergencyFundHoldingsValueInBaseCurrency, |
|
|
|
cash: totalEmergencyFund |
|
|
|
.minus(emergencyFundHoldingsValueInBaseCurrency) |
|
|
|
.toNumber(), |
|
|
|
total: emergencyFund.toNumber() |
|
|
|
total: totalEmergencyFund.toNumber() |
|
|
|
}, |
|
|
|
fees: fees.toNumber(), |
|
|
|
filteredValueInBaseCurrency: filteredValueInBaseCurrency.toNumber(), |
|
|
@ -1941,7 +1942,7 @@ export class PortfolioService { |
|
|
|
? filteredValueInBaseCurrency.div(netWorth).toNumber() |
|
|
|
: undefined, |
|
|
|
fireWealth: new Big(currentValueInBaseCurrency) |
|
|
|
.minus(emergencyFundPositionsValueInBaseCurrency) |
|
|
|
.minus(emergencyFundHoldingsValueInBaseCurrency) |
|
|
|
.toNumber(), |
|
|
|
grossPerformance: new Big(netPerformance).plus(fees).toNumber(), |
|
|
|
grossPerformanceWithCurrencyEffect: new Big( |
|
|
@ -1986,6 +1987,21 @@ export class PortfolioService { |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
private getTotalEmergencyFund({ |
|
|
|
emergencyFundHoldingsValueInBaseCurrency, |
|
|
|
userSettings |
|
|
|
}: { |
|
|
|
emergencyFundHoldingsValueInBaseCurrency: number; |
|
|
|
userSettings: UserSettings; |
|
|
|
}) { |
|
|
|
return new Big( |
|
|
|
Math.max( |
|
|
|
emergencyFundHoldingsValueInBaseCurrency, |
|
|
|
userSettings?.emergencyFund ?? 0 |
|
|
|
) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
private getUserCurrency(aUser?: UserWithSettings) { |
|
|
|
return ( |
|
|
|
aUser?.Settings?.settings.baseCurrency ?? |
|
|
|