From 341b6196720b82350f73b6435d20d5a210c6dd71 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Tue, 1 Sep 2020 21:26:27 +0200
Subject: [PATCH] FEAT #14484 TIME 2:30 Begin trafficRecord module for summary
 sheet

---
 migration/20.10/2010.sql                      |  3 ++
 sql/data_fr.sql                               |  1 +
 .../parameters-customization.component.html   |  5 ++
 .../parameters-customization.component.ts     | 14 ++++--
 .../parameters-administration.component.ts    |  6 +--
 .../summarySheet/summary-sheet.component.html |  6 ++-
 .../summarySheet/summary-sheet.component.scss |  2 +-
 .../summarySheet/summary-sheet.component.ts   | 47 +++++++++++++++++--
 src/lang/lang-en.json                         |  2 +
 src/lang/lang-fr.json                         |  2 +
 10 files changed, 76 insertions(+), 12 deletions(-)

diff --git a/migration/20.10/2010.sql b/migration/20.10/2010.sql
index 2a1d78c3983..dfaca3d864e 100755
--- a/migration/20.10/2010.sql
+++ b/migration/20.10/2010.sql
@@ -252,6 +252,9 @@ CREATE TABLE IF NOT EXISTS registered_mail_resources (
 DELETE FROM parameters WHERE id = 'last_deposit_id';
 INSERT INTO parameters (id, param_value_int) VALUES ('last_deposit_id', 0);
 
+DELETE FROM parameters WHERE id = 'traffic_record_summary_sheet';
+INSERT INTO parameters (id, description, param_value_string) VALUES ('traffic_record_summary_sheet', 'Module circulation pour la fiche de liaison', '');
+
 /* RE CREATE VIEWS */
 CREATE OR REPLACE VIEW res_view_letterbox AS
 SELECT r.res_id,
diff --git a/sql/data_fr.sql b/sql/data_fr.sql
index 9fe59bc22fa..23877d0335c 100755
--- a/sql/data_fr.sql
+++ b/sql/data_fr.sql
@@ -1007,6 +1007,7 @@ INSERT INTO parameters (id, description, param_value_string, param_value_int, pa
 INSERT INTO parameters (id, description, param_value_string) VALUES ('homepage_message', 'Texte apparaissant dans la bannière sur la page d''accueil, mettre un espace pour supprimer la bannière.', '<p>D&eacute;couvrez <strong>Maarch Courrier 20.10</strong> avec <a title="notre guide de visite" href="https://docs.maarch.org/" target="_blank"><span style="color:#f99830;"><strong>notre guide de visite en ligne</strong></span></a>.</p>');
 INSERT INTO parameters (id, description, param_value_string) VALUES ('loginpage_message', 'Texte apparaissant sur la page de login.', '<h3><span style="color:#24b0ed"><strong>Découvrez votre application via</strong></span> <a title="le guide de visite" href="https://docs.maarch.org/" target="_blank"><span style="color:#f99830;"><strong>le guide de visite en ligne</strong></span></a></h3>');
 INSERT INTO parameters (id, description, param_value_string) VALUES ('thumbnailsSize', 'Résolution des imagettes', '750x900');
+INSERT INTO parameters (id, description, param_value_string) VALUES ('traffic_record_summary_sheet', 'Module circulation pour la fiche de liaison', '');
 INSERT INTO parameters (id, description, param_value_int) VALUES ('keepDestForRedirection', 'Si activé (1), met le destinataire en copie de la liste de diffusion lors d''une action de redirection', 0);
 INSERT INTO parameters (id, description, param_value_int) VALUES ('QrCodePrefix', 'Si activé (1), ajoute "Maarch_" dans le contenu des QrCode générés. (Utilisable avec MaarchCapture >= 1.4)', 0);
 INSERT INTO parameters (id, description, param_value_int) VALUES ('workingDays', 'Si activé (1), les délais de traitement sont calculés en jours ouvrés (Lundi à Vendredi). Sinon, en jours calendaire', 1);
diff --git a/src/frontend/app/administration/parameter/customization/parameters-customization.component.html b/src/frontend/app/administration/parameter/customization/parameters-customization.component.html
index 60f27932336..64becbc719e 100644
--- a/src/frontend/app/administration/parameter/customization/parameters-customization.component.html
+++ b/src/frontend/app/administration/parameter/customization/parameters-customization.component.html
@@ -14,6 +14,11 @@
             formControlName="homepage_message"></textarea>
         <br />
         <br />
+        <div>{{'lang.trafficRecordSummarySheetParameters' | translate}} : </div>
+        <textarea style="padding-top: 10px;" name="traffic_record_summary_sheet" id="traffic_record_summary_sheet"
+            formControlName="traffic_record_summary_sheet"></textarea>
+        <br />
+        <br />
     </div>
     <div class="col-md-6">
         <div>{{'lang.chooseLogo' | translate}} : </div>
diff --git a/src/frontend/app/administration/parameter/customization/parameters-customization.component.ts b/src/frontend/app/administration/parameter/customization/parameters-customization.component.ts
index 02ae2f801cd..b7f6d19e92b 100644
--- a/src/frontend/app/administration/parameter/customization/parameters-customization.component.ts
+++ b/src/frontend/app/administration/parameter/customization/parameters-customization.component.ts
@@ -36,6 +36,7 @@ export class ParametersCustomizationComponent implements OnInit, OnDestroy {
             applicationName: ['', Validators.required],
             loginpage_message: [''],
             homepage_message: [''],
+            traffic_record_summary_sheet: [''],
             bodyImage: ['../rest/images?image=loginPage'],
             logo: ['../rest/images?image=logo'],
         });
@@ -58,6 +59,7 @@ export class ParametersCustomizationComponent implements OnInit, OnDestroy {
                 tap((data: any) => {
                     this.stepFormGroup.controls['homepage_message'].setValue(data.parameters.filter((item: any) => item.id === 'homepage_message')[0].value);
                     this.stepFormGroup.controls['loginpage_message'].setValue(data.parameters.filter((item: any) => item.id === 'loginpage_message')[0].value);
+                    this.stepFormGroup.controls['traffic_record_summary_sheet'].setValue(data.parameters.filter((item: any) => item.id === 'traffic_record_summary_sheet')[0].value);
                 }),
                 exhaustMap(() => this.http.get('../rest/authenticationInformations')),
                 tap((data: any) => {
@@ -79,6 +81,11 @@ export class ParametersCustomizationComponent implements OnInit, OnDestroy {
                             debounceTime(1000),
                             tap(() => this.saveParameter('loginpage_message'))
                         ).subscribe();
+
+                        this.stepFormGroup.controls['traffic_record_summary_sheet'].valueChanges.pipe(
+                            debounceTime(1000),
+                            tap(() => this.saveParameter('traffic_record_summary_sheet'))
+                        ).subscribe();
                         this.initMce();
                     }, 0);
                 }),
