From c8ee87e98187c2246014cd065324cc0eecef0719 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Fri, 23 Oct 2020 16:21:09 +0200
Subject: [PATCH] FEAT #15049 TIME 1:10 test export seda + download package

---
 .../controllers/ExportSEDATrait.php           | 54 +++++++++++++------
 .../controllers/MaarchParapheurController.php | 21 +++++++-
 .../send-to-record-management.component.html  |  4 +-
 .../send-to-record-management.component.ts    | 39 +++++++++++---
 4 files changed, 91 insertions(+), 27 deletions(-)

diff --git a/src/app/external/exportSeda/controllers/ExportSEDATrait.php b/src/app/external/exportSeda/controllers/ExportSEDATrait.php
index 3d3a57eba0e..f7ce65c450c 100644
--- a/src/app/external/exportSeda/controllers/ExportSEDATrait.php
+++ b/src/app/external/exportSeda/controllers/ExportSEDATrait.php
@@ -21,8 +21,10 @@ use Entity\models\EntityModel;
 use Entity\models\ListInstanceModel;
 use ExportSeda\controllers\ExportSEDATrait;
 use ExportSeda\controllers\SedaController;
+use ExportSeda\models\AbstractMessage;
 use Folder\models\FolderModel;
 use History\models\HistoryModel;
+use IndexingModel\models\IndexingModelFieldModel;
 use MessageExchange\models\MessageExchangeModel;
 use Note\controllers\NoteController;
 use Resource\controllers\StoreController;
@@ -31,11 +33,10 @@ use Resource\models\ResModel;
 use setasign\Fpdi\Tcpdf\Fpdi;
 use SrcCore\models\CoreConfigModel;
 use SrcCore\models\CurlModel;
+
 use SrcCore\models\ValidatorModel;
 use User\models\UserModel;
 
-use ExportSeda\models\AbstractMessage;
-
 trait ExportSEDATrait
 {
     public static function sendToRecordManagement(array $args)
@@ -166,18 +167,22 @@ trait ExportSEDATrait
         }
 
         $messageSaved = ExportSEDATrait::saveMessage(['messageObject' => $sedaPackage['messageObject']]);
-        $elementSend  = ExportSEDATrait::sendSedaPackage([
-            'messageId'       => $messageSaved['messageId'],
-            'config'          => $config,
-            'encodedFilePath' => $sedaPackage['encodedFilePath'],
-            'messageFilename' => $sedaPackage['messageFilename'],
-            'resId'           => $resource['res_id']
-        ]);
-        if (!empty($elementSend['errors'])) {
-            return ['errors' => [$elementSend['errors']]];
+        if ($args['data']['actionMode'] == 'download') {
+            return ['data' => ['encodedFile' => base64_encode(file_get_contents($sedaPackage['encodedFilePath']))]];
+        } else {
+            $elementSend  = ExportSEDATrait::sendSedaPackage([
+                'messageId'       => $messageSaved['messageId'],
+                'config'          => $config,
+                'encodedFilePath' => $sedaPackage['encodedFilePath'],
+                'messageFilename' => $sedaPackage['messageFilename'],
+                'resId'           => $resource['res_id']
+            ]);
+            if (!empty($elementSend['errors'])) {
+                return ['errors' => [$elementSend['errors']]];
+            }
+    
+            return true;
         }
-
-        return true;
     }
 
     public static function sendSedaPackage($args = [])
@@ -368,7 +373,6 @@ trait ExportSEDATrait
         $units[] = ['unit' => 'diffusionList',               'label' => _DIFFUSION_LIST];
         $units[] = ['unit' => 'visaWorkflow',                'label' => _VISA_WORKFLOW];
         $units[] = ['unit' => 'opinionWorkflow',             'label' => _AVIS_WORKFLOW];
-        $units[] = ['unit' => 'notes',                       'label' => _NOTES_COMMENT];
         
         $tmpIds = [$args['resId']];
         $data   = [];
