diff --git a/src/frontend/app/administration/contact/list/import/contact-import.component.html b/src/frontend/app/administration/contact/list/import/contact-import.component.html index ca1f7d67fa01255abfb459cff862292106976609..abf0f4f4feb37d48d25322f50f7a69c83fe849bf 100644 --- a/src/frontend/app/administration/contact/list/import/contact-import.component.html +++ b/src/frontend/app/administration/contact/list/import/contact-import.component.html @@ -3,7 +3,7 @@ <div mat-dialog-content> <mat-toolbar class="import-tool" [class.hide]="csvData.length === 0 || loading"> <span style="flex:1;"> - <mat-slide-toggle color="primary" [checked]="hasHeader" (change)="toggleHeader()">En-tête csv + <mat-slide-toggle color="primary" [checked]="hasHeader" (change)="toggleHeader()">{{'lang.csvHeader' | translate}} </mat-slide-toggle> </span> <span style="flex:1;text-align: center;"><i class="fa fa-users" @@ -48,16 +48,16 @@ <div style="overflow: auto;"> <mat-table *ngIf="csvData.length > 0" #table [dataSource]="dataSource" style="width:5000px;"> <ng-container *ngFor="let column of contactColumns;let i=index;"> - <ng-container [matColumnDef]="column"> + <ng-container [matColumnDef]="column.id"> <mat-header-cell *matHeaderCellDef> <i class="fas fa-database" color="primary" [title]="'lang.dbColumn' | translate"></i> <b color="primary" - [title]="'lang.dbColumn' | translate">{{column}}</b> + [title]="'lang.dbColumn' | translate">{{column.label}}</b> <i class="fas fa-arrows-alt-h"></i> <i class="fas fa-file-csv" [title]="'lang.csvColumn' | translate"></i> <mat-form-field [title]="'lang.csvColumn' | translate" (click)="$event.stopPropagation()" style="width: 80px !important;"> - <mat-select [(ngModel)]="associatedColmuns[column]" + <mat-select [(ngModel)]="associatedColmuns[column.id]" (selectionChange)="changeColumn(column, $event.value)"> <mat-option value=""></mat-option> <mat-option *ngFor="let col of csvColumns" [value]="col"> @@ -67,12 +67,12 @@ </mat-form-field> </mat-header-cell> <mat-cell *matCellDef="let element"> - {{element[column]}} + {{element[column.id]}} </mat-cell> </ng-container> </ng-container> - <mat-header-row *matHeaderRowDef="contactColumns"></mat-header-row> - <mat-row *matRowDef="let row; columns: contactColumns;"></mat-row> + <mat-header-row *matHeaderRowDef="getcontactColumnsIds()"></mat-header-row> + <mat-row *matRowDef="let row; columns: getcontactColumnsIds();"></mat-row> </mat-table> </div> </div> diff --git a/src/frontend/app/administration/contact/list/import/contact-import.component.ts b/src/frontend/app/administration/contact/list/import/contact-import.component.ts index 6d0f243d463239dddf0c3c2092d2cf8c6f21fdf3..d3d1cb0e65b5ef0cc00ad7eed39fafec48b3f114 100644 --- a/src/frontend/app/administration/contact/list/import/contact-import.component.ts +++ b/src/frontend/app/administration/contact/list/import/contact-import.component.ts @@ -6,7 +6,7 @@ import { TranslateService } from '@ngx-translate/core'; import { MatTableDataSource } from '@angular/material/table'; import { FunctionsService } from '../../../../../service/functions.service'; import { ConfirmComponent } from '../../../../../plugins/modal/confirm.component'; -import { filter, exhaustMap, tap, catchError } from 'rxjs/operators'; +import { filter, exhaustMap, tap, catchError, map } from 'rxjs/operators'; import { of } from 'rxjs/internal/observable/of'; import { AlertComponent } from '../../../../../plugins/modal/alert.component'; import { LocalStorageService } from '../../../../../service/local-storage.service'; @@ -20,7 +20,7 @@ import { MatPaginator } from '@angular/material/paginator'; export class ContactImportComponent implements OnInit { loading: boolean = false; - contactColumns: string[] = [ + /*contactColumns: string[] = [ 'id', 'company', 'civility', @@ -36,8 +36,73 @@ export class ContactImportComponent implements OnInit { 'addressPostcode', 'addressTown', 'addressCountry', - 'communicationMeans', - 'externalId_m2m', + ];*/ + + contactColumns: any[] = [ + { + id: 'id', + label: this.translate.instant('lang.id') + }, + { + id: 'company', + label: this.translate.instant('lang.contactsParameters_company') + }, + { + id: 'civility', + label: this.translate.instant('lang.contactsParameters_civility') + }, + { + id: 'firstname', + label: this.translate.instant('lang.contactsParameters_firstname') + }, + { + id: 'lastname', + label: this.translate.instant('lang.contactsParameters_lastname') + }, + { + id: 'function', + label: this.translate.instant('lang.contactsParameters_function') + }, + { + id: 'department', + label: this.translate.instant('lang.contactsParameters_department') + }, + { + id: 'email', + label: this.translate.instant('lang.contactsParameters_email') + }, + { + id: 'phone', + label: this.translate.instant('lang.contactsParameters_phone') + }, + { + id: 'addressAdditional1', + label: this.translate.instant('lang.contactsParameters_addressAdditional1') + }, + { + id: 'addressNumber', + label: this.translate.instant('lang.contactsParameters_addressNumber') + }, + { + id: 'addressStreet', + label: this.translate.instant('lang.contactsParameters_addressStreet') + }, + { + id: 'addressAdditional2', + label: this.translate.instant('lang.contactsParameters_addressAdditional2') + }, + { + id: 'addressPostcode', + label: this.translate.instant('lang.contactsParameters_addressPostcode') + }, + { + id: 'addressTown', + label: this.translate.instant('lang.contactsParameters_addressTown') + }, + { + id: 'addressCountry', + label: this.translate.instant('lang.contactsParameters_addressCountry') + }, ]; csvColumns: string[] = [ @@ -73,6 +138,32 @@ export class ContactImportComponent implements OnInit { ngOnInit(): void { this.setConfiguration(); + this.initCustomFields(); + } + + getcontactColumnsIds() { + return this.contactColumns.map(col => col.id); + } + + initCustomFields() { + this.http.get(`../rest/contactsCustomFields`).pipe( + map((data: any) => { + data = data.customFields.map(custom => { + return { + id : `contactCustomField_${custom.id}`, + label: custom.label + }; + }); + return data; + }), + tap((customFields) => { + this.contactColumns = this.contactColumns.concat(customFields); + }), + catchError((err: any) => { + this.notify.handleSoftErrors(err); + return of(false); + }) + ).subscribe(); } changeColumn(coldb: string, colCsv: string) { @@ -83,7 +174,7 @@ export class ContactImportComponent implements OnInit { const objContact = {}; this.contactColumns.forEach(key => { - objContact[key] = coldb === key ? data[this.csvColumns.filter(col => col === colCsv)[0]] : data[this.associatedColmuns[key]]; + objContact[key.id] = coldb === key.id ? data[this.csvColumns.filter(col => col === colCsv)[0]] : data[this.associatedColmuns[key.id]]; }); this.contactData.push(objContact); @@ -169,8 +260,9 @@ export class ContactImportComponent implements OnInit { const objContact = {}; this.contactColumns.forEach((key, indexCol) => { - this.associatedColmuns[key] = this.csvColumns[indexCol]; - objContact[key] = data[this.csvColumns[indexCol]]; + const indexCsvCol = this.csvColumns.indexOf(key.label); + this.associatedColmuns[key.id] = indexCsvCol > -1 ? this.csvColumns[indexCsvCol] : ''; + objContact[key.id] = indexCsvCol > -1 ? data[this.csvColumns[indexCsvCol]] : ''; }); this.contactData.push(objContact); @@ -195,7 +287,7 @@ export class ContactImportComponent implements OnInit { onSubmit() { const dataToSend: any[] = []; let confirmText = ''; - this.translate.get('lang.confirmImportUsers', { 0: this.countAll }).subscribe((res: string) => { + this.translate.get('lang.confirmImportContacts', { 0: this.countAll }).subscribe((res: string) => { confirmText = `${res} ?<br/><br/>`; confirmText += `<ul><li><b>${this.countAdd}</b> ${this.translate.instant('lang.additions')}</li><li><b>${this.countUp}</b> ${this.translate.instant('lang.modifications')}</li></ul>`; }); @@ -208,31 +300,23 @@ export class ContactImportComponent implements OnInit { if ((this.hasHeader && index > 0) || !this.hasHeader) { const objContact = {}; this.contactColumns.forEach((key) => { - objContact[key] = element[this.associatedColmuns[key]]; + objContact[key.id] = element[this.associatedColmuns[key.id]]; }); dataToSend.push(objContact); } }); }), - exhaustMap(() => this.http.put(`../rest/users/import`, { users: dataToSend })), + exhaustMap(() => this.http.put(`../rest/contacts/import`, { contacts: dataToSend })), tap((data: any) => { let textModal = ''; - if (data.warnings.count > 0) { - textModal = `<br/>${data.warnings.count} ${this.translate.instant('lang.withWarnings')} : <ul>`; - data.errors.details.forEach(element => { - textModal += `<li> ${this.translate.instant('element.lang')} (${this.translate.instant('lang.line')} : ${this.hasHeader ? element.index + 2 : element.index + 1})</li>`; - }); - textModal += '</ul>'; - } - if (data.errors.count > 0) { textModal += `<br/>${data.errors.count} ${this.translate.instant('lang.withErrors')} : <ul>`; data.errors.details.forEach(element => { - textModal += `<li> ${this.translate.instant('element.lang')} (${this.translate.instant('lang.line')} : ${this.hasHeader ? element.index + 2 : element.index + 1})</li>`; + textModal += `<li> ${this.translate.instant('lang.' + element.lang)} (${this.translate.instant('lang.line')} : ${this.hasHeader ? element.index + 2 : element.index + 1})</li>`; }); textModal += '</ul>'; } - dialogRef = this.dialog.open(AlertComponent, { panelClass: 'maarch-modal', autoFocus: false, disableClose: true, data: { title: this.translate.instant('lang.import'), msg: '<b>' + data.success + '</b> / <b>' + this.countAll + '</b> ' + this.translate.instant('lang.importedUsers') + '.' + textModal } }); + dialogRef = this.dialog.open(AlertComponent, { panelClass: 'maarch-modal', autoFocus: false, disableClose: true, data: { title: this.translate.instant('lang.import'), msg: '<b>' + data.success + '</b> / <b>' + this.countAll + '</b> ' + this.translate.instant('lang.importedContacts') + '.' + textModal } }); }), exhaustMap(() => dialogRef.afterClosed()), tap(() => { 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 b19d3e81b7328637f69237661a2470d54029acda..ada2aa009919a0e8e3e9931c23d41943c17c09aa 100644 --- a/src/frontend/app/administration/user/import/users-import.component.html +++ b/src/frontend/app/administration/user/import/users-import.component.html @@ -3,7 +3,7 @@ <div mat-dialog-content> <mat-toolbar class="import-tool" [class.hide]="csvData.length === 0 || loading"> <span style="flex:1;"> - <mat-slide-toggle color="primary" [checked]="hasHeader" (change)="toggleHeader()">En-tête csv</mat-slide-toggle> + <mat-slide-toggle color="primary" [checked]="hasHeader" (change)="toggleHeader()">{{'lang.csvHeader' | translate}}</mat-slide-toggle> </span> <span style="flex:1;text-align: center;"><i class="fa fa-users" color="primary"></i> {{'lang.usersOfFile' | translate}} : <b color="primary">{{countAll}}</b> 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 bac97ec75d46c2f26347e5a186b13d0f0c479810..419255af85336215e80945d5d5bd8a0e87f9cea6 100644 --- a/src/frontend/app/administration/user/import/users-import.component.ts +++ b/src/frontend/app/administration/user/import/users-import.component.ts @@ -220,7 +220,7 @@ export class UsersImportComponent implements OnInit { if (data.warnings.count > 0) { textModal = `<br/>${data.warnings.count} ${this.translate.instant('lang.withWarnings')} : <ul>`; data.errors.details.forEach(element => { - textModal += `<li> ${this.translate.instant('element.lang')} (${this.translate.instant('lang.line')} : ${this.hasHeader ? element.index + 2 : element.index + 1})</li>`; + textModal += `<li> ${this.translate.instant('lang.' + element.lang)} (${this.translate.instant('lang.line')} : ${this.hasHeader ? element.index + 2 : element.index + 1})</li>`; }); textModal += '</ul>'; } @@ -228,7 +228,7 @@ export class UsersImportComponent implements OnInit { if (data.errors.count > 0) { textModal += `<br/>${data.errors.count} ${this.translate.instant('lang.withErrors')} : <ul>`; data.errors.details.forEach(element => { - textModal += `<li> ${this.translate.instant('element.lang')} (${this.translate.instant('lang.line')} : ${this.hasHeader ? element.index + 2 : element.index + 1})</li>`; + textModal += `<li> ${this.translate.instant('lang.' + element.lang)} (${this.translate.instant('lang.line')} : ${this.hasHeader ? element.index + 2 : element.index + 1})</li>`; }); textModal += '</ul>'; } diff --git a/src/frontend/app/process/process.component.ts b/src/frontend/app/process/process.component.ts index 6f6b48effd8eea949cd82fcca95892858e60faf8..be91ee505d28104edf3bb1a48952ea15c46472d7 100755 --- a/src/frontend/app/process/process.component.ts +++ b/src/frontend/app/process/process.component.ts @@ -715,8 +715,6 @@ export class ProcessComponent implements OnInit, OnDestroy { } refreshData() { - console.log('fuuuu'); - this.appDocumentViewer.loadRessource(this.currentResourceInformations.resId); } diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json index a87d40886d4e845599dc9da9bcb1694a61358a65..bc70affb51acb39eecf0d4f75552db6383f17e7a 100644 --- a/src/lang/lang-fr.json +++ b/src/lang/lang-fr.json @@ -1984,5 +1984,8 @@ "argumentNotDate": "Une donnée n'est pas une date pour un contact", "argumentNotString": "Une donnée n'est pas une chaîne de caractères pour un contact", "argumentMandatoryEmpty": "Une donnée obligatoire est vide pour un contact", - "noneItalic": "<em>Aucun</em>" + "noneItalic": "<em>Aucun</em>", + "csvHeader": "En-tête csv", + "confirmImportContacts": "Voulez-vous importer <b>{{0}}</b> contacts", + "importedContacts": "contacts importés" }