@@ -103,7 +110,7 @@ export class ParametersCustomizationComponent implements OnInit, OnDestroy {
                 });
             },
             base_url: '../node_modules/tinymce/',
-            height: '150',
+            height: '200',
             suffix: '.min',
             language: this.translate.instant('lang.langISO').replace('-', '_'),
             language_url: `../node_modules/tinymce-i18n/langs/${this.translate.instant('lang.langISO').replace('-', '_')}.js`,
@@ -111,14 +118,15 @@ export class ParametersCustomizationComponent implements OnInit, OnDestroy {
             statusbar: false,
             readonly: readonly,
             plugins: [
-                'autolink'
+                'autolink', 'table'
             ],
             external_plugins: {
                 'maarch_b64image': '../../src/frontend/plugins/tinymce/maarch_b64image/plugin.min.js'
             },
+            table_toolbar: '',
             toolbar_sticky: true,
             toolbar_drawer: 'floating',
-            toolbar: !readonly ? 'undo redo | fontselect fontsizeselect | bold italic underline strikethrough forecolor | maarch_b64image | \
+            toolbar: !readonly ? 'undo redo | fontselect fontsizeselect | bold italic underline strikethrough forecolor | table maarch_b64image | \
         alignleft aligncenter alignright alignjustify \
         bullist numlist outdent indent | removeformat' : ''
         });