@@ -403,12 +407,30 @@ trait ExportSEDATrait
             'data'   => [$args['resId']]
         ]);
 
+        $modelId = ResModel::getById([
+            'select' => ['model_id'],
+            'resId'  => $args['resId']
+        ]);
+        $indexingFields = IndexingModelFieldModel::get([
+            'select' => ['identifier', 'unit'],
+            'where'  => ['model_id = ?'],
+            'data'   => [$modelId['model_id']]
+        ]);
+        $fieldsIdentifier = array_column($indexingFields, 'identifier');
+
         $pdf = new Fpdi('P', 'pt');
         $pdf->setPrintHeader(false);
-        SummarySheetController::createSummarySheet($pdf, ['resource' => $mainResource[0], 'units' => $units, 'login' => $GLOBALS['login'], 'data' => $data]);
+
+        SummarySheetController::createSummarySheet($pdf, [
+            'resource'         => $mainResource[0],
+            'units'            => $units,
+            'login'            => $GLOBALS['login'],
+            'data'             => $data,
+            'fieldsIdentifier' => $fieldsIdentifier
+        ]);
 
         $tmpPath = CoreConfigModel::getTmpPath();
-        $summarySheetFilePath = $tmpPath . "summarySheet_".$args['resId'] . "_" . $aArgs['userId'] . "_" . rand() . ".pdf";
+        $summarySheetFilePath = $tmpPath . "summarySheet_".$args['resId'] . "_" . $GLOBALS['id'] . "_" . rand() . ".pdf";
         $pdf->Output($summarySheetFilePath, 'F');
 
         return ['filePath' => $summarySheetFilePath];
diff --git a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
index 4e78e6e4fa0..11f7ca36aa6 100755
--- a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
+++ b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
@@ -23,6 +23,7 @@ use Docserver\models\DocserverTypeModel;
 use Entity\models\EntityModel;
 use Entity\models\ListInstanceModel;
 use History\controllers\HistoryController;
+use IndexingModel\models\IndexingModelFieldModel;
 use Note\models\NoteModel;
 use Priority\models\PriorityModel;
 use Resource\controllers\ResController;
@@ -142,9 +143,27 @@ class MaarchParapheurController
             }
         }
 
+        $modelId = ResModel::getById([
+            'select' => ['model_id'],
+            'resId'  => $aArgs['resIdMaster']
+        ]);
+        $indexingFields = IndexingModelFieldModel::get([
+            'select' => ['identifier', 'unit'],
+            'where'  => ['model_id = ?'],
+            'data'   => [$modelId['model_id']]
+        ]);
+        $fieldsIdentifier = array_column($indexingFields, 'identifier');
+
         $pdf = new Fpdi('P', 'pt');
         $pdf->setPrintHeader(false);
-        SummarySheetController::createSummarySheet($pdf, ['resource' => $mainResource[0], 'units' => $units, 'login' => $aArgs['userId'], 'data' => $data]);
+
+        SummarySheetController::createSummarySheet($pdf, [
+            'resource'         => $mainResource[0],
+            'units'            => $units,
+            'login'            => $aArgs['userId'],
+            'data'             => $data,
+            'fieldsIdentifier' => $fieldsIdentifier
+        ]);
 
         $tmpPath = CoreConfigModel::getTmpPath();
         $summarySheetFilePath = $tmpPath . "summarySheet_".$aArgs['resIdMaster'] . "_" . $aArgs['userId'] ."_".rand().".pdf";
diff --git a/src/frontend/app/actions/send-to-record-management-action/send-to-record-management.component.html b/src/frontend/app/actions/send-to-record-management-action/send-to-record-management.component.html
index 94a67f8dc4b..fc9c93d2a66 100644
--- a/src/frontend/app/actions/send-to-record-management-action/send-to-record-management.component.html
+++ b/src/frontend/app/actions/send-to-record-management-action/send-to-record-management.component.html
@@ -153,9 +153,9 @@
     <span class="divider-modal"></span>
     <div mat-dialog-actions class="actions">
         <button mat-raised-button mat-button color="primary" [disabled]="loading || !this.actionFormGroup.valid"
