diff --git a/CHANGELOG.md b/CHANGELOG.md index 0512ad5bf..c242cac5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Harmonized the data format of the export functionality - Improved the language localization for German (`de`) - Upgraded `prisma` from version `7.8.0` to `7.9.1` +### Fixed + +- Fixed the export functionality to only include the accounts of the exported activities if a filter is applied + ## 3.38.0 - 2026-07-31 ### Added diff --git a/apps/api/src/app/export/export.service.ts b/apps/api/src/app/export/export.service.ts index 6e920553b..ec9b89a81 100644 --- a/apps/api/src/app/export/export.service.ts +++ b/apps/api/src/app/export/export.service.ts @@ -73,6 +73,13 @@ export class ExportService { }; } + const isFilteredExport = + activityIds?.length > 0 || + activityTypes?.length > 0 || + filters?.length > 0 || + !!endDate || + !!startDate; + const accounts = ( await this.accountService.accounts({ where, @@ -87,7 +94,7 @@ export class ExportService { }) ) .filter(({ id }) => { - return activityIds?.length > 0 + return isFilteredExport ? activities.some(({ accountId }) => { return accountId === id; }) diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts index a556a68d6..0a049a7ae 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -266,10 +266,6 @@ export class GfUserAccountSettingsComponent implements OnInit { .fetchExport() .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((data) => { - for (const activity of data.activities) { - delete (activity as Omit & { id?: string }).id; - } - downloadAsFile({ content: data, fileName: `ghostfolio-export-${format( diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts index 87da2fb84..0ff4168ac 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts @@ -177,10 +177,6 @@ export class GfActivitiesPageComponent implements OnInit { .fetchExport(fetchExportParams) .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((data) => { - for (const activity of data.activities) { - delete (activity as Omit & { id?: string }).id; - } - downloadAsFile({ content: data, fileName: `ghostfolio-export-${format( @@ -194,7 +190,7 @@ export class GfActivitiesPageComponent implements OnInit { protected onExportDrafts(activityIds?: string[]) { this.dataService - .fetchExport({ activityIds }) + .fetchExport({ activityIds, withActivityIds: true }) .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((data) => { downloadAsFile({ diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index 870719702..bc1512550 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -476,12 +476,14 @@ export class DataService { activityIds, activityTypes, filters, - range + range, + withActivityIds = false }: { activityIds?: string[]; activityTypes?: string[]; filters?: Filter[]; range?: DateRange; + withActivityIds?: boolean; } = {}) { let params = this.buildFiltersAsQueryParams({ filters }); @@ -497,9 +499,22 @@ export class DataService { params = params.append('range', range); } - return this.http.get('/api/v1/export', { - params - }); + return this.http + .get('/api/v1/export', { + params + }) + .pipe( + map((exportResponse) => { + if (!withActivityIds) { + for (const activity of exportResponse.activities) { + delete (activity as Omit & { id?: string }) + .id; + } + } + + return exportResponse; + }) + ); } public fetchHoldingDetail({