From 878f3a7ab34b0b96cc6dbcc36a4d17262532fae4 Mon Sep 17 00:00:00 2001 From: Sean Date: Mon, 25 Jan 2021 18:26:37 +0100 Subject: [PATCH] Fix csv importing users with groups old groups new groups created on the fly --- .../user-import-list.component.html | 14 ++++++++ .../user-import-list.component.scss | 4 +++ .../user-import/user-import-list.component.ts | 32 +++++++++++++++++-- .../site/users/models/import-create-user.ts | 30 +++++------------ .../users/services/user-import.service.ts | 13 +++----- 5 files changed, 60 insertions(+), 33 deletions(-) diff --git a/client/src/app/site/users/components/user-import/user-import-list.component.html b/client/src/app/site/users/components/user-import/user-import-list.component.html index 9fa75eeda..38b7e466f 100644 --- a/client/src/app/site/users/components/user-import/user-import-list.component.html +++ b/client/src/app/site/users/components/user-import/user-import-list.component.html @@ -199,6 +199,20 @@ + + +
+ + {{ group.name | translate }} + add + , + +
+ + +
+ {{ gender | translate }} +
diff --git a/client/src/app/site/users/components/user-import/user-import-list.component.scss b/client/src/app/site/users/components/user-import/user-import-list.component.scss index a993beed9..e0a27ab73 100644 --- a/client/src/app/site/users/components/user-import/user-import-list.component.scss +++ b/client/src/app/site/users/components/user-import/user-import-list.component.scss @@ -6,3 +6,7 @@ .pbl-ngrid-row { height: 50px; } + +.new-icon { + vertical-align: sub; +} diff --git a/client/src/app/site/users/components/user-import/user-import-list.component.ts b/client/src/app/site/users/components/user-import/user-import-list.component.ts index 1b17053dc..6159fdebe 100644 --- a/client/src/app/site/users/components/user-import/user-import-list.component.ts +++ b/client/src/app/site/users/components/user-import/user-import-list.component.ts @@ -10,6 +10,7 @@ import { NewEntry } from 'app/core/ui-services/base-import.service'; import { CsvExportService } from 'app/core/ui-services/csv-export.service'; import { User } from 'app/shared/models/users/user'; import { BaseImportListComponentDirective } from 'app/site/base/base-import-list'; +import { ImportCreateUser } from '../../models/import-create-user'; import { UserImportService } from '../../services/user-import.service'; /** @@ -44,15 +45,19 @@ export class UserImportListComponent extends BaseImportListComponentDirective { + const columnwidth = this.getPropertyWidth(property); + const singleColumnDef: PblColumnDefinition = { label: this.translate.instant(this.headerRowDefinition[index]), prop: `newEntry.${property}`, - type: this.guessType(property as keyof User) + type: this.guessType(property as keyof User), + width: columnwidth }; return singleColumnDef; @@ -60,7 +65,7 @@ export class UserImportListComponent extends BaseImportListComponentDirective { - if (group.id) { - ids.push(group.id); - return; - } - if (!groups.length) { - open += 1; - return; - } - const mapped = groups.find(newGroup => newGroup.name === group.name); - if (mapped) { - group.id = mapped.id; - ids.push(mapped.id); - } else { - open += 1; - } - }); - this.groups_id = ids; - return open; + public solveGroups(recentlyCreatedGroups: CsvMapping[]): void { + const groups = this.csvGroups; + const directIds = groups.filter(directGroup => directGroup.id).map(directGroup => directGroup.id); + const groupsWithoutId = groups.filter(noIdGroup => !noIdGroup.id); + const transferedIds = recentlyCreatedGroups + .filter(newGroup => groupsWithoutId.find(noId => noId.name === newGroup.name)) + .map(newGroup => newGroup.id); + this.groups_id = directIds.concat(transferedIds); } } diff --git a/client/src/app/site/users/services/user-import.service.ts b/client/src/app/site/users/services/user-import.service.ts index cdcf194e9..7c707839f 100644 --- a/client/src/app/site/users/services/user-import.service.ts +++ b/client/src/app/site/users/services/user-import.service.ts @@ -25,7 +25,7 @@ export class UserImportService extends BaseImportService { 'last_name', 'structure_level', 'number', - 'groups_id', + 'csvGroups', 'comment', 'is_active', 'is_present', @@ -97,10 +97,11 @@ export class UserImportService extends BaseImportService { public mapData(line: string): NewEntry { const user = new ImportCreateUser(); const headerLength = Math.min(this.expectedHeader.length, line.length); + let hasErrors = false; for (let idx = 0; idx < headerLength; idx++) { switch (this.expectedHeader[idx]) { - case 'groups_id': + case 'csvGroups': user.csvGroups = this.getGroups(line[idx]); break; case 'is_active': @@ -152,16 +153,12 @@ export class UserImportService extends BaseImportService { if (entry.status !== 'new') { continue; } - const openGroups = (entry.newEntry as ImportCreateUser).solveGroups(this.newGroups); - if (openGroups) { - this.setError(entry, 'Group'); - this.updatePreview(); - continue; - } + (entry.newEntry as ImportCreateUser).solveGroups(this.newGroups); entry.importTrackId = trackId; trackId += 1; importUsers.push(entry); } + while (importUsers.length) { const subSet = importUsers.splice(0, 100); // don't send bulks too large const result = await this.repo.bulkCreate(subSet);