Browse Source

Fix handling of cash positions with filters

pull/7212/head
Thomas Kaul 2 months ago
parent
commit
592104c9a8
  1. 64
      apps/api/src/app/activities/activities.service.ts

64
apps/api/src/app/activities/activities.service.ts

@ -393,30 +393,7 @@ export class ActivitiesService {
userCurrency: string;
userId: string;
}): Promise<ActivitiesResponse> {
const {
ASSET_CLASS: filtersByAssetClass = [],
DATA_SOURCE: [filterByDataSource] = [],
SYMBOL: [filterBySymbol] = [],
TAG: filtersByTag = []
} = groupBy(filters, ({ type }) => {
return type;
});
const isFilteredByAssetClassOtherThanLiquidity =
filtersByAssetClass.length > 0 &&
!filtersByAssetClass.some(({ id }) => {
return id === AssetClass.LIQUIDITY;
});
const isFilteredByAssetProfile = !!(filterByDataSource && filterBySymbol);
const isFilteredByTag = filtersByTag.length > 0;
const hasNonMatchingFilters =
isFilteredByAssetClassOtherThanLiquidity ||
isFilteredByAssetProfile ||
isFilteredByTag;
if (hasNonMatchingFilters) {
if (this.hasNonMatchingFiltersForCashActivities(filters)) {
return {
activities: [],
count: 0
@ -832,7 +809,7 @@ export class ActivitiesService {
withExcludedAccountsAndActivities: false // TODO
});
if (withCash) {
if (withCash && !this.hasNonMatchingFiltersForCashActivities(filters)) {
const cashDetails = await this.accountService.getCashDetails({
filters,
userId,
@ -967,6 +944,43 @@ export class ActivitiesService {
return activity;
}
private hasNonMatchingFiltersForCashActivities(filters: Filter[] = []) {
const {
ASSET_CLASS: filtersByAssetClass = [],
DATA_SOURCE: [filterByDataSource] = [],
SYMBOL: [filterBySymbol] = [],
TAG: filtersByTag = []
} = groupBy(filters, ({ type }) => {
return type;
});
const isFilteredByAssetClassOtherThanLiquidity =
filtersByAssetClass.length > 0 &&
!filtersByAssetClass.some(({ id }) => {
return id === AssetClass.LIQUIDITY;
});
const isFilteredByAssetProfile = !!(filterByDataSource || filterBySymbol);
const isFilteredByTag = filtersByTag.length > 0;
const isFilteredByUnsupportedType = filters.some(({ type }) => {
return ![
'ACCOUNT',
'ASSET_CLASS',
'DATA_SOURCE',
'SYMBOL',
'TAG'
].includes(type);
});
return (
isFilteredByAssetClassOtherThanLiquidity ||
isFilteredByAssetProfile ||
isFilteredByTag ||
isFilteredByUnsupportedType
);
}
private async orders(params: {
include?: Prisma.OrderInclude;
skip?: number;

Loading…
Cancel
Save