From 0695f97844fd38a35195ccec4f13a2422625f95d Mon Sep 17 00:00:00 2001 From: Alex ORLUC <alex.orluc@maarch.org> Date: Wed, 12 Aug 2020 11:36:40 +0200 Subject: [PATCH] FEAT #14537 TIME 1:30 front registeredMailNumberRanges admin list --- .../administration-routing.module.ts | 8 +- .../administration/administration.module.ts | 2 + .../administration/administration.service.ts | 6 + .../issuing-site-list.component.html | 11 +- .../issuing-site-list.component.scss | 8 + .../issuing-site-list.component.ts | 15 ++ .../issuing-site/issuing-site.component.ts | 4 +- .../registered-mail-list.component.html | 144 ++++++++++++ .../registered-mail-list.component.scss | 42 ++++ .../registered-mail-list.component.ts | 212 ++++++++++++++++++ src/frontend/service/privileges.service.ts | 2 +- src/lang/lang-fr.json | 9 +- 12 files changed, 455 insertions(+), 8 deletions(-) create mode 100644 src/frontend/app/administration/registered-mail/registered-mail-list.component.html create mode 100644 src/frontend/app/administration/registered-mail/registered-mail-list.component.scss create mode 100644 src/frontend/app/administration/registered-mail/registered-mail-list.component.ts diff --git a/src/frontend/app/administration/administration-routing.module.ts b/src/frontend/app/administration/administration-routing.module.ts index ae172bcc346..151fcddbfdf 100755 --- a/src/frontend/app/administration/administration-routing.module.ts +++ b/src/frontend/app/administration/administration-routing.module.ts @@ -51,6 +51,7 @@ import { AlfrescoListAdministrationComponent } from './alfresco/alfresco-list-ad import { ContactDuplicateComponent } from './contact/contact-duplicate/contact-duplicate.component'; import { IssuingSiteListComponent } from './registered-mail/issuing-site/issuing-site-list.component'; import { IssuingSiteComponent } from './registered-mail/issuing-site/issuing-site.component'; +import { RegisteredMailListComponent } from './registered-mail/registered-mail-list.component'; @NgModule({ imports: [ @@ -119,9 +120,10 @@ import { IssuingSiteComponent } from './registered-mail/issuing-site/issuing-sit { path: 'alfresco', canActivate: [AppGuard], component: AlfrescoListAdministrationComponent }, { path: 'alfresco/new', canActivate: [AppGuard], component: AlfrescoAdministrationComponent }, { path: 'alfresco/:id', canActivate: [AppGuard], component: AlfrescoAdministrationComponent }, - { path: 'issuingSite', canActivate: [AppGuard], component: IssuingSiteListComponent }, - { path: 'issuingSite/new', canActivate: [AppGuard], component: IssuingSiteComponent }, - { path: 'issuingSite/:id', canActivate: [AppGuard], component: IssuingSiteComponent }, + { path: 'registeredMails', canActivate: [AppGuard], component: RegisteredMailListComponent }, + { path: 'issuingSites', canActivate: [AppGuard], component: IssuingSiteListComponent }, + { path: 'issuingSites/new', canActivate: [AppGuard], component: IssuingSiteComponent }, + { path: 'issuingSites/:id', canActivate: [AppGuard], component: IssuingSiteComponent }, ]), ], exports: [ diff --git a/src/frontend/app/administration/administration.module.ts b/src/frontend/app/administration/administration.module.ts index d722b9221ec..4afcf9bee0c 100755 --- a/src/frontend/app/administration/administration.module.ts +++ b/src/frontend/app/administration/administration.module.ts @@ -74,6 +74,7 @@ import {EntitiesExportComponent} from './entity/export/entities-export.component import { RegisteredMailComponent } from './registered-mail/registered-mail.component'; import { IssuingSiteListComponent } from './registered-mail/issuing-site/issuing-site-list.component'; import { IssuingSiteComponent } from './registered-mail/issuing-site/issuing-site.component'; +import { RegisteredMailListComponent } from './registered-mail/registered-mail-list.component'; @NgModule({ @@ -156,6 +157,7 @@ import { IssuingSiteComponent } from './registered-mail/issuing-site/issuing-sit RegisteredMailComponent, IssuingSiteListComponent, IssuingSiteComponent, + RegisteredMailListComponent, ], entryComponents: [ AccountLinkComponent, diff --git a/src/frontend/app/administration/administration.service.ts b/src/frontend/app/administration/administration.service.ts index 5b3d3427246..7e04dfe4ba2 100644 --- a/src/frontend/app/administration/administration.service.ts +++ b/src/frontend/app/administration/administration.service.ts @@ -113,6 +113,12 @@ export class AdministrationService { page: 0, field: '' }, + admin_regitered_mail: { + sort: 'customerAccountNumber', + sortDirection: 'asc', + page: 0, + field: '' + }, }; dataSource: MatTableDataSource<any>; filterColumns: string[]; diff --git a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.html b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.html index aff293aadf1..de77223ff55 100644 --- a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.html +++ b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.html @@ -9,6 +9,15 @@ </p> </a> </mat-nav-list> + <mat-divider></mat-divider> + <mat-nav-list> + <a mat-list-item *ngFor="let menu of subMenus" [class.active]="menu.current" [routerLink]="menu.route"> + <mat-icon color="primary" mat-list-icon [class]="menu.icon"></mat-icon> + <p mat-line> + {{menu.label}} + </p> + </a> + </mat-nav-list> </ng-template> <mat-sidenav-content> <div class="bg-head"> @@ -78,7 +87,7 @@ </mat-table> <div class="mat-paginator" style="min-height:48px;min-height: 48px;display: flex;justify-content: end;align-items: center;padding-right: 20px;"> - {{parameters.length}} {{'lang.issuingSites' | translate}}</div> + {{data.length}} {{'lang.issuingSites' | translate}}</div> </mat-card> </div> </div> diff --git a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.scss b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.scss index e69de29bb2d..6d6ff186c65 100644 --- a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.scss +++ b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.scss @@ -0,0 +1,8 @@ + +@import '../../../../css/vars.scss'; + +.active, .active:hover , .active:active, .active:focus { + color: $primary; + border-left: solid 5px $primary; + background: rgba($primary, 0.14); +} \ No newline at end of file diff --git a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.ts b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.ts index abe3345744b..9a1524caea6 100644 --- a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.ts +++ b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site-list.component.ts @@ -22,6 +22,21 @@ import { MatDialog } from '@angular/material/dialog'; }) export class IssuingSiteListComponent implements OnInit { + subMenus: any[] = [ + { + icon: 'fas fa-dolly-flatbed', + route: '/administration/registeredMails', + label: this.translate.instant('lang.registeredMailNumberRanges'), + current: false + }, + { + icon: 'fas fa-warehouse', + route: '/administration/issuingSites', + label: this.translate.instant('lang.issuingSites'), + current: true + }, + ]; + @ViewChild('adminMenuTemplate', { static: true }) adminMenuTemplate: TemplateRef<any>; parameters: any = {}; diff --git a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.ts b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.ts index b83e0981fb6..a566f5bb880 100644 --- a/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.ts +++ b/src/frontend/app/administration/registered-mail/issuing-site/issuing-site.component.ts @@ -217,7 +217,7 @@ export class IssuingSiteComponent implements OnInit { this.http.post('../rest/registeredMail/sites', objToSubmit) .subscribe(() => { this.notify.success(this.translate.instant('lang.issuingSiteAdded')); - this.router.navigate(['/administration/issuingSite']); + this.router.navigate(['/administration/issuingSites']); }, (err) => { this.notify.error(err.error.errors); }); @@ -225,7 +225,7 @@ export class IssuingSiteComponent implements OnInit { this.http.put('../rest/registeredMail/sites/' + this.id, objToSubmit) .subscribe(() => { this.notify.success(this.translate.instant('lang.issuingSiteUpdated')); - this.router.navigate(['/administration/issuingSite']); + this.router.navigate(['/administration/issuingSites']); }, (err) => { this.notify.error(err.error.errors); }); diff --git a/src/frontend/app/administration/registered-mail/registered-mail-list.component.html b/src/frontend/app/administration/registered-mail/registered-mail-list.component.html new file mode 100644 index 00000000000..688a68d97cf --- /dev/null +++ b/src/frontend/app/administration/registered-mail/registered-mail-list.component.html @@ -0,0 +1,144 @@ +<mat-sidenav-container autosize class="maarch-container"> + <ng-template #adminMenuTemplate> + <mat-nav-list> + <h3 mat-subheader>{{'lang.actions' | translate}}</h3> + <a mat-list-item routerLink="/administration/registeredMail/new"> + <mat-icon color="primary" mat-list-icon class="fa fa-plus"></mat-icon> + <p mat-line> + {{'lang.add' | translate}} + </p> + </a> + </mat-nav-list> + <mat-divider></mat-divider> + <mat-nav-list> + <a mat-list-item *ngFor="let menu of subMenus" [class.active]="menu.current" [routerLink]="menu.route"> + <mat-icon color="primary" mat-list-icon [class]="menu.icon"></mat-icon> + <p mat-line> + {{menu.label}} + </p> + </a> + </mat-nav-list> + </ng-template> + <mat-sidenav-content> + <div class="bg-head"> + <div class="bg-head-title" [class.customContainerRight]="appService.getViewMode()"> + <div class="bg-head-title-label"> + <header-left></header-left> + </div> + <div class="bg-head-title-tool"> + <header-right></header-right> + </div> + </div> + <div class="bg-head-content" [class.fullContainer]="appService.getViewMode()"> + </div> + </div> + <div class="container" [class.fullContainer]="appService.getViewMode()"> + <div class="container-content"> + <div *ngIf="loading" style="display:flex;height:100%;"> + <mat-spinner style="margin:auto;"></mat-spinner> + </div> + <mat-card *ngIf="!loading" class="card-app-content"> + <div class="row"> + <div class="col-md-6 col-xs-6"> + <mat-form-field> + <input matInput [formControl]="adminService.getFilterField()" + placeholder="{{'lang.filterBy' | translate}}"> + </mat-form-field> + </div> + <div class="col-md-6 col-xs-6"> + <mat-paginator #paginator [length]="100" [hidePageSize]="true" [pageSize]="10"> + </mat-paginator> + </div> + </div> + <mat-table #table [dataSource]="adminService.getDataSource()" matSort matSortDisableClear> + <ng-container matColumnDef="customerAccountNumber"> + <mat-header-cell *matHeaderCellDef mat-sort-header style="flex:2"> + {{'lang.customerAccountNumber' | translate}} + </mat-header-cell> + <mat-cell *matCellDef="let element" style="flex:2"> + {{element.customerAccountNumber}} </mat-cell> + </ng-container> + <ng-container matColumnDef="trackerNumber"> + <mat-header-cell *matHeaderCellDef mat-sort-header style="flex:2"> + {{'lang.trackerNumber' | translate}} + </mat-header-cell> + <mat-cell *matCellDef="let element" style="flex:2"> + {{element.trackerNumber}} </mat-cell> + </ng-container> + <ng-container matColumnDef="registredMailType"> + <mat-header-cell *matHeaderCellDef mat-sort-header> + {{'lang.type' | translate}} + </mat-header-cell> + <mat-cell *matCellDef="let element"> + {{element.registredMailType}} </mat-cell> + </ng-container> + <ng-container matColumnDef="rangeNumber"> + <mat-header-cell *matHeaderCellDef mat-sort-header> + {{'lang.rangeNumber' | translate}} + </mat-header-cell> + <mat-cell *matCellDef="let element"> + {{element.rangeNumber}} </mat-cell> + </ng-container> + <ng-container matColumnDef="currentNumber"> + <mat-header-cell *matHeaderCellDef mat-sort-header> + {{'lang.currentNumber' | translate}} + </mat-header-cell> + <mat-cell *matCellDef="let element"> + {{element.currentNumber}} </mat-cell> + </ng-container> + <ng-container matColumnDef="status"> + <mat-header-cell *matHeaderCellDef mat-sort-header> + {{'lang.status' | translate}} + </mat-header-cell> + <mat-cell *matCellDef="let element"> + <span + [ngClass]="{'statusLabelWarn': ['SPD','END'].indexOf(element.status) > -1, 'statusLabelPrimary': ['SPD','END'].indexOf(element.status) == -1}" + class="label">{{element.statusLabel}}</span> + </mat-cell> + </ng-container> + <ng-container matColumnDef="fullness"> + <mat-header-cell *matHeaderCellDef mat-sort-header> + {{'lang.fullness' | translate}} + </mat-header-cell> + <mat-cell *matCellDef="let element"> + <div class="fullness full" [class.fullness-ok]="element.fullness < 50" + [class.fullness-warning]="element.fullness >= 50 && element.fullness < 80" + [class.fullness-danger]="element.fullness >= 80"> + <mat-progress-spinner color="primay" mode="determinate" diameter="54" + [value]="element.fullness"> + </mat-progress-spinner> + <div class="percent">{{element.fullness}}%</div> + </div> + </mat-cell> + </ng-container> + <ng-container matColumnDef="actions"> + <mat-header-cell *matHeaderCellDef></mat-header-cell> + <mat-cell *matCellDef="let element" style="justify-content: flex-end;"> + <button mat-icon-button color="accent" matTooltip="{{'Activer la plage' | translate}}" + (click)="$event.stopPropagation();activate(element)" *ngIf="element.status !== 'OK'" [disabled]="element.fullness === 100"> + <mat-icon class="fa fas fa-play fa-2x" aria-hidden="true"></mat-icon> + </button> + <button mat-icon-button color="warn" matTooltip="{{'Clôturer la plage' | translate}}" + (click)="$event.stopPropagation();stop(element)" *ngIf="element.status === 'OK'"> + <mat-icon class="fa fas fa-stop-circle fa-2x" aria-hidden="true"></mat-icon> + </button> + <button mat-icon-button color="warn" matTooltip="{{'lang.delete' | translate}}" + (click)="$event.stopPropagation();delete(element)" + [disabled]="element.status === 'OK'"> + <mat-icon class="fa fa-trash-alt fa-2x" aria-hidden="true"></mat-icon> + </button> + </mat-cell> + </ng-container> + <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> + <mat-row *matRowDef="let row; columns: displayedColumns;" + routerLink="/administration/registeredMail/{{row.id}}" style="cursor:pointer;" + matTooltip="{{'lang.view' | translate}}"></mat-row> + </mat-table> + <div class="mat-paginator" + style="min-height:48px;min-height: 48px;display: flex;justify-content: end;align-items: center;padding-right: 20px;"> + {{data.length}} {{'lang.registeredMailNumberRanges' | translate}}</div> + </mat-card> + </div> + </div> + </mat-sidenav-content> +</mat-sidenav-container> \ No newline at end of file diff --git a/src/frontend/app/administration/registered-mail/registered-mail-list.component.scss b/src/frontend/app/administration/registered-mail/registered-mail-list.component.scss new file mode 100644 index 00000000000..47908866c33 --- /dev/null +++ b/src/frontend/app/administration/registered-mail/registered-mail-list.component.scss @@ -0,0 +1,42 @@ +@import '../../../css/vars.scss'; + +.active, .active:hover , .active:active, .active:focus { + color: $primary; + border-left: solid 5px $primary; + background: rgba($primary, 0.14); +} + +.fullness { + position: relative; + +} +.percent { + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + left: 50%; + font-size: 10px; + font-weight: bold; + color: #888; +} + + +.fullness-ok ::ng-deep .mat-progress-spinner circle, .mat-spinner circle { + stroke: green; +} + +.fullness-warning ::ng-deep .mat-progress-spinner circle, .mat-spinner circle { + stroke: orange; +} + +.fullness-danger ::ng-deep .mat-progress-spinner circle, .mat-spinner circle { + stroke: red; +} + +.statusLabelWarn { + color : $warn; +} + +.statusLabelPrimary { + color : $primary; +} \ No newline at end of file diff --git a/src/frontend/app/administration/registered-mail/registered-mail-list.component.ts b/src/frontend/app/administration/registered-mail/registered-mail-list.component.ts new file mode 100644 index 00000000000..66650cfa376 --- /dev/null +++ b/src/frontend/app/administration/registered-mail/registered-mail-list.component.ts @@ -0,0 +1,212 @@ +import { Component, OnInit, ViewChild, TemplateRef, ViewContainerRef } from '@angular/core'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort } from '@angular/material/sort'; +import { TranslateService } from '@ngx-translate/core'; +import { HttpClient } from '@angular/common/http'; +import { NotificationService } from '../../../service/notification/notification.service'; +import { HeaderService } from '../../../service/header.service'; +import { AppService } from '../../../service/app.service'; +import { FunctionsService } from '../../../service/functions.service'; +import { AdministrationService } from '../administration.service'; +import { MatDialog } from '@angular/material/dialog'; +import { tap, catchError, filter, exhaustMap } from 'rxjs/operators'; +import { ConfirmComponent } from '../../../plugins/modal/confirm.component'; +import { of } from 'rxjs/internal/observable/of'; + +@Component({ + selector: 'app-registered-mail-list', + templateUrl: './registered-mail-list.component.html', + styleUrls: ['./registered-mail-list.component.scss'] +}) +export class RegisteredMailListComponent implements OnInit { + + subMenus: any[] = [ + { + icon: 'fas fa-dolly-flatbed', + route: '/administration/registeredMails', + label: this.translate.instant('lang.registeredMailNumberRanges'), + current: true + }, + { + icon: 'fas fa-warehouse', + route: '/administration/issuingSites', + label: this.translate.instant('lang.issuingSites'), + current: false + }, + ]; + + @ViewChild('adminMenuTemplate', { static: true }) adminMenuTemplate: TemplateRef<any>; + + parameters: any = {}; + + loading: boolean = true; + + data: any[] = []; + + displayedColumns = ['customerAccountNumber', 'trackerNumber', 'registredMailType', 'rangeNumber', 'currentNumber', 'status', 'fullness', 'actions']; + filterColumns = ['customerAccountNumber', 'trackerNumber', 'registredMailType', 'rangeNumber', 'currentNumber', 'fullness', 'statusLabel']; + + @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator; + @ViewChild(MatSort, { static: false }) sort: MatSort; + + constructor( + private translate: TranslateService, + public http: HttpClient, + private notify: NotificationService, + private headerService: HeaderService, + public appService: AppService, + public functions: FunctionsService, + public adminService: AdministrationService, + private viewContainerRef: ViewContainerRef, + public dialog: MatDialog + ) { } + + ngOnInit(): void { + this.headerService.setHeader(this.translate.instant('lang.administration') + ' ' + this.translate.instant('lang.registeredMailNumberRanges')); + + this.headerService.injectInSideBarLeft(this.adminMenuTemplate, this.viewContainerRef, 'adminMenu'); + this.loading = false; + this.getData(); + } + + getData() { + this.data = []; + + // FOR TEST + this.data = [ + { + id: 1, + customerAccountNumber : '1098498410', + trackerNumber: 'AZPOKF30KDZP', + registredMailType: 'B01', + rangeStart: 1000, + rangeEnd: 1500, + currentNumber: null, + fullness: 100, + status: 'END', + }, + { + id: 2, + customerAccountNumber : '1098498410', + trackerNumber: 'AZPOKF30KDZP', + registredMailType: 'B01', + rangeStart: 1501, + rangeEnd: 2000, + currentNumber: 1621, + fullness: 26, + status: 'OK', + }, + { + id: 3, + customerAccountNumber : '1098498410', + trackerNumber: 'AZPOKF30KDZP', + registredMailType: 'B02', + rangeStart: 1501, + rangeEnd: 2000, + currentNumber: null, + fullness: 0, + status: 'OK', + }, + { + id: 2, + customerAccountNumber : '1098498410', + trackerNumber: 'AZPOKF30KDZP', + registredMailType: 'B01', + rangeStart: 2001, + rangeEnd: 2500, + currentNumber: null, + fullness: 0, + status: 'SPD', + }, + ]; + this.data = this.data.map((item: any) => { + return { + ...item, + statusLabel : item.status !== 'OK' ? this.translate.instant('lang.inactive') : this.translate.instant('lang.active'), + rangeNumber : `${item.rangeStart} - ${item.rangeEnd}`, + }; + }); + this.loading = false; + setTimeout(() => { + this.adminService.setDataSource('admin_regitered_mail', this.data, this.sort, this.paginator, this.filterColumns); + }, 0); + + + /*this.http.get('../rest/registeredMail').pipe( + tap((data: any) => { + this.data = data['sites']; + this.loading = false; + setTimeout(() => { + this.adminService.setDataSource('admin_regitered_mail_issuing_site', this.data, this.sort, this.paginator, this.filterColumns); + }, 0); + }), + catchError((err: any) => { + this.notify.handleSoftErrors(err); + return of(false); + }) + ).subscribe();*/ + } + + activate(row: any) { + const dialogRef = this.dialog.open(ConfirmComponent, { panelClass: 'maarch-modal', autoFocus: false, disableClose: true, data: { title: this.translate.instant('lang.activate'), msg: 'En activant cette plage, cela clôtura la plage actuelle utilisée pour ce type de recommandé.' } }); + + dialogRef.afterClosed().pipe( + filter((data: string) => data === 'ok'), + // exhaustMap(() => this.http.delete(`../rest/registeredMail/${row.id}`)), + tap(() => { + row.status = 'OK'; + row.statusLabel = this.translate.instant('lang.active'); + setTimeout(() => { + this.adminService.setDataSource('admin_regitered_mail_issuing_site', this.data, this.sort, this.paginator, this.filterColumns); + }, 0); + this.notify.success(this.translate.instant('Plage activée')); + }), + catchError((err: any) => { + this.notify.handleErrors(err); + return of(false); + }) + ).subscribe(); + } + + stop(row: any) { + const dialogRef = this.dialog.open(ConfirmComponent, { panelClass: 'maarch-modal', autoFocus: false, disableClose: true, data: { title: this.translate.instant('lang.suspend'), msg: 'En clôturant la plage, vous ne pourrez plus utiliser de recommandé de ce type tant que vous n\'en n\'aurez pas activé une autre.' } }); + + dialogRef.afterClosed().pipe( + filter((data: string) => data === 'ok'), + // exhaustMap(() => this.http.delete(`../rest/registeredMail/${row.id}`)), + tap(() => { + row.status = 'END'; + row.statusLabel = this.translate.instant('lang.inactive'); + setTimeout(() => { + this.adminService.setDataSource('admin_regitered_mail_issuing_site', this.data, this.sort, this.paginator, this.filterColumns); + }, 0); + this.notify.success(this.translate.instant('Plage cloturée')); + }), + catchError((err: any) => { + this.notify.handleErrors(err); + return of(false); + }) + ).subscribe(); + } + + delete(row: any) { + const dialogRef = this.dialog.open(ConfirmComponent, { panelClass: 'maarch-modal', autoFocus: false, disableClose: true, data: { title: this.translate.instant('lang.delete'), msg: this.translate.instant('lang.confirmAction') } }); + + dialogRef.afterClosed().pipe( + filter((data: string) => data === 'ok'), + // exhaustMap(() => this.http.delete(`../rest/registeredMail/${row.id}`)), + tap(() => { + this.data = this.data.filter((item: any) => item.id !== row.id); + setTimeout(() => { + this.adminService.setDataSource('admin_regitered_mail_issuing_site', this.data, this.sort, this.paginator, this.filterColumns); + }, 0); + this.notify.success(this.translate.instant('lang.issuingSiteDeleted')); + }), + catchError((err: any) => { + this.notify.handleErrors(err); + return of(false); + }) + ).subscribe(); + } + +} diff --git a/src/frontend/service/privileges.service.ts b/src/frontend/service/privileges.service.ts index 95e961913cd..73f8ef7d23b 100755 --- a/src/frontend/service/privileges.service.ts +++ b/src/frontend/service/privileges.service.ts @@ -292,7 +292,7 @@ export class PrivilegeService { 'id': 'admin_registered_mail', 'label': this.translate.instant('lang.registeredMail'), 'comment': this.translate.instant('lang.adminRegisteredMailDesc'), - 'route': '/administration/issuingSite', + 'route': '/administration/registeredMails', 'unit': 'supervision', 'style': 'fas fa-dolly-flatbed', 'angular': true, diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json index 9102b859ef3..e7e5168324b 100644 --- a/src/lang/lang-fr.json +++ b/src/lang/lang-fr.json @@ -1902,5 +1902,12 @@ "siteName": "Nom du site", "issuingSiteCreation": "Création d'un site émetteur", "issuingSiteAdded": "Site émetteur ajouté", - "issuingSiteUpdated": "Site émetteur modifié" + "issuingSiteUpdated": "Site émetteur modifié", + "registeredMailNumberRanges": "Plages de numéros de recommandés", + "customerAccountNumber": "Numéro de client", + "trackerNumber": "Numéro de suivi", + "registredMailType": "Type de recommandé", + "rangeNumber": "Plage", + "currentNumber": "Numéro actuel", + "fullness": "Remplissage" } -- GitLab