|
|
|
@ -1575,29 +1575,26 @@ export class PortfolioService {
|
|
|
|
|
|
|
|
|
|
private getFees({
|
|
|
|
|
activities,
|
|
|
|
|
date = new Date(0),
|
|
|
|
|
userCurrency
|
|
|
|
|
}: {
|
|
|
|
|
activities: OrderWithAccount[];
|
|
|
|
|
date?: Date;
|
|
|
|
|
userCurrency: string;
|
|
|
|
|
}) {
|
|
|
|
|
return activities
|
|
|
|
|
.filter((activity) => {
|
|
|
|
|
// Filter out all activities before given date (drafts)
|
|
|
|
|
return isBefore(date, new Date(activity.date));
|
|
|
|
|
})
|
|
|
|
|
.map(({ fee, SymbolProfile }) => {
|
|
|
|
|
return this.exchangeRateDataService.toCurrency(
|
|
|
|
|
fee,
|
|
|
|
|
SymbolProfile.currency,
|
|
|
|
|
userCurrency
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
.reduce(
|
|
|
|
|
(previous, current) => new Big(previous).plus(current),
|
|
|
|
|
new Big(0)
|
|
|
|
|
);
|
|
|
|
|
return getSum(
|
|
|
|
|
activities
|
|
|
|
|
.filter(({ isDraft }) => {
|
|
|
|
|
return isDraft === false;
|
|
|
|
|
})
|
|
|
|
|
.map(({ fee, SymbolProfile }) => {
|
|
|
|
|
return new Big(
|
|
|
|
|
this.exchangeRateDataService.toCurrency(
|
|
|
|
|
fee,
|
|
|
|
|
SymbolProfile.currency,
|
|
|
|
|
userCurrency
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private getInitialCashPosition({
|
|
|
|
@ -1745,15 +1742,16 @@ export class PortfolioService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const dividendInBaseCurrency = (
|
|
|
|
|
await this.getDividends({
|
|
|
|
|
activities: activities.filter(({ type }) => {
|
|
|
|
|
return type === 'DIVIDEND';
|
|
|
|
|
const dividendInBaseCurrency = getSum(
|
|
|
|
|
(
|
|
|
|
|
await this.getDividends({
|
|
|
|
|
activities: activities.filter(({ type }) => {
|
|
|
|
|
return type === 'DIVIDEND';
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
).map(({ investment }) => {
|
|
|
|
|
return new Big(investment);
|
|
|
|
|
})
|
|
|
|
|
).reduce(
|
|
|
|
|
(previous, current) => new Big(previous).plus(current.investment),
|
|
|
|
|
new Big(0)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const emergencyFund = new Big(
|
|
|
|
@ -1919,34 +1917,27 @@ export class PortfolioService {
|
|
|
|
|
private getSumOfActivityType({
|
|
|
|
|
activities,
|
|
|
|
|
activityType,
|
|
|
|
|
date = new Date(0),
|
|
|
|
|
userCurrency
|
|
|
|
|
}: {
|
|
|
|
|
activities: OrderWithAccount[];
|
|
|
|
|
activityType: ActivityType;
|
|
|
|
|
date?: Date;
|
|
|
|
|
userCurrency: string;
|
|
|
|
|
}) {
|
|
|
|
|
return activities
|
|
|
|
|
.filter((activity) => {
|
|
|
|
|
// Filter out all activities before given date (drafts) and
|
|
|
|
|
// activity type
|
|
|
|
|
return (
|
|
|
|
|
isBefore(date, new Date(activity.date)) &&
|
|
|
|
|
activity.type === activityType
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
.map(({ quantity, SymbolProfile, unitPrice }) => {
|
|
|
|
|
return this.exchangeRateDataService.toCurrency(
|
|
|
|
|
new Big(quantity).mul(unitPrice).toNumber(),
|
|
|
|
|
SymbolProfile.currency,
|
|
|
|
|
userCurrency
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
.reduce(
|
|
|
|
|
(previous, current) => new Big(previous).plus(current),
|
|
|
|
|
new Big(0)
|
|
|
|
|
);
|
|
|
|
|
return getSum(
|
|
|
|
|
activities
|
|
|
|
|
.filter(({ isDraft, type }) => {
|
|
|
|
|
return isDraft === false && type === activityType;
|
|
|
|
|
})
|
|
|
|
|
.map(({ quantity, SymbolProfile, unitPrice }) => {
|
|
|
|
|
return new Big(
|
|
|
|
|
this.exchangeRateDataService.toCurrency(
|
|
|
|
|
new Big(quantity).mul(unitPrice).toNumber(),
|
|
|
|
|
SymbolProfile.currency,
|
|
|
|
|
userCurrency
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async getTransactionPoints({
|
|
|
|
|