diff --git a/src/frontend/app/administration/parameter/parameters-administration.component.ts b/src/frontend/app/administration/parameter/parameters-administration.component.ts
index f69dd0722f8..94317754513 100755
--- a/src/frontend/app/administration/parameter/parameters-administration.component.ts
+++ b/src/frontend/app/administration/parameter/parameters-administration.component.ts
@@ -16,8 +16,6 @@ export class ParametersAdministrationComponent implements OnInit {
 
     @ViewChild('adminMenuTemplate', { static: true }) adminMenuTemplate: TemplateRef<any>;
 
-    
-
     parameters: any = {};
 
     loading: boolean = false;
@@ -48,7 +46,7 @@ export class ParametersAdministrationComponent implements OnInit {
 
         this.http.get('../rest/parameters')
             .subscribe((data: any) => {
-                this.parameters = data.parameters.filter((item: any) => ['homepage_message', 'loginpage_message'].indexOf(item.id) === -1);
+                this.parameters = data.parameters.filter((item: any) => ['homepage_message', 'loginpage_message', 'traffic_record_summary_sheet'].indexOf(item.id) === -1);
                 this.loading = false;
                 setTimeout(() => {
                     this.adminService.setDataSource('admin_parameters', this.parameters, this.sort, this.paginator, this.filterColumns);
@@ -62,7 +60,7 @@ export class ParametersAdministrationComponent implements OnInit {
         if (r) {
             this.http.delete('../rest/parameters/' + paramId)
                 .subscribe((data: any) => {
-                    this.parameters = data.parameters.filter((item: any) => ['homeMessage', 'loginMessage'].indexOf(item) === -1);
+                    this.parameters = data.parameters.filter((item: any) => ['homepage_message', 'loginpage_message', 'traffic_record_summary_sheet'].indexOf(item) === -1);
                     this.adminService.setDataSource('admin_parameters', this.parameters, this.sort, this.paginator, this.filterColumns);
                     this.notify.success(this.translate.instant('lang.parameterDeleted'));
                 }, (err) => {
diff --git a/src/frontend/app/list/summarySheet/summary-sheet.component.html b/src/frontend/app/list/summarySheet/summary-sheet.component.html
index 3c0668d9d85..1958e8a7be9 100755
--- a/src/frontend/app/list/summarySheet/summary-sheet.component.html
+++ b/src/frontend/app/list/summarySheet/summary-sheet.component.html
@@ -46,10 +46,14 @@
                                         (click)="$event.stopPropagation();">
                                 </mat-form-field>
                             </div>
-                            <div class="row" class="unitData" (click)="item.enabled = !item.enabled">
+                            <div class="row" class="unitData" (click)="item.enabled = !item.enabled" *ngIf="!functions.empty(item.desc)">
                                 <div class="{{item.css}}" *ngFor="let itemData of item.desc">
                                     {{itemData}}
                                 </div>
+                            </div><br>
+                            <div class="row" class="unitData" (click)="item.enabled = !item.enabled" *ngIf="item.advanced_desc">
+                                <textarea  style="padding-top: 10px;" name="traffic_record_summary_sheet" id="traffic_record_summary_sheet"
+                                    [value]="item.advanced_desc"></textarea>
                             </div>
                             <mat-slide-toggle [(ngModel)]="item.enabled" color="primary" class="unitToggle">
                             </mat-slide-toggle>
diff --git a/src/frontend/app/list/summarySheet/summary-sheet.component.scss b/src/frontend/app/list/summarySheet/summary-sheet.component.scss
index 5fc2012fe61..19f2d9b729e 100644
--- a/src/frontend/app/list/summarySheet/summary-sheet.component.scss
+++ b/src/frontend/app/list/summarySheet/summary-sheet.component.scss
@@ -70,7 +70,7 @@
 
 .columns {
     width: 100%;
-    height: 90px;
+    // height: 90px;
     padding: 20px 10px;
     border-bottom: solid 1px #ccc;
     color: rgba(0, 0, 0, 0.87);
diff --git a/src/frontend/app/list/summarySheet/summary-sheet.component.ts b/src/frontend/app/list/summarySheet/summary-sheet.component.ts
index c77e7c0ce40..d3e6fe5b47e 100644
--- a/src/frontend/app/list/summarySheet/summary-sheet.component.ts
+++ b/src/frontend/app/list/summarySheet/summary-sheet.component.ts
@@ -5,6 +5,9 @@ import { NotificationService } from '../../../service/notification/notification.
 import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';
 import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
 import { FunctionsService } from '../../../service/functions.service';
+import { tap } from 'rxjs/operators';
+
+declare var tinymce: any;
 
 @Component({
     templateUrl: 'summary-sheet.component.html',
@@ -12,11 +15,8 @@ import { FunctionsService } from '../../../service/functions.service';
 })
 export class SummarySheetComponent implements OnInit {
 
-    
     loading: boolean = false;
-
     withQrcode: boolean = true;
-
     paramMode: boolean = false;
 
     dataAvailable: any[] = [
@@ -106,6 +106,14 @@ export class SummarySheetComponent implements OnInit {
                 this.translate.instant('lang.content')
             ],
             enabled: true
+        },
+        {
+            id: 'trafficRecords',
+            unit: 'trafficRecords',
+            label: this.translate.instant('lang.trafficRecordSummarySheet'),
+            css: 'col-md-4 text-center',
+            desc: [],
+            enabled: true
         }
     ];
 
@@ -119,6 +127,39 @@ export class SummarySheetComponent implements OnInit {
 
     ngOnInit(): void {
         this.paramMode = !this.functions.empty(this.data.paramMode);
+        this.http.get('../rest/parameters').pipe(
+            tap((data: any) => {
+                const trafficRecordsInfo = data.parameters.filter((item: any) => ('traffic_record_summary_sheet' === item.id && !this.functions.empty(item.param_value_string)));
+                if (trafficRecordsInfo.length === 0) {
+                    this.dataAvailable = this.dataAvailable.filter((item: any) => item.id !== 'trafficRecords');
+                } else {
+                    this.dataAvailable = this.dataAvailable.map((item: any) => {
+                        if (item.id === 'trafficRecords') {
+                            item.advanced_desc = trafficRecordsInfo[0].param_value_string;
+                        }
+                        return item;
+                    });
+                    setTimeout(() => {
+                        this.initMce();
+                    });
+                }
+            })
+        ).subscribe();
+    }
+
+    initMce() {
+        tinymce.init({
+            selector: 'textarea',
+            base_url: '../node_modules/tinymce/',
+            height: '200',
+            suffix: '.min',
+            language: this.translate.instant('lang.langISO').replace('-', '_'),
+            language_url: `../node_modules/tinymce-i18n/langs/${this.translate.instant('lang.langISO').replace('-', '_')}.js`,
+            menubar: false,
+            statusbar: false,
+            readonly: true,
+            toolbar: ''
+        });
     }
 
     drop(event: CdkDragDrop<string[]>) {
diff --git a/src/lang/lang-en.json b/src/lang/lang-en.json
index ac7a1390797..fe8b7d10136 100644
--- a/src/lang/lang-en.json
+++ b/src/lang/lang-en.json
@@ -1757,6 +1757,8 @@
     "stepInstanceActionDesc": "Instance initialization",
     "loginMsg": "Message on the login screen",
     "homeMsg": "Message on the home screen",
+    "trafficRecordSummarySheetParameters": "Traffic record module for summary sheet",
+    "trafficRecordSummarySheet": "Traffic records module",
     "chooseLoginBg": "Choose the login screen wallpaper",
     "stepCustomization_desc": "Maarch Courrier allows you to customize your application to integrate it perfectly into your work environment.",
     "userAdmin": "Root user",
diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json
index e9b9c41ab3b..7a214e3e5a6 100644
--- a/src/lang/lang-fr.json
+++ b/src/lang/lang-fr.json
@@ -1785,6 +1785,8 @@
     "applicationName": "Nom de l'application",
     "loginMsg": "Message à l'écran de connexion",
     "homeMsg": "Message à l'écran d'accueil",
+    "trafficRecordSummarySheetParameters": "Module circulation pour la fiche de liaison",
+    "trafficRecordSummarySheet": "Module de circulation",
     "chooseLoginBg": "Choisissez le fond d'écran de l'écran de connexion",
     "customization": "Personnalisation",
     "stepCustomization_desc": "Maarch Courrier vous permet de personnaliser votre application afin de l'intégrer parfaitement à votre environnement de travail.",
-- 
GitLab