Browse Source

Create new accounts when dryRun is false

pull/1635/head
yksolanki9 3 years ago
parent
commit
fa8c0fbbb4
  1. 9
      apps/api/src/app/import/import.service.ts
  2. 5
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
  3. 5
      apps/client/src/app/services/import-activities.service.ts

9
apps/api/src/app/import/import.service.ts

@ -117,6 +117,7 @@ export class ImportService {
}): Promise<Activity[]> {
const accountIdMapping: { [oldAccountId: string]: string } = {};
if (!isDryRun && accountsDto?.length) {
const existingAccounts = await this.accountService.accounts({
where: {
id: {
@ -127,8 +128,6 @@ export class ImportService {
}
});
// Create new accounts during dryRun so that new account IDs don't get invalidated
if (isDryRun && accountsDto?.length) {
for (const account of accountsDto) {
// Check if there is any existing account with the same ID
const accountWithSameId = existingAccounts.find(
@ -181,7 +180,7 @@ export class ImportService {
}
// If a new account is created, then update the accountId in all activities
if (isDryRun) {
if (!isDryRun) {
if (Object.keys(accountIdMapping).includes(activity.accountId)) {
activity.accountId = accountIdMapping[activity.accountId];
}
@ -200,6 +199,10 @@ export class ImportService {
}
);
if (isDryRun) {
accountsDto.forEach((accountsDto) => accountIds.push(accountsDto.id));
}
const activities: Activity[] = [];
for (const {

5
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts

@ -11,6 +11,7 @@ import {
MatLegacyDialogRef as MatDialogRef
} from '@angular/material/legacy-dialog';
import { MatLegacySnackBar as MatSnackBar } from '@angular/material/legacy-snack-bar';
import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto';
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { DataService } from '@ghostfolio/client/services/data.service';
import { ImportActivitiesService } from '@ghostfolio/client/services/import-activities.service';
@ -28,6 +29,7 @@ import { ImportActivitiesDialogParams } from './interfaces/interfaces';
templateUrl: 'import-activities-dialog.html'
})
export class ImportActivitiesDialog implements OnDestroy {
public accounts: CreateAccountDto[] = [];
public activities: Activity[] = [];
public details: any[] = [];
public errorMessages: string[] = [];
@ -92,6 +94,7 @@ export class ImportActivitiesDialog implements OnDestroy {
this.snackBar.open('⏳ ' + $localize`Importing data...`);
await this.importActivitiesService.importSelectedActivities({
accounts: this.accounts,
activities: this.selectedActivities
});
@ -163,6 +166,8 @@ export class ImportActivitiesDialog implements OnDestroy {
if (file.name.endsWith('.json')) {
const content = JSON.parse(fileContent);
this.accounts = content.accounts;
if (!isArray(content.activities)) {
if (isArray(content.orders)) {
this.handleImportError({

5
apps/client/src/app/services/import-activities.service.ts

@ -96,11 +96,14 @@ export class ImportActivitiesService {
}
public importSelectedActivities({
accounts,
activities
}: {
accounts: CreateAccountDto[];
activities: Activity[];
}): Promise<{
activities: Activity[];
accounts?: CreateAccountDto[];
}> {
const importData: CreateOrderDto[] = [];
@ -108,7 +111,7 @@ export class ImportActivitiesService {
importData.push(this.convertToCreateOrderDto(activity));
}
return this.importJson({ activities: importData });
return this.importJson({ accounts, activities: importData });
}
private convertToCreateOrderDto({

Loading…
Cancel
Save