|
|
|
@ -277,7 +277,8 @@ export class PortfolioService {
|
|
|
|
|
await this.getTransactionPoints({
|
|
|
|
|
filters,
|
|
|
|
|
userId,
|
|
|
|
|
includeDrafts: true
|
|
|
|
|
includeDrafts: true,
|
|
|
|
|
types: ['BUY', 'SELL']
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (transactionPoints.length === 0) {
|
|
|
|
@ -702,7 +703,7 @@ export class PortfolioService {
|
|
|
|
|
.filter((order) => {
|
|
|
|
|
tags = tags.concat(order.tags);
|
|
|
|
|
|
|
|
|
|
return order.type === 'BUY' || order.type === 'SELL';
|
|
|
|
|
return ['BUY', 'ITEM', 'SELL'].includes(order.type);
|
|
|
|
|
})
|
|
|
|
|
.map((order) => ({
|
|
|
|
|
currency: order.SymbolProfile.currency,
|
|
|
|
@ -957,7 +958,8 @@ export class PortfolioService {
|
|
|
|
|
const { portfolioOrders, transactionPoints } =
|
|
|
|
|
await this.getTransactionPoints({
|
|
|
|
|
filters,
|
|
|
|
|
userId
|
|
|
|
|
userId,
|
|
|
|
|
types: ['BUY', 'SELL']
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (transactionPoints?.length <= 0) {
|
|
|
|
@ -1087,13 +1089,15 @@ export class PortfolioService {
|
|
|
|
|
filters,
|
|
|
|
|
impersonationId,
|
|
|
|
|
userId,
|
|
|
|
|
withExcludedAccounts = false
|
|
|
|
|
withExcludedAccounts = false,
|
|
|
|
|
withItems = false
|
|
|
|
|
}: {
|
|
|
|
|
dateRange?: DateRange;
|
|
|
|
|
filters?: Filter[];
|
|
|
|
|
impersonationId: string;
|
|
|
|
|
userId: string;
|
|
|
|
|
withExcludedAccounts?: boolean;
|
|
|
|
|
withItems?: boolean;
|
|
|
|
|
}): Promise<PortfolioPerformanceResponse> {
|
|
|
|
|
userId = await this.getUserId(impersonationId, userId);
|
|
|
|
|
const user = await this.userService.user({ id: userId });
|
|
|
|
@ -1128,7 +1132,8 @@ export class PortfolioService {
|
|
|
|
|
await this.getTransactionPoints({
|
|
|
|
|
filters,
|
|
|
|
|
userId,
|
|
|
|
|
withExcludedAccounts
|
|
|
|
|
withExcludedAccounts,
|
|
|
|
|
types: withItems ? ['BUY', 'ITEM', 'SELL'] : ['BUY', 'SELL']
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const portfolioCalculator = new PortfolioCalculator({
|
|
|
|
@ -1280,7 +1285,8 @@ export class PortfolioService {
|
|
|
|
|
|
|
|
|
|
const { orders, portfolioOrders, transactionPoints } =
|
|
|
|
|
await this.getTransactionPoints({
|
|
|
|
|
userId
|
|
|
|
|
userId,
|
|
|
|
|
types: ['BUY', 'SELL']
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const portfolioCalculator = new PortfolioCalculator({
|
|
|
|
@ -1913,11 +1919,13 @@ export class PortfolioService {
|
|
|
|
|
private async getTransactionPoints({
|
|
|
|
|
filters,
|
|
|
|
|
includeDrafts = false,
|
|
|
|
|
types = ['BUY', 'ITEM', 'SELL'],
|
|
|
|
|
userId,
|
|
|
|
|
withExcludedAccounts = false
|
|
|
|
|
}: {
|
|
|
|
|
filters?: Filter[];
|
|
|
|
|
includeDrafts?: boolean;
|
|
|
|
|
types?: ActivityType[];
|
|
|
|
|
userId: string;
|
|
|
|
|
withExcludedAccounts?: boolean;
|
|
|
|
|
}): Promise<{
|
|
|
|
@ -1931,10 +1939,10 @@ export class PortfolioService {
|
|
|
|
|
const { activities, count } = await this.orderService.getOrders({
|
|
|
|
|
filters,
|
|
|
|
|
includeDrafts,
|
|
|
|
|
types,
|
|
|
|
|
userCurrency,
|
|
|
|
|
userId,
|
|
|
|
|
withExcludedAccounts,
|
|
|
|
|
types: ['BUY', 'SELL']
|
|
|
|
|
withExcludedAccounts
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (count <= 0) {
|
|
|
|
@ -2006,7 +2014,7 @@ export class PortfolioService {
|
|
|
|
|
userCurrency,
|
|
|
|
|
userId,
|
|
|
|
|
withExcludedAccounts,
|
|
|
|
|
types: ['ITEM', 'LIABILITY']
|
|
|
|
|
types: ['LIABILITY']
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const accounts: PortfolioDetails['accounts'] = {};
|
|
|
|
@ -2094,18 +2102,14 @@ export class PortfolioService {
|
|
|
|
|
Account,
|
|
|
|
|
quantity,
|
|
|
|
|
SymbolProfile,
|
|
|
|
|
type,
|
|
|
|
|
valueInBaseCurrency
|
|
|
|
|
type
|
|
|
|
|
} of ordersByAccount) {
|
|
|
|
|
const unitPriceInBaseCurrency =
|
|
|
|
|
portfolioItemsNow[SymbolProfile.symbol]?.marketPriceInBaseCurrency ??
|
|
|
|
|
valueInBaseCurrency ??
|
|
|
|
|
0;
|
|
|
|
|
|
|
|
|
|
let currentValueOfSymbolInBaseCurrency =
|
|
|
|
|
quantity * unitPriceInBaseCurrency;
|
|
|
|
|
quantity *
|
|
|
|
|
portfolioItemsNow[SymbolProfile.symbol]
|
|
|
|
|
?.marketPriceInBaseCurrency ?? 0;
|
|
|
|
|
|
|
|
|
|
if (type === 'LIABILITY' || type === 'SELL') {
|
|
|
|
|
if (['LIABILITY', 'SELL'].includes(type)) {
|
|
|
|
|
currentValueOfSymbolInBaseCurrency *= -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|