From 5ad258ee704081bffb678c46a4e71ccfb2710d20 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Fri, 17 May 2019 13:33:54 +0100
Subject: [PATCH] FEAT #8391 TIME 1 End connection with xParaph

---
 .../batch/process_mailsFromSignatoryBook.php  |  2 +-
 .../controllers/XParaphController.php         | 43 ++++++++++++++-----
 2 files changed, 33 insertions(+), 12 deletions(-)

diff --git a/modules/visa/batch/process_mailsFromSignatoryBook.php b/modules/visa/batch/process_mailsFromSignatoryBook.php
index bb0b4b83781..0a6c72d0e44 100755
--- a/modules/visa/batch/process_mailsFromSignatoryBook.php
+++ b/modules/visa/batch/process_mailsFromSignatoryBook.php
@@ -230,7 +230,7 @@ if (file_exists($GLOBALS['errorLckFile'])) {
 Bt_getWorkBatch();
 
 $GLOBALS['logger']->write('Retrieve attachments sent to remote signatory book', 'INFO');
-$query = "SELECT res_id, res_id_version, external_id->>'signatureBookId' as external_id, external_id->>'xparaphDepot', format, res_id_master, title, identifier, type_id, attachment_type, dest_contact_id, dest_address_id, dest_user, typist, attachment_id_master, relation 
+$query = "SELECT res_id, res_id_version, external_id->>'signatureBookId' as external_id, external_id->>'xparaphDepot' as xparaphdepot, format, res_id_master, title, identifier, type_id, attachment_type, dest_contact_id, dest_address_id, dest_user, typist, attachment_id_master, relation 
         FROM res_view_attachments WHERE status = 'FRZ' AND external_id->>'signatureBookId' IS NOT NULL AND external_id->>'signatureBookId' <> ''";
 $stmt = $GLOBALS['db']->query($query, []);
     
diff --git a/src/app/external/externalSignatoryBook/controllers/XParaphController.php b/src/app/external/externalSignatoryBook/controllers/XParaphController.php
index 80818c8157f..95e75fa9ac2 100755
--- a/src/app/external/externalSignatoryBook/controllers/XParaphController.php
+++ b/src/app/external/externalSignatoryBook/controllers/XParaphController.php
@@ -42,11 +42,21 @@ class XParaphController
         $attachmentToFreeze = [];
 
         $userGeneric = [];
-        foreach ($aArgs['config']['data']['userGeneric'] as $userGenericXml) {
-            if ($userGenericXml->siret == $aArgs['info']['siret']) {
-                $userGeneric = (array)$userGenericXml;
-                break;
+        if (isset($aArgs['config']['data']['userGeneric']->siret)) {
+            if ($aArgs['config']['data']['userGeneric']->siret == $aArgs['info']['siret']) {
+                $userGeneric = (array)$aArgs['config']['data']['userGeneric'];
             }
+        } else {
+            foreach ($aArgs['config']['data']['userGeneric'] as $userGenericXml) {
+                if ($userGenericXml->siret == $aArgs['info']['siret']) {
+                    $userGeneric = (array)$userGenericXml;
+                    break;
+                }
+            }
+        }
+
+        if (empty($userGeneric)) {
+            return ['error' => 'No user generic for this siret'];
         }
 
         foreach ($attachments as $value) {
@@ -308,6 +318,9 @@ class XParaphController
                     break;
                 }
             }
+            if (empty($userGeneric)) {
+                return $response->withStatus(403)->withJson(['error' => 'No user generic for this siret']);
+            }
         } else {
             return $response->withStatus(403)->withJson(['errors' => 'xParaph is not enabled']);
         }
@@ -372,17 +385,24 @@ class XParaphController
         foreach (['noVersion', 'isVersion'] as $version) {
             $depotsBySiret = [];
             foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) {
-                $externalId = json_decode($value['xparaphDepot'], true);
+                $externalId = json_decode($value->xparaphdepot, true);
                 $depotsBySiret[$externalId['siret']][$value->external_id] = ['resId' => $resId, 'login' => $externalId['login']];
             }
 
             foreach ($depotsBySiret as $siret => $depotids) {
-                foreach ($aArgs['config']['userGeneric'] as $userGenericXml) {
-                    if ($userGenericXml['siret'] == $siret) {
-                        $userGeneric = $userGenericXml;
-                        break;
+                if (isset($aArgs['config']['data']['userGeneric']->siret)) {
+                    if ($aArgs['config']['data']['userGeneric']->siret == $siret) {
+                        $userGeneric = (array)$aArgs['config']['data']['userGeneric'];
+                    }
+                } else {
+                    foreach ($aArgs['config']['data']['userGeneric'] as $userGenericXml) {
+                        if ($userGenericXml->siret == $siret) {
+                            $userGeneric = (array)$userGenericXml;
+                            break;
+                        }
                     }
                 }
+
                 if (!empty($depotids)) {
                     $avancements = XParaphController::getAvancement(['config' => $aArgs['config'], 'depotsIds' => $depotids, 'userGeneric' => $userGeneric]);
                 } else {
@@ -391,6 +411,7 @@ class XParaphController
                 }
     
                 foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) {
+                    $xParaphDepot = json_decode($value->xparaphdepot, true);
                     $avancement = $avancements[$value->external_id];
     
                     $state = XParaphController::getState(['avancement' => $avancement]);
@@ -399,7 +420,7 @@ class XParaphController
                         $aArgs['idsToRetrieve'][$version][$resId]->status = 'refused';
                         $aArgs['idsToRetrieve'][$version][$resId]->noteContent = $state['note'];
     
-                        $processedFile = XParaphController::getFile(['config' => $aArgs['config'], 'depotId' => $value->external_id, 'userGeneric' => $userGeneric, 'depotLogin' => $depotids['login']]);
+                        $processedFile = XParaphController::getFile(['config' => $aArgs['config'], 'depotId' => $value->external_id, 'userGeneric' => $userGeneric, 'depotLogin' => $xParaphDepot['login']]);
                         if (!empty($processedFile['errors'])) {
                             unset($aArgs['idsToRetrieve'][$version][$resId]);
                             continue;
@@ -421,7 +442,7 @@ class XParaphController
     
                         $aArgs['idsToRetrieve'][$version][$resId]->log = $log;
                     } elseif ($state['id'] == 'validateSignature' || $state['id'] == 'validateOnlyVisa') {
-                        $processedFile = XParaphController::getFile(['config' => $aArgs['config'], 'depotId' => $value->external_id]);
+                        $processedFile = XParaphController::getFile(['config' => $aArgs['config'], 'depotId' => $value->external_id, 'userGeneric' => $userGeneric, 'depotLogin' => $xParaphDepot['login']]);
                         if (!empty($processedFile['errors'])) {
                             unset($aArgs['idsToRetrieve'][$version][$resId]);
                             continue;
-- 
GitLab