From 0b5d7c2416db88eb0a6e9ae16474241d31c44069 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Mon, 23 Nov 2020 16:52:05 +0100
Subject: [PATCH] FEAT #11310 TIME 1:50 retrieve multiple notes from
 maarchParapheur

---
 bin/signatureBook/batch_tools.php             | 35 +++++++++-------
 .../process_mailsFromSignatoryBook.php        |  4 +-
 .../controllers/FastParapheurController.php   |  2 +-
 .../controllers/IParapheurController.php      |  4 +-
 .../controllers/IxbusController.php           |  4 +-
 .../controllers/MaarchParapheurController.php | 42 ++++++++++++-------
 .../controllers/XParaphController.php         |  4 +-
 7 files changed, 56 insertions(+), 39 deletions(-)

diff --git a/bin/signatureBook/batch_tools.php b/bin/signatureBook/batch_tools.php
index 2e841daae39..e298a0dae45 100644
--- a/bin/signatureBook/batch_tools.php
+++ b/bin/signatureBook/batch_tools.php
@@ -140,25 +140,28 @@ function Bt_writeLog($args = [])
     ]);
 }
 
-
 function Bt_createNote($aArgs = [])
 {
-    if (!empty($aArgs['content'])) {
-        $creatorName = '';
-        if (!empty($aArgs['creatorId'])) {
-            $creatorId = $aArgs['creatorId'];
-        } else {
-            $users = \User\models\UserModel::get(['select' => ['id'], 'orderBy' => ["user_id='superadmin' desc"], 'limit' => 1]);
-            $creatorId   = $users[0]['id'];
-        }
-        if (!empty($aArgs['creatorName'])) {
-            $creatorName = $aArgs['creatorName'] . ' (Maarch Parapheur) : ';
+    if (!empty($aArgs['notes'])) {
+        foreach ($aArgs['notes'] as $note) {
+            if (!empty(trim($note['content']))) {
+                $creatorName = '';
+                if (!empty($note['creatorId'])) {
+                    $creatorId = $note['creatorId'];
+                } else {
+                    $users = \User\models\UserModel::get(['select' => ['id'], 'orderBy' => ["user_id='superadmin' desc"], 'limit' => 1]);
+                    $creatorId = $users[0]['id'];
+                }
+                if (!empty($note['creatorName'])) {
+                    $creatorName = $note['creatorName'] . ' (Maarch Parapheur) : ';
+                }
+                \Note\models\NoteModel::create([
+                    'resId'     => $aArgs['resId'],
+                    'user_id'   => $creatorId,
+                    'note_text' => $creatorName . $note['content'],
+                ]);
+            }
         }
-        \Note\models\NoteModel::create([
-            'resId' => $aArgs['resId'],
-            'user_id' => $creatorId,
-            'note_text' => $creatorName . $aArgs['content'],
-        ]);
     }
 }
 
diff --git a/bin/signatureBook/process_mailsFromSignatoryBook.php b/bin/signatureBook/process_mailsFromSignatoryBook.php
index af4a8e7c054..b127b643f69 100755
--- a/bin/signatureBook/process_mailsFromSignatoryBook.php
+++ b/bin/signatureBook/process_mailsFromSignatoryBook.php
@@ -313,7 +313,7 @@ foreach ($retrievedMails['noVersion'] as $resId => $value) {
         $historyInfo = 'La signature de la pièce jointe '.$resId.' (res_attachments) a été refusée dans le parapheur externe' . $additionalHistoryInfo;
     }
     if (in_array($value['status'], ['validated', 'refused'])) {
-        Bt_createNote(['creatorId' => $value['noteCreatorId'], 'creatorName' => $value['noteCreatorName'], 'content' => $value['noteContent'], 'resId' => $value['res_id_master']]);
+        Bt_createNote(['notes' => $value['notes'], 'resId' => $value['res_id_master']]);
         Bt_history([
             'table_name' => 'res_attachments',
             'record_id'  => $resId,
@@ -395,7 +395,7 @@ foreach ($retrievedMails['resLetterbox'] as $resId => $value) {
             'event_type' => 'ACTION#1',
             'event_id'   => '1'
         ]);
-        Bt_createNote(['creatorId' => $value['noteCreatorId'], 'creatorName' => $value['noteCreatorName'], 'content' => $value['noteContent'], 'resId' => $resId]);
+        Bt_createNote(['notes' => $value['notes'], 'resId' => $resId]);
         \Resource\models\ResModel::update([
             'set'     => ['status' => $status],
             'postSet' => ['external_id' => "external_id - 'signatureBookId'"],
diff --git a/src/app/external/externalSignatoryBook/controllers/FastParapheurController.php b/src/app/external/externalSignatoryBook/controllers/FastParapheurController.php
index a40a6d450fb..5d3b611a6d8 100755
--- a/src/app/external/externalSignatoryBook/controllers/FastParapheurController.php
+++ b/src/app/external/externalSignatoryBook/controllers/FastParapheurController.php
@@ -87,7 +87,7 @@ class FastParapheurController
                     $signatoryInfo = FastParapheurController::getSignatoryUserInfo(['resId' => $aArgs['idsToRetrieve'][$version][$resId]['res_id_master']]);
                     $response = FastParapheurController::getRefusalMessage(['config' => $aArgs['config'], 'documentId' => $value['external_id']]);
                     $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refused';
-                    $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $signatoryInfo['lastname'] . ' ' . $signatoryInfo['firstname'] . ' : ' . $response;
+                    $aArgs['idsToRetrieve'][$version][$resId]['notes'][] = ['content' => $signatoryInfo['lastname'] . ' ' . $signatoryInfo['firstname'] . ' : ' . $response];
                     break;
                 } else {
                     $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'waiting';
diff --git a/src/app/external/externalSignatoryBook/controllers/IParapheurController.php b/src/app/external/externalSignatoryBook/controllers/IParapheurController.php
index a372ba103f7..4fc6ffaa95d 100755
--- a/src/app/external/externalSignatoryBook/controllers/IParapheurController.php
+++ b/src/app/external/externalSignatoryBook/controllers/IParapheurController.php
@@ -332,7 +332,7 @@ class IParapheurController
                             $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validated';
                             $aArgs['idsToRetrieve'][$version][$resId]['format'] = 'pdf';
                             $aArgs['idsToRetrieve'][$version][$resId]['encodedFile'] = $response['b64FileContent'];
-                            $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $noteContent;
+                            $aArgs['idsToRetrieve'][$version][$resId]['notes'][] = ['content' => $noteContent];
                             if ($status == $aArgs['config']['data']['signState']) {
                                 IParapheurController::processVisaWorkflow(['res_id_master' => $value['res_id_master'], 'res_id' => $value['res_id'], 'processSignatory' => true]);
                                 break;
@@ -340,7 +340,7 @@ class IParapheurController
                         } elseif ($status == $aArgs['config']['data']['refusedVisa'] || $status == $aArgs['config']['data']['refusedSign']) {
                             $noteContent .= $res->nom . ' : ' . $res->annotation . PHP_EOL;
                             $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refused';
-                            $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $noteContent;
+                            $aArgs['idsToRetrieve'][$version][$resId]['notes'][] = ['content' => $noteContent];
                             break;
                         } else {
                             $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'waiting';
diff --git a/src/app/external/externalSignatoryBook/controllers/IxbusController.php b/src/app/external/externalSignatoryBook/controllers/IxbusController.php
index d168d8520d5..d6f56e168d0 100755
--- a/src/app/external/externalSignatoryBook/controllers/IxbusController.php
+++ b/src/app/external/externalSignatoryBook/controllers/IxbusController.php
@@ -359,7 +359,7 @@ class IxbusController
             if ((string)$etatDossier == $aArgs['config']['data']['ixbusIdEtatRefused']) {
                 $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refused';
                 $notes = IxbusController::getDossier(['config' => $aArgs['config'], 'sessionId' => $sessionId['cookie'], 'dossier_id' => $value['external_id']]);
-                $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = (string)$notes->MotifRefus;
+                $aArgs['idsToRetrieve'][$version][$resId]['notes'][] = ['content' => (string)$notes->MotifRefus];
             // Validated
             } elseif ((string)$etatDossier == $aArgs['config']['data']['ixbusIdEtatValidated']) {
                 $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validated';
@@ -368,7 +368,7 @@ class IxbusController
                 $aArgs['idsToRetrieve'][$version][$resId]['encodedFile'] = (string)$signedDocument->Fichier;
 
                 $notes = IxbusController::getAnnotations(['config' => $aArgs['config'], 'sessionId' => $sessionId['cookie'], 'dossier_id' => $value['external_id']]);
-                $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = (string)$notes->Annotation->Texte;
+                $aArgs['idsToRetrieve'][$version][$resId]['notes'][] = ['content' => (string)$notes->Annotation->Texte];
             } else {
                 unset($aArgs['idsToRetrieve'][$version][$resId]);
             }
diff --git a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
index 11f7ca36aa6..5c07346b648 100755
--- a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
+++ b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
@@ -513,6 +513,9 @@ class MaarchParapheurController
     {
         $version = $aArgs['version'];
         foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) {
+            if (!is_numeric($value['external_id'])) {
+                continue;
+            }
             $documentWorkflow = MaarchParapheurController::getDocumentWorkflow(['config' => $aArgs['config'], 'documentId' => $value['external_id']]);
             if (!is_array($documentWorkflow)) {
                 unset($aArgs['idsToRetrieve'][$version][$resId]);
@@ -533,23 +536,25 @@ class MaarchParapheurController
                 } elseif ($state['status'] == 'refused' && $state['mode'] == 'note') {
                     $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refusedNote';
                 }
-                if (!empty($state['note'])) {
-                    $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $state['note'];
+                foreach ($state['notes'] as $note) {
+                    $tmpNote = [];
+                    $tmpNote['content'] = $note['content'];
                     $userInfos = UserModel::getByExternalId([
-                        'select'            => ['id', 'firstname', 'lastname'],
-                        'externalId'        => $state['noteCreatorId'],
-                        'externalName'      => 'maarchParapheur'
+                        'select'       => ['id', 'firstname', 'lastname'],
+                        'externalId'   => $note['creatorId'],
+                        'externalName' => 'maarchParapheur'
                     ]);
                     if (!empty($userInfos)) {
-                        $aArgs['idsToRetrieve'][$version][$resId]['noteCreatorId'] = $userInfos['id'];
+                        $tmpNote['creatorId'] = $userInfos['id'];
                     }
-                    $aArgs['idsToRetrieve'][$version][$resId]['noteCreatorName'] = $state['noteCreatorName'];
+                    $tmpNote['creatorName'] = $note['creatorName'];
+                    $aArgs['idsToRetrieve'][$version][$resId]['notes'][] = $tmpNote;
                 }
                 if (!empty($state['signatoryUserId'])) {
                     $signatoryUser = UserModel::getByExternalId([
-                        'select'            => ['user_id', 'id'],
-                        'externalId'        => $state['signatoryUserId'],
-                        'externalName'      => 'maarchParapheur'
+                        'select'       => ['user_id', 'id'],
+                        'externalId'   => $state['signatoryUserId'],
+                        'externalName' => 'maarchParapheur'
                     ]);
                     if (!empty($signatoryUser['user_id'])) {
                         $aArgs['idsToRetrieve'][$version][$resId]['typist'] = $signatoryUser['user_id'];
@@ -592,9 +597,17 @@ class MaarchParapheurController
 
     public static function getState($aArgs)
     {
-        $state['status'] = 'validated';
+        $state['status']       = 'validated';
         $state['workflowInfo'] = [];
+        $state['notes']        = [];
         foreach ($aArgs['workflow'] as $step) {
+            if (!empty($step['note'])) {
+                $state['notes'][] = [
+                    'content'     => $step['note'],
+                    'creatorId'   => $step['userId'],
+                    'creatorName' => $step['userDisplay']
+                ];
+            }
             if ($step['status'] == 'VAL' && $step['mode'] == 'sign') {
                 $state['workflowInfo'][] = $step['userDisplay'] . ' (Signé le ' . $step['processDate'] . ')';
                 $state['signatoryUserId'] = $step['userId'];
@@ -603,11 +616,12 @@ class MaarchParapheurController
             }
             if ($step['status'] == 'REF') {
                 $state['status']          = 'refused';
-                $state['note']            = $step['note'];
-                $state['noteCreatorId']   = $step['userId'];
-                $state['noteCreatorName'] = $step['userDisplay'];
                 $state['workflowInfo'][]  = $step['userDisplay'] . ' (Refusé le ' . $step['processDate'] . ')';
                 break;
+            } elseif ($step['status'] == 'STOP') {
+                $state['status']         = 'refused';
+                $state['workflowInfo'][] = $step['userDisplay'] . ' (Interrompu le ' . $step['processDate'] . ')';
+                break;
             } elseif (empty($step['status'])) {
                 $state['status'] = 'inProgress';
                 break;
diff --git a/src/app/external/externalSignatoryBook/controllers/XParaphController.php b/src/app/external/externalSignatoryBook/controllers/XParaphController.php
index 612906b2f58..d4398afab06 100755
--- a/src/app/external/externalSignatoryBook/controllers/XParaphController.php
+++ b/src/app/external/externalSignatoryBook/controllers/XParaphController.php
@@ -421,7 +421,7 @@ class XParaphController
 
                 if ($state['id'] == 'refused') {
                     $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refused';
-                    $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $state['note'];
+                    $aArgs['idsToRetrieve'][$version][$resId]['notes'][] = ['content' => $state['note']];
 
                     $processedFile = XParaphController::getFile(['config' => $aArgs['config'], 'depotId' => $value['external_id'], 'userGeneric' => $userGeneric, 'depotLogin' => $xParaphDepot['login']]);
                     if (!empty($processedFile['errors'])) {
@@ -472,7 +472,7 @@ class XParaphController
                     unlink($tmpPath . $tmpName);
 
                     $aArgs['idsToRetrieve'][$version][$resId]['encodedFile'] = $encodedFile;
-                    $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $state['note'];
+                    $aArgs['idsToRetrieve'][$version][$resId]['notes'][] = ['content' => $state['note']];
                     if ($state['id'] == 'validateOnlyVisa') {
                         $aArgs['idsToRetrieve'][$version][$resId]['onlyVisa'] = true;
                     }
-- 
GitLab