diff --git a/src/frontend/app/administration/user/import/users-import.component.html b/src/frontend/app/administration/user/import/users-import.component.html index 2be675a6ad3ba30f9acade915994ea9b8e570ded..6239d9ac388c00c83d5202099e0daedcadbe2513 100644 --- a/src/frontend/app/administration/user/import/users-import.component.html +++ b/src/frontend/app/administration/user/import/users-import.component.html @@ -4,11 +4,12 @@ <mat-toolbar class="import-tool" [class.hide]="csvData.length === 0 || loading"> <input type="file" name="files[]" #uploadFile id="uploadFile" (change)="uploadCsv($event)" accept=".csv" style="flex:1;"> - <span><i class="fa fa-user"></i> Utilisateurs du fichier : <b color="primary">{{countAll}}</b> - ({{countAll < 10 ? countAll : '10' }} prévisualisées)</span> <span class="example-spacer"></span> - <span style="flex:1;"><i class="fa fa-user-plus"></i> Ajouts : <b color="primary">{{countAdd}}</b></span> - <span style="flex:1;"><i class="fa fa-user-edit"></i> Modifications : <b color="primary">{{countUp}}</b></span> + <span style="flex:1;text-align: right;"><i class="fa fa-users" color="primary"></i> Utilisateurs du fichier : <b color="primary">{{countAll}}</b> + <ng-container *ngIf="countAll > 10"> (10 prévisualisées)</ng-container> + </span> + <span style="flex:1;text-align: right;"><i class="fa fa-user-plus" color="primary"></i> Ajouts : <b color="primary">{{countAdd}}</b></span> + <span style="flex:1;text-align: right;"><i class="fa fa-user-edit" color="primary"></i> Modifications : <b color="primary">{{countUp}}</b></span> </mat-toolbar> <ng-container *ngIf="loading; else elseTemplate"> <div class="loader"> @@ -33,6 +34,7 @@ style="width: 80px !important;"> <mat-select [(ngModel)]="associatedColmuns[column]" (selectionChange)="changeColumn(column, $event.value)"> + <mat-option value=""></mat-option> <mat-option *ngFor="let col of csvColumns" [value]="col"> {{col}} </mat-option> diff --git a/src/frontend/app/administration/user/import/users-import.component.ts b/src/frontend/app/administration/user/import/users-import.component.ts index d10b13d7ecc110c44b2a95b6d8d55ffdb00845f0..d549a3c639ab22c0efebcc0bb8f338a6dbce1843 100644 --- a/src/frontend/app/administration/user/import/users-import.component.ts +++ b/src/frontend/app/administration/user/import/users-import.component.ts @@ -55,7 +55,8 @@ export class UsersImportComponent implements OnInit { console.log(coldb); console.log(colCsv); this.userData = []; - for (let index = 0; index < 10; index++) { + const limit = this.csvData.length < 10 ? this.csvData.length : 10; + for (let index = 0; index < limit; index++) { const data = this.csvData[index]; this.userData.push({ 'id': coldb === 'id' ? data[this.csvColumns.filter(col => col === colCsv)[0]] : data[this.associatedColmuns['id']], @@ -88,9 +89,9 @@ export class UsersImportComponent implements OnInit { let dataCol = []; let objData = {}; - this.countAll = rawCsv.length - 1; + this.countAll = rawCsv.length - 2; - for (let index = 1; index < rawCsv.length; index++) { + for (let index = 1; index < rawCsv.length - 1; index++) { objData = {}; dataCol = rawCsv[index].split(';').map(s => s.replace(/"/gi, '').trim()); dataCol.forEach((element: any, index2: number) => { @@ -99,7 +100,6 @@ export class UsersImportComponent implements OnInit { this.csvData.push(objData); } this.initData(); - this.countAdd = this.csvData.filter((data: any) => this.functionsService.empty(data[this.associatedColmuns['id']])).length; this.countUp = this.csvData.filter((data: any) => !this.functionsService.empty(data[this.associatedColmuns['id']])).length; } else { @@ -114,7 +114,8 @@ export class UsersImportComponent implements OnInit { initData() { this.userData = []; - for (let index = 0; index < 10; index++) { + const limit = this.csvData.length < 10 ? this.csvData.length : 10; + for (let index = 0; index < limit; index++) { const data = this.csvData[index]; this.associatedColmuns['id'] = this.csvColumns[0]; this.associatedColmuns['user_id'] = this.csvColumns[1]; @@ -149,35 +150,43 @@ export class UsersImportComponent implements OnInit { onSubmit() { console.log('test'); - const dialogRef = this.dialog.open(ConfirmComponent, { panelClass: 'maarch-modal', autoFocus: false, disableClose: true, data: { title: 'Importer', msg: 'Voulez-vous importer <b>' + this.countAll + '</b> utilisateurs ?<br/>(<b>' + this.countAdd + '</b> créations et <b>' + this.countUp + '</b> modifications)' } }); + const dataToSend: any[] = []; + let dialogRef = this.dialog.open(ConfirmComponent, { panelClass: 'maarch-modal', autoFocus: false, disableClose: true, data: { title: 'Importer', msg: 'Voulez-vous importer <b>' + this.countAll + '</b> utilisateurs ?<br/>(<b>' + this.countAdd + '</b> créations et <b>' + this.countUp + '</b> modifications)' } }); dialogRef.afterClosed().pipe( filter((data: string) => data === 'ok'), tap(() => { this.loading = true; - const dataToSend: any[] = []; - this.csvData.forEach(element => { - this.associatedColmuns['id'] = this.csvColumns[0]; - this.associatedColmuns['user_id'] = this.csvColumns[1]; - this.associatedColmuns['firstname'] = this.csvColumns[2]; - this.associatedColmuns['lastname'] = this.csvColumns[3]; - this.associatedColmuns['mail'] = this.csvColumns[4]; - this.associatedColmuns['phone'] = this.csvColumns[5]; - + this.csvData.forEach((element: any) => { dataToSend.push({ - 'id': element[this.csvColumns[0]], - 'user_id': element[this.csvColumns[1]], - 'firstname': element[this.csvColumns[2]], - 'lastname': element[this.csvColumns[3]], - 'mail': element[this.csvColumns[4]], - 'phone': element[this.csvColumns[5]] + 'id': element[this.associatedColmuns['id']], + 'user_id': element[this.associatedColmuns['user_id']], + 'firstname': element[this.associatedColmuns['firstname']], + 'lastname': element[this.associatedColmuns['lastname']], + 'mail': element[this.associatedColmuns['mail']], + 'phone': element[this.associatedColmuns['phone']] }); }); console.log(dataToSend); }), - /*exhaustMap(() => this.http.delete(`../rest/listTemplates/${this.currentEntity.listTemplate.id}`)), + exhaustMap(() => this.http.put(`../rest/importUsers`, { users: dataToSend })), + tap((data: any) => { + /*let text = ''; + if (this.functionsService.empty(data.error) ) { + text = `<br/>${data.error.count} en erreur : <ul>`; + data.errors.lines.forEach(element => { + text += `<li> ligne : ${element}</li>`; + }); + text += '</ul>'; + } + dialogRef = this.dialog.open(ConfirmComponent, { panelClass: 'maarch-modal', autoFocus: false, disableClose: true, data: { title: 'Importer', msg: '<b>' + data.success + '</b> / <b>' + this.countAll + '</b> utilisateurs importés.' + text } }); + */ + // FOR TEST + dialogRef = this.dialog.open(ConfirmComponent, { panelClass: 'maarch-modal', autoFocus: false, disableClose: true, data: { title: 'Importer', msg: 'success!' } }); + }), + exhaustMap(() => dialogRef.afterClosed()), tap(() => { - - }),*/ + this.dialogRef.close('success'); + }), catchError((err: any) => { this.loading = false; this.notify.handleSoftErrors(err); diff --git a/src/frontend/app/administration/user/users-administration.component.ts b/src/frontend/app/administration/user/users-administration.component.ts index 8fc8bb5954def22465c53e074ad697cc191cbc4f..370e18f3e7611fbb50e1629016db32215ee9a2be 100755 --- a/src/frontend/app/administration/user/users-administration.component.ts +++ b/src/frontend/app/administration/user/users-administration.component.ts @@ -13,6 +13,8 @@ import { of } from 'rxjs/internal/observable/of'; import { catchError } from 'rxjs/internal/operators/catchError'; import { UsersImportComponent } from './import/users-import.component'; import { UsersExportComponent } from './export/users-export.component'; +import { tap } from 'rxjs/internal/operators/tap'; +import { filter } from 'rxjs/operators'; @Component({ templateUrl: 'users-administration.component.html', @@ -72,9 +74,26 @@ export class UsersAdministrationComponent implements OnInit { this.user = this.headerService.user; this.loading = true; + this.getData(); + } - this.http.get('../rest/users') - .subscribe((data: any) => { + setDatasource() { + setTimeout(() => { + this.dataSource = new MatTableDataSource(this.data); + this.dataSource.paginator = this.paginator; + this.dataSource.sortingDataAccessor = this.functions.listSortingDataAccessor; + this.sort.active = 'user_id'; + this.sort.direction = 'asc'; + this.dataSource.sort = this.sort; + }, 0); + } + + getData() { + this.webserviceAccounts = []; + this.noWebserviceAccounts = []; + this.data = []; + this.http.get('../rest/users').pipe( + tap((data: any) => { this.data = data['users']; this.data.forEach(element => { element.statusLabel = this.lang['user' + element.status]; @@ -92,20 +111,12 @@ export class UsersAdministrationComponent implements OnInit { this.loading = false; this.setDatasource(); - }, (err) => { - this.notify.handleErrors(err); - }); - } - - setDatasource() { - setTimeout(() => { - this.dataSource = new MatTableDataSource(this.data); - this.dataSource.paginator = this.paginator; - this.dataSource.sortingDataAccessor = this.functions.listSortingDataAccessor; - this.sort.active = 'user_id'; - this.sort.direction = 'asc'; - this.dataSource.sort = this.sort; - }, 0); + }), + catchError((err: any) => { + this.notify.handleSoftErrors(err); + return of(false); + }) + ).subscribe(); } activateUser(user: any) { @@ -419,12 +430,16 @@ export class UsersAdministrationComponent implements OnInit { panelClass: 'maarch-full-height-modal' }); - /*dialogRef.afterClosed().pipe( + dialogRef.afterClosed().pipe( + filter((data: any) => data === 'success'), + tap(() => { + this.getData(); + }), catchError((err: any) => { this.notify.handleSoftErrors(err); return of(false); }) - ).subscribe();*/ + ).subscribe(); } openUsersExportModal() {