From bab4d0cdc6a721ef425d012cd9a655231dbb80bf Mon Sep 17 00:00:00 2001
From: "hamza.hramchi" <hamza.hramchi@xelians.fr>
Date: Thu, 22 Oct 2020 18:03:11 +0200
Subject: [PATCH] FEAT #15056 TIME 2 add lifeCycle to admin parameters + unit
 type for freeze and binding privileges

---
 .../administration/administration.module.ts   |  4 +-
 .../lifeCycle/life-cycle.component.html       | 19 +++++++++
 .../lifeCycle/life-cycle.component.ts         | 42 +++++++++++++++++++
 .../parameters-administration.component.html  |  5 +++
 src/frontend/service/privileges.service.ts    |  4 +-
 src/lang/lang-fr.json                         | 10 ++++-
 6 files changed, 79 insertions(+), 5 deletions(-)
 create mode 100644 src/frontend/app/administration/parameter/lifeCycle/life-cycle.component.html
 create mode 100644 src/frontend/app/administration/parameter/lifeCycle/life-cycle.component.ts

diff --git a/src/frontend/app/administration/administration.module.ts b/src/frontend/app/administration/administration.module.ts
index 7972f475719..02f3c146982 100755
--- a/src/frontend/app/administration/administration.module.ts
+++ b/src/frontend/app/administration/administration.module.ts
@@ -76,6 +76,7 @@ import { IssuingSiteComponent } from './registered-mail/issuing-site/issuing-sit
 import { RegisteredMailListComponent } from './registered-mail/registered-mail-list.component';
 import { SearchAdministrationComponent } from './search/search-administration.component';
 import { SsoAdministrationComponent } from './connection/sso/sso-administration.component';
