diff --git a/apps/maarch_entreprise/Views/entities-administration.component.html b/apps/maarch_entreprise/Views/entities-administration.component.html index fed0fa72c4392e29ed4c18c1e62e9c75338de822..38235a3177a86ace7334d9c1450d2e2537c3dff6 100644 --- a/apps/maarch_entreprise/Views/entities-administration.component.html +++ b/apps/maarch_entreprise/Views/entities-administration.component.html @@ -64,8 +64,9 @@ <div class="col-sm-12"> <mat-form-field> <mat-select id="parent_entity_id" name="parent_entity_id" title="{{lang.isLinkedTo}}" placeholder="{{lang.isLinkedTo}}" [(ngModel)]="currentEntity.parent_entity_id" - (change)="selectParentEntity(currentEntity.parent_entity_id)" required> - <mat-option *ngIf="entities.length == 0" value=""> + (change)="selectParentEntity(currentEntity.parent_entity_id)"> + <mat-option value=""> + <i style="opacity:0.5;text-align:center;">- {{lang.noEntity}} -</i> </mat-option> <ng-container *ngFor="let entity of entities | sortBy : 'entity_label'"> <mat-option [value]="entity.entity_id" *ngIf="(!entity.state.disabled && entity.entity_id != currentEntity.entity_id) || currentEntity.parent_entity_id == entity.entity_id"> @@ -238,7 +239,7 @@ <p mat-line>{{template.labelToDisplay}} <small style="opacity:0.5;">{{template.descriptionToDisplay}}</small> </p> - <button *ngIf="role.id != 'dest'" matTooltip="{{lang.delete}}" mat-icon-button color="warn" (click)="removeDiffList(i,role.id)"> + <button matTooltip="{{lang.delete}}" mat-icon-button color="warn" (click)="removeDiffList(i,role.id)"> <mat-icon class="fa fa-remove"></mat-icon> </button> </mat-list-item> @@ -247,15 +248,21 @@ </span> </mat-list> </div> + <div class="form-group" *ngIf="currentEntity.entity_id"> + <div class="col-md-12 text-center" style="padding:10px;"> + <button mat-raised-button color="primary" (click)="saveDiffList()" [disabled]="!this.listDiffModified || (currentEntity.listTemplate.dest.length == 0 && currentEntity.listTemplate.cc.length > 0)">{{lang.save}}</button> + <button mat-raised-button color="default" (click)="loadEntity(this.currentEntity.entity_id)" [disabled]="!this.listDiffModified">{{lang.cancel}}</button> + </div> + </div> </div> </mat-tab> <mat-tab label="{{lang.visa}}" *ngIf="!creationMode"> - <div class="row" style="margin:0px;"> + <div class="row" style="margin:0px;" id="visaCircuitContent"> <div class="col-md-12"> <mat-form-field> - <input #autocompleteFilter type="text" placeholder="{{lang.addVisaSignUser}}" matInput [matAutocomplete]="auto" [formControl]="userCtrl"> + <input #autocompleteFilter type="text" placeholder="{{lang.addVisaSignUser}}" matInput [matAutocomplete]="auto" [formControl]="userCtrl"> <mat-autocomplete #auto="matAutocomplete"> - <mat-option *ngFor="let elem of filteredUsers | async" [value]="elem.id" (click)="addElemListModelVisa(elem)"> + <mat-option *ngFor="let elem of filteredUsers | async" [value]="elem.id" (click)="addElemListModelVisa(elem);autocompleteFilter.isOpen=true"> <p mat-line *ngIf="elem.type == 'user'"> <span class="col-xm-1"> <mat-icon color="primary" class="fa fa-user fa-2x" style="margin-right:0px;"></mat-icon> @@ -283,6 +290,12 @@ </span> </mat-list> </div> + <div class="form-group" *ngIf="currentEntity.entity_id"> + <div class="col-md-12 text-center" style="padding:10px;"> + <button mat-raised-button color="primary" (click)="saveDiffListVisa()" [disabled]="!this.listDiffModified || (currentEntity.listTemplate.dest.length == 0 && currentEntity.listTemplate.cc.length > 0)">{{lang.save}}</button> + <button mat-raised-button color="default" (click)="loadEntity(this.currentEntity.entity_id)" [disabled]="!this.listDiffModified">{{lang.cancel}}</button> + </div> + </div> </div> </mat-tab> <mat-tab label="{{lang.relatedUsers}}" *ngIf="!creationMode"> diff --git a/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts b/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts index 3a1c87a4d27f921099bce7c550dfcb3b6b653bbd..5021839f10195970ffe6cd27ed5d438e6c207b96 100644 --- a/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts +++ b/apps/maarch_entreprise/js/angular/app/administration/entities-administration.component.ts @@ -6,7 +6,7 @@ import { ConfirmModalComponent } from '../confirmModal.component'; import { NotificationService } from '../notification.service'; import { MatSidenav, MatPaginator, MatTableDataSource, MatSort, MatDialog, MatDialogConfig, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; -import { SortPipe } from '../../plugins/sorting.pipe'; +import { SortPipe } from '../../plugins/sorting.pipe'; import { AutoCompletePlugin } from '../../plugins/autocomplete.plugin'; declare function $j(selector: any): any; @@ -19,25 +19,26 @@ declare var angularGlobals: any; }) export class EntitiesAdministrationComponent extends AutoCompletePlugin implements OnInit { - private _mobileQueryListener : () => void; - mobileQuery : MediaQueryList; - dialogRef : MatDialogRef<any>; + private _mobileQueryListener: () => void; + mobileQuery: MediaQueryList; + dialogRef: MatDialogRef<any>; - coreUrl : string; - lang : any = LANG; - loading : boolean = false; + coreUrl: string; + lang: any = LANG; + loading: boolean = false; - entities : any[] = []; - listTemplateRoles : any[] = []; - entityTypeList : any[] = []; - currentEntity : any = {}; - isDraggable : boolean = true; - creationMode : boolean = false; - idCircuitVisa : number; - config : any = {}; + entities: any[] = []; + listTemplateRoles: any[] = []; + entityTypeList: any[] = []; + currentEntity: any = {}; + isDraggable: boolean = true; + creationMode: boolean = false; + listDiffModified: boolean = false; + idCircuitVisa: number = null; + config: any = {}; - dataSource = new MatTableDataSource(this.currentEntity.users); - displayedColumns = ['firstname', 'lastname']; + dataSource = new MatTableDataSource(this.currentEntity.users); + displayedColumns = ['firstname', 'lastname']; @ViewChild('snav2') sidenav: MatSidenav; @@ -98,13 +99,13 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen 'data': this.entities, "check_callback": function (operation: any, node: any, node_parent: any, node_position: any, more: any) { if (operation == 'move_node') { - if (node_parent.id =='#') { + if (node_parent.id == '#') { return false; } else if (!node_parent.original.allowed) { return false; } else { return true; - } + } } } }, @@ -169,6 +170,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen } loadEntity(entity_id: any) { + this.listDiffModified = false; this.http.get(this.coreUrl + "rest/entities/" + entity_id + '/details') .subscribe((data: any) => { this.currentEntity = data['entity']; @@ -184,14 +186,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen } addElemListModel(element: any) { - /* create listDiff struct */ - var newDiffList = { - "object_id": this.currentEntity.entity_id, - "object_type": "entity_id", - "title": this.currentEntity.entity_id, - "description": this.currentEntity.entity_id, - "items": Array() - }; + this.listDiffModified = true; var inListModel = false; var newElemListModel: any = {}; @@ -199,14 +194,6 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen if (role.available == true) { if (this.currentEntity.listTemplate[role.id]) { this.currentEntity.listTemplate[role.id].forEach((listModel: any) => { - /* insert current diff list */ - newDiffList.items.push({ - "item_type": listModel.item_type, - "item_mode": role.id, - "item_id": listModel.item_id, - "sequence": listModel.sequence - }); - if (listModel.item_id == element.id) { inListModel = true; } @@ -225,12 +212,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen "sequence": 0 }; this.currentEntity.listTemplate.dest.unshift(newElemListModel); - newDiffList.items.push({ - "item_type": "user_id", - "item_mode": "dest", - "item_id": newElemListModel.item_id, - "sequence": newElemListModel.sequence - }); + } else { var itemType = ''; if (element.type == 'user') { @@ -248,42 +230,13 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen "sequence": 0 }; this.currentEntity.listTemplate.cc.unshift(newElemListModel); - newDiffList.items.push({ - "item_type": newElemListModel.item_type, - "item_mode": "cc", - "item_id": newElemListModel.item_id, - "sequence": 0 - }); - } - if (this.currentEntity.listTemplate.id) { - this.http.put(this.coreUrl + "rest/listTemplates/" + this.currentEntity.listTemplate.id, newDiffList) - .subscribe((data: any) => { - this.currentEntity.listTemplate.id = data.id; - this.notify.success(this.lang.diffusionModelUpdated); - }, (err) => { - this.notify.error(err.error.errors); - }); - } else { - this.http.post(this.coreUrl + "rest/listTemplates", newDiffList) - .subscribe((data: any) => { - this.currentEntity.listTemplate.id = data.id; - this.notify.success(this.lang.diffusionModelUpdated); - }, (err) => { - this.notify.error(err.error.errors); - }); } } this.elementCtrl.setValue(''); } addElemListModelVisa(element: any) { - var newDiffList = { - "object_id": this.currentEntity.entity_id, - "object_type": "VISA_CIRCUIT", - "title": this.currentEntity.entity_id, - "description": this.currentEntity.entity_id, - "items": Array() - }; + this.listDiffModified = true; var newElemListModel = { "id": '', "item_type": 'user_id', @@ -294,38 +247,9 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen "descriptionToDisplay": element.otherInfo }; - this.currentEntity.visaTemplate.forEach((listModel: any, i: number) => { - listModel.sequence = i; - listModel.item_mode = "visa"; - newDiffList.items.push({ - "id": listModel.id, - "item_id": listModel.item_id, - "item_type": "user_id", - "item_mode": listModel.item_mode, - "sequence": listModel.sequence - }); - }); - - newDiffList.items.push(newElemListModel); - - if (this.currentEntity.visaTemplate.length > 0) { - this.http.put(this.coreUrl + "rest/listTemplates/" + this.idCircuitVisa, newDiffList) - .subscribe((data: any) => { - this.idCircuitVisa = data.id; - this.currentEntity.visaTemplate.push(newElemListModel); - this.notify.success(this.lang.diffusionModelUpdated); - }, (err) => { - this.notify.error(err.error.errors); - }); - } else { - this.http.post(this.coreUrl + "rest/listTemplates", newDiffList) - .subscribe((data: any) => { - this.idCircuitVisa = data.id; - this.currentEntity.visaTemplate.push(newElemListModel); - this.notify.success(this.lang.diffusionModelUpdated); - }, (err) => { - this.notify.error(err.error.errors); - }); + this.currentEntity.visaTemplate.push(newElemListModel); + if (this.currentEntity.visaTemplate.length > 1) { + this.currentEntity.visaTemplate[this.currentEntity.visaTemplate.length-2].item_mode = 'visa'; } this.userCtrl.setValue(''); } @@ -335,7 +259,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen this.currentEntity.parent_entity_id = ''; } - if (this.creationMode) { + if (this.creationMode) { this.http.post(this.coreUrl + "rest/entities", this.currentEntity) .subscribe((data: any) => { this.currentEntity.listTemplate = []; @@ -373,7 +297,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen this.creationMode = false; this.isDraggable = true; $j('#jstree').jstree('deselect_all'); - if(this.currentEntity.parent_entity_id) { + if (this.currentEntity.parent_entity_id) { for (let i = 0; i < this.entities.length; i++) { if (this.entities[i].entity_id == this.currentEntity.parent_entity_id) { $j('#jstree').jstree('select_node', this.entities[i]); @@ -385,7 +309,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen } } - selectParentEntity(entity_id:any) { + selectParentEntity(entity_id: any) { if (this.creationMode) { $j('#jstree').jstree('deselect_all'); $j('#jstree').jstree('select_node', entity_id); @@ -397,8 +321,22 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen this.config = { data: { entity: this.currentEntity } }; this.dialogRef = this.dialog.open(EntitiesAdministrationRedirectModalComponent, this.config); this.dialogRef.afterClosed().subscribe((result: any) => { - console.log(result); if (result) { + if (this.currentEntity.listTemplate.id) { + this.http.delete(this.coreUrl + "rest/listTemplates/" + this.currentEntity.listTemplate.id) + .subscribe((data: any) => { + this.currentEntity.listTemplate.id = data.id; + this.http.get(this.coreUrl + "rest/listTemplates/types/entity_id/roles") + .subscribe((data: any) => { + this.listTemplateRoles = data['roles']; + }, (err) => { + this.notify.error(err.error.errors); + }); + }, (err) => { + this.notify.error(err.error.errors); + }); + } + this.http.put(this.coreUrl + "rest/entities/" + result.entity_id + "/reassign/" + result.redirectEntity, {}) .subscribe((data: any) => { this.entities = data['entities']; @@ -406,7 +344,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen $j('#jstree').jstree("refresh"); this.sidenav.close(); this.notify.success(this.lang.entityDeleted); - + }, (err) => { this.notify.error(err.error.errors); }); @@ -417,6 +355,21 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen let r = confirm(this.lang.confirmAction + ' ' + this.lang.delete + ' « ' + this.currentEntity.entity_label + ' »'); if (r) { + if (this.currentEntity.listTemplate.id) { + this.http.delete(this.coreUrl + "rest/listTemplates/" + this.currentEntity.listTemplate.id) + .subscribe((data: any) => { + this.currentEntity.listTemplate.id = data.id; + this.http.get(this.coreUrl + "rest/listTemplates/types/entity_id/roles") + .subscribe((data: any) => { + this.listTemplateRoles = data['roles']; + }, (err) => { + this.notify.error(err.error.errors); + }); + }, (err) => { + this.notify.error(err.error.errors); + }); + } + this.http.delete(this.coreUrl + "rest/entities/" + this.currentEntity.entity_id) .subscribe((data: any) => { this.entities = data['entities']; @@ -466,14 +419,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen } updateDiffList(template: any, role: any): any { - var newDiffList = { - "object_id": this.currentEntity.entity_id, - "object_type": "entity_id", - "title": this.currentEntity.entity_id, - "description": this.currentEntity.entity_id, - "items": Array() - }; - + this.listDiffModified = true; if (role == 'dest' && this.currentEntity.listTemplate.dest.length > 0) { this.currentEntity.listTemplate.dest.forEach((listModel: any) => { if (listModel.item_id != template.item_id) { @@ -482,6 +428,17 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen }); this.currentEntity.listTemplate.dest = [template]; } + } + + saveDiffList() { + this.listDiffModified = false; + var newDiffList = { + "object_id": this.currentEntity.entity_id, + "object_type": "entity_id", + "title": this.currentEntity.entity_id, + "description": this.currentEntity.entity_id, + "items": Array() + }; this.listTemplateRoles.forEach((role: any) => { if (role.available == true) { @@ -497,7 +454,22 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen } } }); - if (this.currentEntity.listTemplate.id) { + + if (newDiffList.items.length == 0) { + this.http.delete(this.coreUrl + "rest/listTemplates/" + this.currentEntity.listTemplate.id) + .subscribe((data: any) => { + this.currentEntity.listTemplate.id = null; + this.http.get(this.coreUrl + "rest/listTemplates/types/entity_id/roles") + .subscribe((data: any) => { + this.listTemplateRoles = data['roles']; + }, (err) => { + this.notify.error(err.error.errors); + }); + this.notify.success(this.lang.diffusionModelDeleted); + }, (err) => { + this.notify.error(err.error.errors); + }); + } else if (this.currentEntity.listTemplate.id) { this.http.put(this.coreUrl + "rest/listTemplates/" + this.currentEntity.listTemplate.id, newDiffList) .subscribe((data: any) => { this.currentEntity.listTemplate.id = data.id; @@ -529,13 +501,7 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen } updateDiffListVisa(template: any): any { - var newDiffList = { - "object_id": this.currentEntity.entity_id, - "object_type": "VISA_CIRCUIT", - "title": this.currentEntity.entity_id, - "description": this.currentEntity.entity_id, - "items": Array() - }; + this.listDiffModified = true; this.currentEntity.visaTemplate.forEach((listModel: any, i: number) => { listModel.sequence = i; if (i == (this.currentEntity.visaTemplate.length - 1)) { @@ -543,74 +509,42 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen } else { listModel.item_mode = "visa"; } - newDiffList.items.push({ - "id": listModel.id, - "item_id": listModel.item_id, - "item_type": "user_id", - "item_mode": listModel.item_mode, - "sequence": listModel.sequence - }); }); - this.http.put(this.coreUrl + "rest/listTemplates/" + this.idCircuitVisa, newDiffList) - .subscribe((data: any) => { - this.idCircuitVisa = data.id; - this.notify.success(this.lang.diffusionModelUpdated); - }, (err) => { - this.notify.error(err.error.errors); - }); - } - removeDiffList(i: number, role: string): any { - this.currentEntity.listTemplate[role].splice(i, 1); + saveDiffListVisa() { + this.listDiffModified = false; var newDiffList = { "object_id": this.currentEntity.entity_id, - "object_type": "entity_id", + "object_type": "VISA_CIRCUIT", "title": this.currentEntity.entity_id, "description": this.currentEntity.entity_id, "items": Array() }; - this.listTemplateRoles.forEach((role: any) => { - if (role.available == true) { - if (this.currentEntity.listTemplate[role.id]) { - this.currentEntity.listTemplate[role.id].forEach((listModel: any) => { - newDiffList.items.push({ - "item_id": listModel.item_id, - "item_type": listModel.item_type, - "item_mode": role.id, - "sequence": listModel.sequence - }); - }); + if (this.idCircuitVisa == null) { + this.currentEntity.visaTemplate.forEach((listModel: any, i: number) => { + listModel.sequence = i; + if (i == (this.currentEntity.visaTemplate.length - 1)) { + listModel.item_mode = "sign"; + } else { + listModel.item_mode = "visa"; } - } - }); - this.http.put(this.coreUrl + "rest/listTemplates/" + this.currentEntity.listTemplate.id, newDiffList) - .subscribe((data: any) => { - this.currentEntity.listTemplate.id = data.id; - this.http.get(this.coreUrl + "rest/listTemplates/types/entity_id/roles") - .subscribe((data: any) => { - this.listTemplateRoles = data['roles']; - }, (err) => { - this.notify.error(err.error.errors); - }); - this.notify.success(this.lang.diffusionModelUpdated); - }, (err) => { - this.notify.error(err.error.errors); + newDiffList.items.push({ + "id": listModel.id, + "item_id": listModel.item_id, + "item_type": "user_id", + "item_mode": listModel.item_mode, + "sequence": listModel.sequence + }); }); - } - - removeDiffListVisa(template: any, i: number): any { - this.currentEntity.visaTemplate.splice(i, 1); - - if (this.currentEntity.visaTemplate.length > 0) { - var newDiffList = { - "object_id": this.currentEntity.entity_id, - "object_type": "VISA_CIRCUIT", - "title": this.currentEntity.entity_id, - "description": this.currentEntity.entity_id, - "items": Array() - }; - + this.http.post(this.coreUrl + "rest/listTemplates", newDiffList) + .subscribe((data: any) => { + this.idCircuitVisa = data.id; + this.notify.success(this.lang.diffusionModelUpdated); + }, (err) => { + this.notify.error(err.error.errors); + }); + } else if (this.currentEntity.visaTemplate.length > 0) { this.currentEntity.visaTemplate.forEach((listModel: any, i: number) => { listModel.sequence = i; if (i == (this.currentEntity.visaTemplate.length - 1)) { @@ -619,13 +553,13 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen listModel.item_mode = "visa"; } newDiffList.items.push({ + "id": listModel.id, "item_id": listModel.item_id, "item_type": "user_id", "item_mode": listModel.item_mode, "sequence": listModel.sequence }); }); - this.http.put(this.coreUrl + "rest/listTemplates/" + this.idCircuitVisa, newDiffList) .subscribe((data: any) => { this.idCircuitVisa = data.id; @@ -635,19 +569,40 @@ export class EntitiesAdministrationComponent extends AutoCompletePlugin implemen }); } else { this.http.delete(this.coreUrl + "rest/listTemplates/" + this.idCircuitVisa) - .subscribe(() => { - this.idCircuitVisa = null; - this.notify.success(this.lang.diffusionModelUpdated); - }, (err) => { - this.notify.error(err.error.errors); - }); + .subscribe(() => { + this.idCircuitVisa = null; + this.notify.success(this.lang.diffusionModelDeleted); + }, (err) => { + this.notify.error(err.error.errors); + }); + } + } + + removeDiffList(i: number, role: string): any { + this.listDiffModified = true; + this.currentEntity.listTemplate[role].splice(i, 1); + } + + removeDiffListVisa(template: any, i: number): any { + this.listDiffModified = true; + this.currentEntity.visaTemplate.splice(i, 1); + + if (this.currentEntity.visaTemplate.length > 0) { + this.currentEntity.visaTemplate.forEach((listModel: any, i: number) => { + listModel.sequence = i; + if (i == (this.currentEntity.visaTemplate.length - 1)) { + listModel.item_mode = "sign"; + } else { + listModel.item_mode = "visa"; + } + }); } } toggleRole(role: any) { console.log(role); if (role.usedIn.length > 0) { - this.config = { data: { msg: this.lang.confirmAction, warn: this.lang.roleUsedInTemplateInfo + " : <b>" + role.usedIn.join(',') + '</b><br/>'+this.lang.roleUsedInTemplateInfo2 } }; + this.config = { data: { msg: this.lang.confirmAction, warn: this.lang.roleUsedInTemplateInfo + " : <b>" + role.usedIn.join(', ') + '</b><br/>' + this.lang.roleUsedInTemplateInfo2 } }; let dialogRef = this.dialog.open(ConfirmModalComponent, this.config); dialogRef.afterClosed().subscribe(result => { if (result === "ok") { diff --git a/apps/maarch_entreprise/js/angular/lang/lang-en.ts b/apps/maarch_entreprise/js/angular/lang/lang-en.ts index 3b3a88b20828c70d4eee37ed32511ed6468bdb5a..149cd3f1aa536d914b95a3287efbc78e11990024 100755 --- a/apps/maarch_entreprise/js/angular/lang/lang-en.ts +++ b/apps/maarch_entreprise/js/angular/lang/lang-en.ts @@ -199,6 +199,7 @@ export const LANG_EN = { "newSignature" : "New signature", "no" : "No", "noAttachment" : "No attachment", + "noEntity" : "No entity", "noReplacement" : "No replacement", "notes" : "Notes", "notificationAdded" : "Notification added", diff --git a/apps/maarch_entreprise/js/angular/lang/lang-fr.ts b/apps/maarch_entreprise/js/angular/lang/lang-fr.ts index de6ff7860dab9097e73e233cc24b6538f0da9bc1..abf5a3cdb9e1f217cf884f784a4ac5e6bf8450a6 100755 --- a/apps/maarch_entreprise/js/angular/lang/lang-fr.ts +++ b/apps/maarch_entreprise/js/angular/lang/lang-fr.ts @@ -214,6 +214,7 @@ export const LANG_FR = { "next" : "Suivant", "no" : "Non", "noAttachment" : "Sans pièce jointe", + "noEntity" : "Aucune entité", "noRecord" : "Aucun élément", "noReplacement" : "Aucun remplacement", "noResult" : "Aucun résultat",