From 592104c9a887536b92e34139ea9b4e3202a0e3f3 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 4 Jul 2026 14:56:33 +0200 Subject: [PATCH] Fix handling of cash positions with filters --- .../src/app/activities/activities.service.ts | 64 +++++++++++-------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/apps/api/src/app/activities/activities.service.ts b/apps/api/src/app/activities/activities.service.ts index fb8fb70db9..099bb1cf0b 100644 --- a/apps/api/src/app/activities/activities.service.ts +++ b/apps/api/src/app/activities/activities.service.ts @@ -393,30 +393,7 @@ export class ActivitiesService { userCurrency: string; userId: string; }): Promise { - 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;