+import { LifeCycleComponent } from './parameter/lifeCycle/life-cycle.component';
 
 
 @NgModule({
@@ -160,7 +161,8 @@ import { SsoAdministrationComponent } from './connection/sso/sso-administration.
         IssuingSiteComponent,
         RegisteredMailListComponent,
         SearchAdministrationComponent,
-        SsoAdministrationComponent
+        SsoAdministrationComponent,
+        LifeCycleComponent
     ],
     entryComponents: [
         AccountLinkComponent,
diff --git a/src/frontend/app/administration/parameter/lifeCycle/life-cycle.component.html b/src/frontend/app/administration/parameter/lifeCycle/life-cycle.component.html
new file mode 100644
index 00000000000..01ac7bf38da
--- /dev/null
+++ b/src/frontend/app/administration/parameter/lifeCycle/life-cycle.component.html
@@ -0,0 +1,19 @@
+<mat-form-field appearance="outline">
+    <mat-label>{{'lang.bindingDocumentFinalAction' | translate}}</mat-label>
+    <mat-select [(ngModel)]="bindingDocumentFinalAction.param_value_string" title="{{'lang.bindingDocumentFinalAction' | translate}}">
+        <mat-option *ngFor="let item of finalActionValues" [value]="item">
+            {{ 'lang.' + item | translate}}
+        </mat-option>
+    </mat-select>
+</mat-form-field>
+
+<br>
+
+<mat-form-field appearance="outline">
+    <mat-label>{{'lang.nonBindingDocumentFinalAction' | translate}}</mat-label>
+    <mat-select [(ngModel)]="nonBindingDocumentFinalAction.param_value_string" title="{{'lang.bindingDocumentFinalAction' | translate}}">
+        <mat-option *ngFor="let item of finalActionValues" [value]="item">
+            {{ 'lang.' + item | translate}}
+        </mat-option>
+    </mat-select>
+</mat-form-field>
diff --git a/src/frontend/app/administration/parameter/lifeCycle/life-cycle.component.ts b/src/frontend/app/administration/parameter/lifeCycle/life-cycle.component.ts
new file mode 100644
index 00000000000..8cdb425db38
--- /dev/null
+++ b/src/frontend/app/administration/parameter/lifeCycle/life-cycle.component.ts
@@ -0,0 +1,42 @@
+import { Component, OnInit } from '@angular/core';
+import { TranslateService } from '@ngx-translate/core';
+import { tap, catchError } from 'rxjs/operators';
+import { HttpClient } from '@angular/common/http';
+import { of } from 'rxjs';
+
+@Component({
+    selector: 'app-life-cyle',
+    templateUrl: './life-cycle.component.html',
+})
+
+export class LifeCycleComponent implements OnInit {
+    finalActionValues: any[] = ['restrictAccess', 'transfer', 'copy', 'delete'];
+    bindingDocumentFinalAction: any[] = [];
+    nonBindingDocumentFinalAction: any[] = [];
+    notify: any;
+
+    constructor(public translate: TranslateService, public http: HttpClient) {}
+
+    async ngOnInit(): Promise<void> {
+        await this.getFinalAction();
+    }
+
+    getFinalAction() {
+        return new Promise((resolve) => {
+            this.http.get('../rest/parameters').pipe(
+                tap((data: any) => {
+                        const bindDocumentFinalAction = data.parameters.filter((t: { id: any; }) => t.id === 'bindingDocumentFinalAction');
+                        const nonBindDocumentFinalAction = data.parameters.filter((t: { id: any; }) => t.id === 'nonBindingDocumentFinalAction');
+                        this.bindingDocumentFinalAction = bindDocumentFinalAction[0];
+                        this.nonBindingDocumentFinalAction = nonBindDocumentFinalAction[0];
+                        resolve(true);
+                }),
+                catchError((err: any) => {
+                    this.notify.handleSoftErrors(err);
+                    return of(false);
+                })
+            ).subscribe();
+        });
+    }
+
+}
diff --git a/src/frontend/app/administration/parameter/parameters-administration.component.html b/src/frontend/app/administration/parameter/parameters-administration.component.html
index c15a9b4298e..45364c6177e 100755
--- a/src/frontend/app/administration/parameter/parameters-administration.component.html
+++ b/src/frontend/app/administration/parameter/parameters-administration.component.html
@@ -88,6 +88,11 @@
                                 <app-parameters-customization></app-parameters-customization>
                             </ng-template>
                         </mat-tab>
+                        <mat-tab [label]="'lang.lifeCycle' | translate">
+                            <ng-template matTabContent>
+                                <app-life-cyle></app-life-cyle>
+                            </ng-template>
+                        </mat-tab>
                     </mat-tab-group>
                 </mat-card>
             </div>
diff --git a/src/frontend/service/privileges.service.ts b/src/frontend/service/privileges.service.ts
index 257ac8fce51..9f56d95eedc 100755
--- a/src/frontend/service/privileges.service.ts
+++ b/src/frontend/service/privileges.service.ts
@@ -502,13 +502,13 @@ export class PrivilegeService {
             'id': 'set_binding_document',
             'label': 'lang.setBindingDocument',
             'comment': 'lang.setBindingDocument',
-            'unit': 'application'
+            'unit': 'lifeCycle'
         },
         {
             'id': 'freeze_retention_rule',
             'label': 'lang.freezeRetentionRule',
             'comment': 'lang.freezeRetentionRule',
-            'unit': 'application'
+            'unit': 'lifeCycle'
         }
     ];
 
diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json
index 5fede10c5b9..1627e5b7730 100644
--- a/src/lang/lang-fr.json
+++ b/src/lang/lang-fr.json
@@ -2118,6 +2118,12 @@
     "ssoUrl": "Url du portail SSO",
     "ssoUrlDesc": "Permet d'activer le bouton de déconnexion de l'application afin de retourner sur le portail de connexion SSO.",
     "warning": "Attention",
-    "fieldUserIdDescSso": "Permet faire le lien entre l'identifiant utilisateur maarch et l'identifiant SSO"
-    
+    "fieldUserIdDescSso": "Permet faire le lien entre l'identifiant utilisateur maarch et l'identifiant SSO",
+    "lifeCycle": "Cycle de vie",
+    "bindingDocumentFinalAction": "Action finale relative au document contraignant",
+    "nonBindingDocumentFinalAction": "Action finale relative aux documents non contraignants",
+    "restrictAccess": "Accès retreint",
+    "transfer": "Transfert SAE + destruction",
+    "copy": "Transfert SAE + accès restreint",
+    "deleteAction": "Suppression"
 }
-- 
GitLab