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