diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts index 69c11ee70..efc1cb727 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts @@ -1,5 +1,6 @@ import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; +import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { DataService } from '@ghostfolio/client/services/data.service'; import { ImportActivitiesService } from '@ghostfolio/client/services/import-activities.service'; import { PortfolioPosition } from '@ghostfolio/common/interfaces'; @@ -65,7 +66,8 @@ export class ImportActivitiesDialog implements OnDestroy { private formBuilder: FormBuilder, public dialogRef: MatDialogRef, private importActivitiesService: ImportActivitiesService, - private snackBar: MatSnackBar + private snackBar: MatSnackBar, + private notificationService: NotificationService ) {} public ngOnInit() { @@ -294,14 +296,21 @@ export class ImportActivitiesDialog implements OnDestroy { const content = fileContent.split('\n').slice(1); try { - const data = await this.importActivitiesService.importCsv({ - fileContent, - isDryRun: true, - userAccounts: this.data.user.accounts - }); - this.activities = data.activities; - this.dataSource = new MatTableDataSource(data.activities.reverse()); - this.totalItems = data.activities.length; + const { activities, warnings } = + await this.importActivitiesService.importCsv({ + fileContent, + isDryRun: true, + userAccounts: this.data.user.accounts + }); + if (warnings.length > 0) { + this.notificationService.alert({ + title: 'Import Warnings', + message: warnings.join('
') + }); + } + this.activities = activities; + this.dataSource = new MatTableDataSource(activities.reverse()); + this.totalItems = activities.length; } catch (error) { console.error(error); this.handleImportError({ diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index a47df4e94..88106b7fc 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -2,7 +2,6 @@ import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { SymbolItem } from '@ghostfolio/api/app/symbol/interfaces/symbol-item.interface'; -import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; import { parseDate as parseDateHelper } from '@ghostfolio/common/helper'; import { HttpClient } from '@angular/common/http'; @@ -21,6 +20,7 @@ export class ImportActivitiesService { private static COMMENT_KEYS = ['comment', 'note']; private static CURRENCY_KEYS = ['ccy', 'currency', 'currencyprimary']; private static DATA_SOURCE_KEYS = ['datasource']; + // Trade Date takes precedence over Date private static DATE_KEYS = ['trade date', 'tradedate', 'date']; private static FEE_KEYS = ['commission', 'fee', 'ibcommission']; private static QUANTITY_KEYS = ['qty', 'quantity', 'shares', 'units']; @@ -36,10 +36,7 @@ export class ImportActivitiesService { private warnings: string[] = []; - public constructor( - private http: HttpClient, - private notificationService: NotificationService - ) {} + public constructor(private http: HttpClient) {} public async importCsv({ fileContent, @@ -51,6 +48,7 @@ export class ImportActivitiesService { userAccounts: Account[]; }): Promise<{ activities: Activity[]; + warnings: string[]; }> { this.warnings = []; @@ -77,15 +75,10 @@ export class ImportActivitiesService { }); } - // Process any possible warnings during import - if (this.warnings.length > 0) { - this.notificationService.alert({ - title: 'Import Warnings', - message: this.warnings.join('
') - }); - } - - return await this.importJson({ activities, isDryRun }); + return { + activities: (await this.importJson({ activities, isDryRun })).activities, + warnings: this.warnings + }; } public importJson({