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é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