diff --git a/bin/notification/process_email_stack.php b/bin/notification/process_email_stack.php index d280c3bc422491b52a11465264dcb2f77913bd64..ab5ff2ee964bb90971e2b2aceb354609c418cb66 100644 --- a/bin/notification/process_email_stack.php +++ b/bin/notification/process_email_stack.php @@ -118,7 +118,7 @@ while ($state <> 'END') { 'recordId' => 'email', 'eventType' => 'ERROR', 'eventId' => 'sendEmail', - 'userId' => $user['id'], + 'userId' => $user[0]['id'], 'info' => $str ]); } diff --git a/modules/visa/batch/batch_tools.php b/modules/visa/batch/batch_tools.php index 7de898d9fb6961f7e8702df70e5c8432a7c60fa0..530de0483e84e9bc87c3b85470d5bf8a0eb3dbdc 100755 --- a/modules/visa/batch/batch_tools.php +++ b/modules/visa/batch/batch_tools.php @@ -81,7 +81,7 @@ function Bt_history($aArgs = []) 'recordId' => $aArgs['record_id'], 'eventType' => $aArgs['event_type'], 'eventId' => $aArgs['event_id'], - 'userId' => $user['id'], + 'userId' => $user[0]['id'], 'info' => $aArgs['info'] ]); } @@ -149,7 +149,7 @@ function Bt_createNote($aArgs = []) $creatorId = $aArgs['creatorId']; } else { $users = \User\models\UserModel::get(['select' => ['id'], 'orderBy' => ["user_id='superadmin' desc"], 'limit' => 1]); - $creatorId = $users['id']; + $creatorId = $users[0]['id']; } if (!empty($aArgs['creatorName'])) { $creatorName = $aArgs['creatorName'] . ' (Maarch Parapheur) : '; diff --git a/modules/visa/batch/process_mailsFromSignatoryBook.php b/modules/visa/batch/process_mailsFromSignatoryBook.php index 700240e93e575e56e317cef0fd07fd408be0a5ce..4379646b2a50f76d9526735d82ff22296c919812 100755 --- a/modules/visa/batch/process_mailsFromSignatoryBook.php +++ b/modules/visa/batch/process_mailsFromSignatoryBook.php @@ -164,15 +164,15 @@ foreach ($attachments as $value) { // On récupère les pj signés dans le parapheur distant Bt_writeLog(['level' => 'INFO', 'message' => 'Retrieve signed/annotated documents from remote signatory book']); if ($configRemoteSignatoryBook['id'] == 'ixbus') { - $retrievedMails = \ExternalSignatoryBook\controllers\IxbusController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve]); + $retrievedMails = \ExternalSignatoryBook\controllers\IxbusController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve, 'version' => 'noVersion']); } elseif ($configRemoteSignatoryBook['id'] == 'iParapheur') { - $retrievedMails = \ExternalSignatoryBook\controllers\IParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve]); + $retrievedMails = \ExternalSignatoryBook\controllers\IParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve, 'version' => 'noVersion']); } elseif ($configRemoteSignatoryBook['id'] == 'fastParapheur') { - $retrievedMails = \ExternalSignatoryBook\controllers\FastParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve]); + $retrievedMails = \ExternalSignatoryBook\controllers\FastParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve, 'version' => 'noVersion']); } elseif ($configRemoteSignatoryBook['id'] == 'maarchParapheur') { - $retrievedMails = \ExternalSignatoryBook\controllers\MaarchParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve]); + $retrievedMails = \ExternalSignatoryBook\controllers\MaarchParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve, 'version' => 'noVersion']); } elseif ($configRemoteSignatoryBook['id'] == 'xParaph') { - $retrievedMails = \ExternalSignatoryBook\controllers\XParaphController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve]); + $retrievedMails = \ExternalSignatoryBook\controllers\XParaphController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve, 'version' => 'noVersion']); } Bt_writeLog(['level' => 'INFO', 'message' => 'Retrieve mails sent to remote signatory book']); @@ -187,13 +187,13 @@ foreach ($resources as $value) { if (!empty($idsToRetrieve['resLetterbox'])) { if ($configRemoteSignatoryBook['id'] == 'maarchParapheur') { - $retrievedLetterboxMails = \ExternalSignatoryBook\controllers\MaarchParapheurController::retrieveSignedMails(['config' => $configRemoteNoteBook, 'idsToRetrieve' => $idsToRetrieve]); + $retrievedLetterboxMails = \ExternalSignatoryBook\controllers\MaarchParapheurController::retrieveSignedMails(['config' => $configRemoteNoteBook, 'idsToRetrieve' => $idsToRetrieve, 'version' => 'resLetterbox']); } elseif ($configRemoteSignatoryBook['id'] == 'fastParapheur') { - $retrievedLetterboxMails = \ExternalSignatoryBook\controllers\FastParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve]); + $retrievedLetterboxMails = \ExternalSignatoryBook\controllers\FastParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve, 'version' => 'resLetterbox']); } elseif ($configRemoteSignatoryBook['id'] == 'iParapheur') { - $retrievedLetterboxMails = \ExternalSignatoryBook\controllers\IParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve]); + $retrievedLetterboxMails = \ExternalSignatoryBook\controllers\IParapheurController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve, 'version' => 'resLetterbox']); } elseif ($configRemoteSignatoryBook['id'] == 'ixbus') { - $retrievedLetterboxMails = \ExternalSignatoryBook\controllers\IxbusController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve]); + $retrievedLetterboxMails = \ExternalSignatoryBook\controllers\IxbusController::retrieveSignedMails(['config' => $configRemoteSignatoryBook, 'idsToRetrieve' => $idsToRetrieve, 'version' => 'resLetterbox']); } $retrievedMails['resLetterbox'] = $retrievedLetterboxMails['resLetterbox']; } diff --git a/src/app/external/externalSignatoryBook/controllers/FastParapheurController.php b/src/app/external/externalSignatoryBook/controllers/FastParapheurController.php index 4ecf0336cfc3592c77647bc38c3f5272029e39a7..abf1329ad046e7fee0f029137cf0dae0eca20469 100755 --- a/src/app/external/externalSignatoryBook/controllers/FastParapheurController.php +++ b/src/app/external/externalSignatoryBook/controllers/FastParapheurController.php @@ -18,10 +18,12 @@ namespace ExternalSignatoryBook\controllers; use Attachment\models\AttachmentModel; use Convert\models\AdrModel; use Docserver\models\DocserverModel; +use Entity\models\ListInstanceModel; use Resource\models\ResModel; use SrcCore\models\CoreConfigModel; use SrcCore\models\CurlModel; use SrcCore\models\DatabaseModel; +use User\models\UserModel; /** * @codeCoverageIgnore @@ -30,71 +32,98 @@ class FastParapheurController { public static function retrieveSignedMails($aArgs) { - foreach (['noVersion', 'resLetterbox'] as $version) { - foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { - $xmlPostString = '<?xml version="1.0" encoding="utf-8"?> - <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sei="http://sei.ws.fast.cdc.com/"> - <soapenv:Header/> - <soapenv:Body> - <sei:history> - <documentId>' . $value['external_id'] . '</documentId> - </sei:history> - </soapenv:Body> - </soapenv:Envelope>'; - - $curlReturn = CurlModel::execSOAP([ - 'xmlPostString' => $xmlPostString, - 'url' => $aArgs['config']['data']['url'], - 'options' => [ - CURLOPT_SSLCERT => $aArgs['config']['data']['certPath'], - CURLOPT_SSLCERTPASSWD => $aArgs['config']['data']['certPass'], - CURLOPT_SSLCERTTYPE => $aArgs['config']['data']['certType'] - ] - ]); + $version = $aArgs['version']; + foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { + $xmlPostString = '<?xml version="1.0" encoding="utf-8"?> + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sei="http://sei.ws.fast.cdc.com/"> + <soapenv:Header/> + <soapenv:Body> + <sei:history> + <documentId>' . $value['external_id'] . '</documentId> + </sei:history> + </soapenv:Body> + </soapenv:Envelope>'; - if ($curlReturn['infos']['http_code'] == 404) { - return ['error' => 'Erreur 404 : ' . $curlReturn['raw']]; - } + $curlReturn = CurlModel::execSOAP([ + 'xmlPostString' => $xmlPostString, + 'url' => $aArgs['config']['data']['url'], + 'options' => [ + CURLOPT_SSLCERT => $aArgs['config']['data']['certPath'], + CURLOPT_SSLCERTPASSWD => $aArgs['config']['data']['certPass'], + CURLOPT_SSLCERTTYPE => $aArgs['config']['data']['certType'] + ] + ]); - $isError = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body; - if (!empty($isError ->Fault[0]) && !empty($value['res_id_master'])) { - echo 'PJ n° ' . $resId . ' et document original n° ' . $value['res_id_master'] . ' : ' . (string)$curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault[0]->children()->faultstring . PHP_EOL; - continue; - } elseif (!empty($isError->Fault[0])) { - echo 'Document principal n° ' . $resId . ' : ' . (string)$curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault[0]->children()->faultstring . PHP_EOL; - continue; - } + if ($curlReturn['infos']['http_code'] == 404) { + return ['error' => 'Erreur 404 : ' . $curlReturn['raw']]; + } - $response = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://sei.ws.fast.cdc.com/')->historyResponse->children(); + $isError = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body; + if (!empty($isError ->Fault[0]) && !empty($value['res_id_master'])) { + echo 'PJ n° ' . $resId . ' et document original n° ' . $value['res_id_master'] . ' : ' . (string)$curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault[0]->children()->faultstring . PHP_EOL; + continue; + } elseif (!empty($isError->Fault[0])) { + echo 'Document principal n° ' . $resId . ' : ' . (string)$curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault[0]->children()->faultstring . PHP_EOL; + continue; + } - foreach ($response->return as $res) { // Loop on all steps of the documents (prepared, send to signature, signed etc...) - $state = (string) $res->stateName; - if ($state == $aArgs['config']['data']['validatedState']) { - $response = FastParapheurController::download(['config' => $aArgs['config'], 'documentId' => $value['external_id']]); - $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validated'; - $aArgs['idsToRetrieve'][$version][$resId]['format'] = 'pdf'; - $aArgs['idsToRetrieve'][$version][$resId]['encodedFile'] = $response['b64FileContent']; - break; - } elseif ($state == $aArgs['config']['data']['refusedState']) { - $res = DatabaseModel::select([ - 'select' => ['firstname', 'lastname'], - 'table' => ['listinstance', 'users'], - 'left_join' => ['listinstance.item_id = users.user_id'], - 'where' => ['res_id = ?', 'item_mode = ?'], - 'data' => [$aArgs['idsToRetrieve'][$version][$resId]['res_id_master'], 'sign'] - ])[0]; - - $response = FastParapheurController::getRefusalMessage(['config' => $aArgs['config'], 'documentId' => $value['external_id']]); - $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refused'; - $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $res['lastname'] . ' ' . $res['firstname'] . ' : ' . $response; + $response = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://sei.ws.fast.cdc.com/')->historyResponse->children(); + + foreach ($response->return as $res) { // Loop on all steps of the documents (prepared, send to signature, signed etc...) + $state = (string) $res->stateName; + if ($state == $aArgs['config']['data']['validatedState']) { + $response = FastParapheurController::download(['config' => $aArgs['config'], 'documentId' => $value['external_id']]); + $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validated'; + $aArgs['idsToRetrieve'][$version][$resId]['format'] = 'pdf'; + $aArgs['idsToRetrieve'][$version][$resId]['encodedFile'] = $response['b64FileContent']; + FastParapheurController::processVisaWorkflow(['res_id_master' => $value['res_id_master'], 'res_id' => $value['res_id']]); + break; + } elseif ($state == $aArgs['config']['data']['refusedState']) { + $res = DatabaseModel::select([ + 'select' => ['firstname', 'lastname'], + 'table' => ['listinstance', 'users'], + 'left_join' => ['listinstance.item_id = users.id'], + 'where' => ['res_id = ?', 'item_mode = ?'], + 'data' => [$aArgs['idsToRetrieve'][$version][$resId]['res_id_master'], 'sign'] + ])[0]; + + $response = FastParapheurController::getRefusalMessage(['config' => $aArgs['config'], 'documentId' => $value['external_id']]); + $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refused'; + $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $res['lastname'] . ' ' . $res['firstname'] . ' : ' . $response; + break; + } else { + $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'waiting'; + } + } + } + + return $aArgs['idsToRetrieve']; + } + + public static function processVisaWorkflow($aArgs = []) + { + $resIdMaster = $aArgs['res_id_master'] ?? $aArgs['res_id']; + + $attachments = AttachmentModel::get(['select' => ['count(1)'], 'where' => ['res_id_master = ?', 'status = ?'], 'data' => [$resIdMaster, 'FRZ']]); + if (count($attachments) < 2) { + $visaWorkflow = ListInstanceModel::get([ + 'select' => ['listinstance_id', 'requested_signature'], + 'where' => ['res_id = ?', 'difflist_type = ?', 'process_date IS NULL'], + 'data' => [$resIdMaster, 'VISA_CIRCUIT'], + 'orderBY' => ['ORDER BY listinstance_id ASC'] + ]); + + if (!empty($visaWorkflow)) { + foreach ($visaWorkflow as $listInstance) { + ListInstanceModel::update(['set' => ['process_date' => 'CURRENT_TIMESTAMP'], 'where' => ['listinstance_id = ?'], 'data' => [$listInstance['listinstance_id']]]); + // Stop to the first signatory user + if ($listInstance['requested_signature']) { + ListInstanceModel::update(['set' => ['signatory' => 'true'], 'where' => ['listinstance_id = ?'], 'data' => [$listInstance['listinstance_id']]]); break; - } else { - $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'waiting'; } } } } - return $aArgs['idsToRetrieve']; } public static function upload($aArgs) @@ -328,7 +357,11 @@ class FastParapheurController $signatory['business_id'] = $config['data']['subscriberId']; } - return FastParapheurController::upload(['config' => $config, 'resIdMaster' => $aArgs['resIdMaster'], 'businessId' => $signatory['business_id'], 'circuitId' => $signatory['user_id'], 'label' => $redactor['short_label']]); + if (!empty($signatory['user_id'])) { + $user = UserModel::getById(['id' => $signatory['user_id'], 'select' => ['user_id']]); + } + + return FastParapheurController::upload(['config' => $config, 'resIdMaster' => $aArgs['resIdMaster'], 'businessId' => $signatory['business_id'], 'circuitId' => $user['user_id'], 'label' => $redactor['short_label']]); } public static function getRefusalMessage($aArgs) diff --git a/src/app/external/externalSignatoryBook/controllers/IParapheurController.php b/src/app/external/externalSignatoryBook/controllers/IParapheurController.php index b8ecdc2815ca63697c6338d92a7d83a79270c793..bdb3f3169d72eeeb91811939435a59ac5f3226db 100755 --- a/src/app/external/externalSignatoryBook/controllers/IParapheurController.php +++ b/src/app/external/externalSignatoryBook/controllers/IParapheurController.php @@ -18,9 +18,11 @@ namespace ExternalSignatoryBook\controllers; use Attachment\models\AttachmentModel; use Convert\models\AdrModel; use Docserver\models\DocserverModel; +use Entity\models\ListInstanceModel; use Resource\models\ResModel; use SrcCore\models\CurlModel; use SrcCore\models\DatabaseModel; +use User\models\UserModel; /** * @codeCoverageIgnore @@ -59,7 +61,11 @@ class IParapheurController 'where' => ['res_id = ?', 'item_mode = ?'], 'data' => [$aArgs['resIdMaster'], 'sign'] ])[0]; - $sousType = IParapheurController::getSousType(['config' => $config, 'sousType' => $signatory['item_id']]); + + if (!empty($signatory['item_id'])) { + $user = UserModel::getById(['id' => $signatory['item_id'], 'select' => ['user_id']]); + } + $sousType = IParapheurController::getSousType(['config' => $config, 'sousType' => $user['user_id']]); if (!empty($sousType['error'])) { return ['error' => $sousType['error']]; } @@ -268,66 +274,93 @@ class IParapheurController public static function retrieveSignedMails($aArgs) { - foreach (['noVersion', 'resLetterbox'] as $version) { - foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { - if (!empty($value->external_id)) { - $xmlPostString = '<?xml version="1.0" encoding="utf-8"?> - <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.adullact.org/spring-ws/iparapheur/1.0"> - <soapenv:Header/> - <soapenv:Body> - <ns:GetHistoDossierRequest>' . $value['external_id'] . '</ns:GetHistoDossierRequest> - </soapenv:Body> - </soapenv:Envelope>'; - - $curlReturn = IParapheurController::returnCurl($xmlPostString, $aArgs['config']); - - if (!empty($curlReturn['error'])) { - return ['error' => $curlReturn['error']]; - } + $version = $aArgs['version']; + foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { + if (!empty($value->external_id)) { + $xmlPostString = '<?xml version="1.0" encoding="utf-8"?> + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.adullact.org/spring-ws/iparapheur/1.0"> + <soapenv:Header/> + <soapenv:Body> + <ns:GetHistoDossierRequest>' . $value['external_id'] . '</ns:GetHistoDossierRequest> + </soapenv:Body> + </soapenv:Envelope>'; + + $curlReturn = IParapheurController::returnCurl($xmlPostString, $aArgs['config']); - $response = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://www.adullact.org/spring-ws/iparapheur/1.0')->GetHistoDossierResponse[0]; - - if ($response->MessageRetour->codeRetour == $aArgs['config']['data']['errorCode']) { - return ['error' => 'Error : [' . $response->MessageRetour->severite . ']' . $response->MessageRetour->message]; - } else { - $noteContent = ''; - foreach ($response->LogDossier as $res) { // Loop on all steps of the documents (prepared, send to signature, signed etc...) - $status = $res->status; - if ($status == $aArgs['config']['data']['visaState'] || $status == $aArgs['config']['data']['signState']) { - $noteContent .= $res->nom . ' : ' . $res->annotation . PHP_EOL; - - $response = IParapheurController::download([ - 'config' => $aArgs['config'], - 'documentId' => $value['external_id'] - ]); - if (!empty($response['error'])) { - return ['error' => $response['error']]; - } - $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; - if ($status == $aArgs['config']['data']['signState']) { - break; - } - } 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; + if (!empty($curlReturn['error'])) { + return ['error' => $curlReturn['error']]; + } + + $response = $curlReturn['response']->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://www.adullact.org/spring-ws/iparapheur/1.0')->GetHistoDossierResponse[0]; + + if ($response->MessageRetour->codeRetour == $aArgs['config']['data']['errorCode']) { + return ['error' => 'Error : [' . $response->MessageRetour->severite . ']' . $response->MessageRetour->message]; + } else { + $noteContent = ''; + foreach ($response->LogDossier as $res) { // Loop on all steps of the documents (prepared, send to signature, signed etc...) + $status = $res->status; + if ($status == $aArgs['config']['data']['visaState'] || $status == $aArgs['config']['data']['signState']) { + $noteContent .= $res->nom . ' : ' . $res->annotation . PHP_EOL; + + $response = IParapheurController::download([ + 'config' => $aArgs['config'], + 'documentId' => $value['external_id'] + ]); + if (!empty($response['error'])) { + return ['error' => $response['error']]; + } + $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; + if ($status == $aArgs['config']['data']['signState']) { + IParapheurController::processVisaWorkflow(['res_id_master' => $value['res_id_master'], 'res_id' => $value['res_id']]); break; - } else { - $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'waiting'; } + } 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; + break; + } else { + $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'waiting'; } } - } else { - echo 'ExternalId is empty'; } + } else { + echo 'ExternalId is empty'; } } + return $aArgs['idsToRetrieve']; } + public static function processVisaWorkflow($aArgs = []) + { + $resIdMaster = $aArgs['res_id_master'] ?? $aArgs['res_id']; + + $attachments = AttachmentModel::get(['select' => ['count(1)'], 'where' => ['res_id_master = ?', 'status = ?'], 'data' => [$resIdMaster, 'FRZ']]); + if (count($attachments) < 2) { + $visaWorkflow = ListInstanceModel::get([ + 'select' => ['listinstance_id', 'requested_signature'], + 'where' => ['res_id = ?', 'difflist_type = ?', 'process_date IS NULL'], + 'data' => [$resIdMaster, 'VISA_CIRCUIT'], + 'orderBY' => ['ORDER BY listinstance_id ASC'] + ]); + + if (!empty($visaWorkflow)) { + foreach ($visaWorkflow as $listInstance) { + ListInstanceModel::update(['set' => ['process_date' => 'CURRENT_TIMESTAMP'], 'where' => ['listinstance_id = ?'], 'data' => [$listInstance['listinstance_id']]]); + // Stop to the first signatory user + if ($listInstance['requested_signature']) { + ListInstanceModel::update(['set' => ['signatory' => 'true'], 'where' => ['listinstance_id = ?'], 'data' => [$listInstance['listinstance_id']]]); + break; + } + } + } + } + } + public static function getType($aArgs) { $xmlPostString = '<?xml version="1.0" encoding="utf-8"?> diff --git a/src/app/external/externalSignatoryBook/controllers/IxbusController.php b/src/app/external/externalSignatoryBook/controllers/IxbusController.php index a359bfaaeba0b9006d98f3c070471057bb65b572..0c1f2da0ef64f301f17b8d143c0757f469daa20f 100755 --- a/src/app/external/externalSignatoryBook/controllers/IxbusController.php +++ b/src/app/external/externalSignatoryBook/controllers/IxbusController.php @@ -336,27 +336,26 @@ class IxbusController if (!empty($sessionId['error'])) { return ['error' => $sessionId['error']]; } - foreach (['noVersion', 'resLetterbox'] as $version) { - foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { - $etatDossier = IxbusController::getEtatDossier(['config' => $aArgs['config'], 'sessionId' => $sessionId['cookie'], 'dossier_id' => $value['external_id']]); - - // Refused - 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; - // Validated - } elseif ((string)$etatDossier == $aArgs['config']['data']['ixbusIdEtatValidated']) { - $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validated'; - $signedDocument = IxbusController::getAnnexes(['config' => $aArgs['config'], 'sessionId' => $sessionId['cookie'], 'dossier_id' => $value['external_id']]); - $aArgs['idsToRetrieve'][$version][$resId]['format'] = 'pdf'; // format du fichier récupéré - $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; - } else { - unset($aArgs['idsToRetrieve'][$version][$resId]); - } + $version = $aArgs['version']; + foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { + $etatDossier = IxbusController::getEtatDossier(['config' => $aArgs['config'], 'sessionId' => $sessionId['cookie'], 'dossier_id' => $value['external_id']]); + + // Refused + 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; + // Validated + } elseif ((string)$etatDossier == $aArgs['config']['data']['ixbusIdEtatValidated']) { + $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validated'; + $signedDocument = IxbusController::getAnnexes(['config' => $aArgs['config'], 'sessionId' => $sessionId['cookie'], 'dossier_id' => $value['external_id']]); + $aArgs['idsToRetrieve'][$version][$resId]['format'] = 'pdf'; // format du fichier récupéré + $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; + } 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 b7998275be3fc87ea825839b00588a653108f15f..2bb93df95bcc1d0899349767b4f8cce2e202b1cb 100755 --- a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php +++ b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php @@ -485,50 +485,49 @@ class MaarchParapheurController public static function retrieveSignedMails(array $aArgs) { - foreach (['noVersion', 'resLetterbox'] as $version) { - foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { - $documentWorkflow = MaarchParapheurController::getDocumentWorkflow(['config' => $aArgs['config'], 'documentId' => $value['external_id']]); - $state = MaarchParapheurController::getState(['workflow' => $documentWorkflow]); - - if (in_array($state['status'], ['validated', 'refused'])) { - $signedDocument = MaarchParapheurController::getDocument(['config' => $aArgs['config'], 'documentId' => $value['external_id']]); - $aArgs['idsToRetrieve'][$version][$resId]['format'] = 'pdf'; - $aArgs['idsToRetrieve'][$version][$resId]['encodedFile'] = $signedDocument['encodedDocument']; - if ($state['status'] == 'validated' && in_array($state['mode'], ['sign', 'visa'])) { - $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validated'; - } elseif ($state['status'] == 'refused' && in_array($state['mode'], ['sign', 'visa'])) { - $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refused'; - } elseif ($state['status'] == 'validated' && $state['mode'] == 'note') { - $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validatedNote'; - } elseif ($state['status'] == 'refused' && $state['mode'] == 'note') { - $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refusedNote'; - } - if (!empty($state['note'])) { - $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $state['note']; - $userInfos = UserModel::getByExternalId([ - 'select' => ['id', 'firstname', 'lastname'], - 'externalId' => $state['noteCreatorId'], - 'externalName' => 'maarchParapheur' - ]); - if (!empty($userInfos)) { - $aArgs['idsToRetrieve'][$version][$resId]['noteCreatorId'] = $userInfos['id']; - } - $aArgs['idsToRetrieve'][$version][$resId]['noteCreatorName'] = $state['noteCreatorName']; + $version = $aArgs['version']; + foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { + $documentWorkflow = MaarchParapheurController::getDocumentWorkflow(['config' => $aArgs['config'], 'documentId' => $value['external_id']]); + $state = MaarchParapheurController::getState(['workflow' => $documentWorkflow]); + + if (in_array($state['status'], ['validated', 'refused'])) { + $signedDocument = MaarchParapheurController::getDocument(['config' => $aArgs['config'], 'documentId' => $value['external_id']]); + $aArgs['idsToRetrieve'][$version][$resId]['format'] = 'pdf'; + $aArgs['idsToRetrieve'][$version][$resId]['encodedFile'] = $signedDocument['encodedDocument']; + if ($state['status'] == 'validated' && in_array($state['mode'], ['sign', 'visa'])) { + $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validated'; + } elseif ($state['status'] == 'refused' && in_array($state['mode'], ['sign', 'visa'])) { + $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refused'; + } elseif ($state['status'] == 'validated' && $state['mode'] == 'note') { + $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validatedNote'; + } elseif ($state['status'] == 'refused' && $state['mode'] == 'note') { + $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'refusedNote'; + } + if (!empty($state['note'])) { + $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $state['note']; + $userInfos = UserModel::getByExternalId([ + 'select' => ['id', 'firstname', 'lastname'], + 'externalId' => $state['noteCreatorId'], + 'externalName' => 'maarchParapheur' + ]); + if (!empty($userInfos)) { + $aArgs['idsToRetrieve'][$version][$resId]['noteCreatorId'] = $userInfos['id']; } - if (!empty($state['signatoryUserId'])) { - $signatoryUser = UserModel::getByExternalId([ - 'select' => ['user_id'], - 'externalId' => $state['signatoryUserId'], - 'externalName' => 'maarchParapheur' - ]); - if (!empty($signatoryUser['user_id'])) { - $aArgs['idsToRetrieve'][$version][$resId]['typist'] = $signatoryUser['user_id']; - } + $aArgs['idsToRetrieve'][$version][$resId]['noteCreatorName'] = $state['noteCreatorName']; + } + if (!empty($state['signatoryUserId'])) { + $signatoryUser = UserModel::getByExternalId([ + 'select' => ['user_id'], + 'externalId' => $state['signatoryUserId'], + 'externalName' => 'maarchParapheur' + ]); + if (!empty($signatoryUser['user_id'])) { + $aArgs['idsToRetrieve'][$version][$resId]['typist'] = $signatoryUser['user_id']; } - $aArgs['idsToRetrieve'][$version][$resId]['workflowInfo'] = implode(", ", $state['workflowInfo']); - } else { - unset($aArgs['idsToRetrieve'][$version][$resId]); } + $aArgs['idsToRetrieve'][$version][$resId]['workflowInfo'] = implode(", ", $state['workflowInfo']); + } else { + unset($aArgs['idsToRetrieve'][$version][$resId]); } } diff --git a/src/app/external/externalSignatoryBook/controllers/XParaphController.php b/src/app/external/externalSignatoryBook/controllers/XParaphController.php index 5ed0c8be5a93c900dd559490a4eb76f7053fbca8..cad6ba804eeb1f9e5897e6115817649d34e507a6 100755 --- a/src/app/external/externalSignatoryBook/controllers/XParaphController.php +++ b/src/app/external/externalSignatoryBook/controllers/XParaphController.php @@ -377,101 +377,100 @@ class XParaphController { $tmpPath = CoreConfigModel::getTmpPath(); - foreach (['noVersion'] as $version) { - $depotsBySiret = []; - foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { - $externalId = json_decode($value['xparaphdepot'], true); - $depotsBySiret[$externalId['siret']][$value['external_id']] = ['resId' => $resId, 'login' => $externalId['login']]; + $version = $aArgs['version']; + $depotsBySiret = []; + foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { + $externalId = json_decode($value['xparaphdepot'], true); + $depotsBySiret[$externalId['siret']][$value['external_id']] = ['resId' => $resId, 'login' => $externalId['login']]; + } + + foreach ($depotsBySiret as $siret => $depotids) { + 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; + } + } } - foreach ($depotsBySiret as $siret => $depotids) { - if (isset($aArgs['config']['data']['userGeneric']->siret)) { - if ($aArgs['config']['data']['userGeneric']->siret == $siret) { - $userGeneric = (array)$aArgs['config']['data']['userGeneric']; + if (!empty($depotids)) { + $avancements = XParaphController::getAvancement(['config' => $aArgs['config'], 'depotsIds' => $depotids, 'userGeneric' => $userGeneric]); + } else { + unset($aArgs['idsToRetrieve'][$version]); + continue; + } + + foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { + $xParaphDepot = json_decode($value['xparaphdepot'], true); + $avancement = $avancements[$value['external_id']]; + + $state = XParaphController::getState(['avancement' => $avancement]); + + if ($state['id'] == 'refused') { + $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' => $xParaphDepot['login']]); + if (!empty($processedFile['errors'])) { + unset($aArgs['idsToRetrieve'][$version][$resId]); + continue; } - } else { - foreach ($aArgs['config']['data']['userGeneric'] as $userGenericXml) { - if ($userGenericXml->siret == $siret) { - $userGeneric = (array)$userGenericXml; - break; - } + $file = base64_decode($processedFile['zip']); + $unzipName = 'tmp_file_' .rand(). '_xParaph_' .rand(); + $tmpName = $unzipName . '.zip'; + + file_put_contents($tmpPath . $tmpName, $file); + + $zip = new \ZipArchive(); + $zip->open($tmpPath . $tmpName); + $zip->extractTo($tmpPath . $unzipName); + + foreach (glob($tmpPath . $unzipName . '/*.xml') as $filename) { + $log = base64_encode(file_get_contents($filename)); } - } + unlink($tmpPath . $tmpName); - if (!empty($depotids)) { - $avancements = XParaphController::getAvancement(['config' => $aArgs['config'], 'depotsIds' => $depotids, 'userGeneric' => $userGeneric]); - } else { - unset($aArgs['idsToRetrieve'][$version]); - continue; - } - - foreach ($aArgs['idsToRetrieve'][$version] as $resId => $value) { - $xParaphDepot = json_decode($value['xparaphdepot'], true); - $avancement = $avancements[$value['external_id']]; - - $state = XParaphController::getState(['avancement' => $avancement]); - - if ($state['id'] == 'refused') { - $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' => $xParaphDepot['login']]); - if (!empty($processedFile['errors'])) { - unset($aArgs['idsToRetrieve'][$version][$resId]); - continue; - } - $file = base64_decode($processedFile['zip']); - $unzipName = 'tmp_file_' .rand(). '_xParaph_' .rand(); - $tmpName = $unzipName . '.zip'; - - file_put_contents($tmpPath . $tmpName, $file); - - $zip = new \ZipArchive(); - $zip->open($tmpPath . $tmpName); - $zip->extractTo($tmpPath . $unzipName); - - foreach (glob($tmpPath . $unzipName . '/*.xml') as $filename) { - $log = base64_encode(file_get_contents($filename)); - } - unlink($tmpPath . $tmpName); - - $aArgs['idsToRetrieve'][$version][$resId]['log'] = $log; - } elseif ($state['id'] == 'validateSignature' || $state['id'] == 'validateOnlyVisa') { - $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; - } - $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validated'; - $aArgs['idsToRetrieve'][$version][$resId]['format'] = 'pdf'; - - $file = base64_decode($processedFile['zip']); - $unzipName = 'tmp_file_' .rand(). '_xParaph_' .rand(); - $tmpName = $unzipName . '.zip'; - - file_put_contents($tmpPath . $tmpName, $file); - - $zip = new \ZipArchive(); - $zip->open($tmpPath . $tmpName); - $zip->extractTo($tmpPath . $unzipName); - - foreach (glob($tmpPath . $unzipName . '/*.pdf') as $filename) { - $encodedFile = base64_encode(file_get_contents($filename)); - } - foreach (glob($tmpPath . $unzipName . '/*.xml') as $filename) { - $log = base64_encode(file_get_contents($filename)); - } - unlink($tmpPath . $tmpName); - - $aArgs['idsToRetrieve'][$version][$resId]['encodedFile'] = $encodedFile; - $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $state['note']; - if ($state['id'] == 'validateOnlyVisa') { - $aArgs['idsToRetrieve'][$version][$resId]['onlyVisa'] = true; - } - $aArgs['idsToRetrieve'][$version][$resId]['log'] = $log; - } else { + $aArgs['idsToRetrieve'][$version][$resId]['log'] = $log; + } elseif ($state['id'] == 'validateSignature' || $state['id'] == 'validateOnlyVisa') { + $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; + } + $aArgs['idsToRetrieve'][$version][$resId]['status'] = 'validated'; + $aArgs['idsToRetrieve'][$version][$resId]['format'] = 'pdf'; + + $file = base64_decode($processedFile['zip']); + $unzipName = 'tmp_file_' .rand(). '_xParaph_' .rand(); + $tmpName = $unzipName . '.zip'; + + file_put_contents($tmpPath . $tmpName, $file); + + $zip = new \ZipArchive(); + $zip->open($tmpPath . $tmpName); + $zip->extractTo($tmpPath . $unzipName); + + foreach (glob($tmpPath . $unzipName . '/*.pdf') as $filename) { + $encodedFile = base64_encode(file_get_contents($filename)); + } + foreach (glob($tmpPath . $unzipName . '/*.xml') as $filename) { + $log = base64_encode(file_get_contents($filename)); } + unlink($tmpPath . $tmpName); + + $aArgs['idsToRetrieve'][$version][$resId]['encodedFile'] = $encodedFile; + $aArgs['idsToRetrieve'][$version][$resId]['noteContent'] = $state['note']; + if ($state['id'] == 'validateOnlyVisa') { + $aArgs['idsToRetrieve'][$version][$resId]['onlyVisa'] = true; + } + $aArgs['idsToRetrieve'][$version][$resId]['log'] = $log; + } else { + unset($aArgs['idsToRetrieve'][$version][$resId]); } } } diff --git a/src/app/history/controllers/HistoryController.php b/src/app/history/controllers/HistoryController.php index f7b39782907aa4b3ede09be0fbfc1bf765f00577..b2d748f660c21d1868e1b9ebdba79f11a8b93d4a 100755 --- a/src/app/history/controllers/HistoryController.php +++ b/src/app/history/controllers/HistoryController.php @@ -135,7 +135,8 @@ class HistoryController public static function add(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['tableName', 'recordId', 'eventType', 'info', 'eventId']); - ValidatorModel::stringType($aArgs, ['tableName', 'eventType', 'info', 'eventId', 'moduleId', 'level', 'userId']); + ValidatorModel::stringType($aArgs, ['tableName', 'eventType', 'info', 'eventId', 'moduleId', 'level']); + ValidatorModel::intVal($aArgs, ['userId']); if (empty($aArgs['isTech'])) { $aArgs['isTech'] = false;