-            (click)="onSubmit()">{{'lang.validate' | translate}}</button>
+            (click)="onSubmit('send')">{{'lang.send' | translate}}</button>
         <button mat-raised-button mat-button color="primary" [disabled]="loading || !this.actionFormGroup.valid"
-            (click)="onSubmit()">{{'lang.download' | translate}}</button>
+            (click)="onSubmit('download')">{{'lang.download' | translate}}</button>
         <button mat-raised-button mat-button [disabled]="loading"
             [mat-dialog-close]="">{{'lang.cancel' | translate}}</button>
     </div>
diff --git a/src/frontend/app/actions/send-to-record-management-action/send-to-record-management.component.ts b/src/frontend/app/actions/send-to-record-management-action/send-to-record-management.component.ts
index f2cc941a53c..594ca4808f7 100644
--- a/src/frontend/app/actions/send-to-record-management-action/send-to-record-management.component.ts
+++ b/src/frontend/app/actions/send-to-record-management-action/send-to-record-management.component.ts
@@ -143,26 +143,48 @@ export class SendToRecordManagementComponent implements OnInit {
                 } else {
                     this.resourcesErrors.push(err.error.errors);
                 }
-                // this.notify.handleErrors(err);
                 return of(false);
             })
         ).subscribe();
     }
 
-    onSubmit() {
+    onSubmit(mode: string) {
         this.loading = true;
-        this.formatData();
         if (this.data.resIds.length > 0) {
-            this.executeAction();
+            this.executeAction(mode);
         }
     }
 
-    executeAction() {
+    executeAction(mode: string) {
         const realResSelected: number[] = this.data.resIds;
 
-        this.http.put(this.data.processActionRoute, { resources: realResSelected, data: this.formatData() }).pipe(
+        this.http.put(this.data.processActionRoute, { resources: realResSelected, data: this.formatData(mode) }).pipe(
             tap((data: any) => {
-                if (!data) {
+                if (mode === 'download' && !this.functions.empty(data.data.encodedFile)) {
+                    const downloadLink = document.createElement('a');
+                    downloadLink.href = `data:application/zip;base64,${data.data.encodedFile}`;
+                    let today: any;
+                    let dd: any;
+                    let mm: any;
+                    let yyyy: any;
+
+                    today = new Date();
+                    dd = today.getDate();
+                    mm = today.getMonth() + 1;
+                    yyyy = today.getFullYear();
+
+                    if (dd < 10) {
+                        dd = '0' + dd;
+                    }
+                    if (mm < 10) {
+                        mm = '0' + mm;
+                    }
+                    today = dd + '-' + mm + '-' + yyyy;
+                    downloadLink.setAttribute('download', 'seda_package_' + today + '.zip');
+                    document.body.appendChild(downloadLink);
+                    downloadLink.click();
+                    this.dialogRef.close('success');
+                } else if (!data) {
                     this.dialogRef.close('success');
                 }
                 if (data && data.errors != null) {
@@ -177,7 +199,7 @@ export class SendToRecordManagementComponent implements OnInit {
         ).subscribe();
     }
 
-    formatData() {
+    formatData(mode: string) {
         const dataToSend = {};
         Object.keys(this.actionFormGroup.controls).forEach(element => {
             dataToSend[element] = this.actionFormGroup.controls[element].value;
@@ -188,6 +210,7 @@ export class SendToRecordManagementComponent implements OnInit {
                 descriptionLevel : archive.descriptionLevel
             };
         });
+        dataToSend['actionMode'] = mode;
         return dataToSend;
     }
 
-- 
GitLab