diff --git a/bin/exportSeda/batch_tools.php b/bin/exportSeda/batch_tools.php index d8be0d3124d96c60efb47868436a5e52e5fe86a4..b0af7b612971303db0b8e5b9f940a3580d68e224 100644 --- a/bin/exportSeda/batch_tools.php +++ b/bin/exportSeda/batch_tools.php @@ -160,7 +160,38 @@ function Bt_getReply($args = []) return ['errors' => 'Error returned by the route /organization/organization/Search : ' . $curlResponse['response']['message']]; } - return ['response' => $curlResponse['response']]; + if ($curlResponse['response']['status'] != "processed") { + return []; + } + + $messageId = $curlResponse['response']['replyMessage']['messageId']; + + $curlResponse = \SrcCore\models\CurlModel::execSimple([ + 'url' => rtrim($GLOBALS['urlSAEService'], '/') . '/medona/message/'.urlencode($messageId).'/Export', + 'method' => 'GET', + 'cookie' => 'LAABS-AUTH=' . urlencode($GLOBALS['token']), + 'headers' => [ + 'Accept: application/zip', + 'Content-Type: application/json', + 'User-Agent: ' . $GLOBALS['userAgent'] + ] + ]); + + if (!empty($curlResponse['errors'])) { + return ['errors' => 'Error returned by the route /medona/message/{messageId}/Export : ' . $curlResponse['errors']]; + } elseif ($curlResponse['code'] != 200) { + return ['errors' => 'Error returned by the route /medona/message/{messageId}/Export : ' . $curlResponse['response']['message']]; + } + + $encodedReply = \ExportSeda\controllers\ExportSEDATrait::getXmlFromZipMessage([ + 'encodedZipDocument' => base64_encode($curlResponse['response']), + 'messageId' => $messageId + ]); + if (!empty($encodedReply['errors'])) { + return ['errors' => 'Error during getXmlFromZipMessage process : ' . $encodedReply['errors']]; + } + + return ['encodedReply' => $encodedReply['encodedDocument']]; } function Bt_purgeAll($args = []) diff --git a/bin/exportSeda/checkAllReplies.php b/bin/exportSeda/checkAllReplies.php index 642bc4942dbda8b7436ffdb55b7b53546d9ce0a0..6b655be269689e6fc99ba657469440f9a9fe8672 100755 --- a/bin/exportSeda/checkAllReplies.php +++ b/bin/exportSeda/checkAllReplies.php @@ -141,42 +141,38 @@ foreach ($pendingResources as $resId) { } else { $unitIdentifiers[$message['reference']] = $unitIdentifier[0]['res_id']; } +} - foreach ($unitIdentifiers as $reference => $value) { - $messages = Bt_getReply(['reference' => $reference]); - if (!empty($messages['errors'])) { - Bt_writeLog(['level' => 'ERROR', 'message' => $messages['errors']]); - } - - if (!isset($messages['response']['replyMessage'])) { - continue; - } +foreach ($unitIdentifiers as $reference => $value) { + $messages = Bt_getReply(['reference' => $reference]); + if (!empty($messages['errors'])) { + Bt_writeLog(['level' => 'ERROR', 'message' => $messages['errors']]); + continue; + } elseif (empty($messages['encodedReply'])) { + Bt_writeLog(['level' => 'INFO', 'message' => 'Le bordereau avec la référence ' . $reference . ' est toujours en cours de traitement dans le SAE Maarch RM.']); + continue; + } - $resIds = explode(',', $value); - $data = json_decode($messages->replyMessage->data); - - // TODO GET XML - $pathToDocument = 'xmlFile'; - - foreach ($resIds as $res) { - $id = Resource\controllers\StoreController::storeAttachment([ - 'encodedFile' => base64_encode(file_get_contents($pathToDocument)), - 'type' => 'reply_record_management', - 'resIdMaster' => $res, - 'title' => 'Réponse au transfert', - 'format' => 'xml', - 'status' => 'TRA' - ]); - if (empty($id) || !empty($id['errors'])) { - return ['errors' => ['[storeAttachment] ' . $id['errors']]]; - } - \Resource\models\ResModel::update([ - 'set' => ['status' => $GLOBALS['statusReplyReceived']], - 'where' => ['res_id = ?'], - 'data' => [$res] - ]); - $nbMailsRetrieved++; + $resIds = explode(',', $value); + + foreach ($resIds as $resId) { + $id = Resource\controllers\StoreController::storeAttachment([ + 'encodedFile' => $messages['encodedReply'], + 'type' => 'reply_record_management', + 'resIdMaster' => $resId, + 'title' => 'Réponse au transfert', + 'format' => 'xml', + 'status' => 'TRA' + ]); + if (empty($id) || !empty($id['errors'])) { + return ['errors' => ['[storeAttachment] ' . $id['errors']]]; } + \Resource\models\ResModel::update([ + 'set' => ['status' => $GLOBALS['statusReplyReceived']], + 'where' => ['res_id = ?'], + 'data' => [$resId] + ]); + $nbMailsRetrieved++; } } diff --git a/src/app/external/exportSeda/controllers/ExportSEDATrait.php b/src/app/external/exportSeda/controllers/ExportSEDATrait.php index bf941648bd529f5b1b0d601fb0e2ab8bdb904189..2c9569d1e842dc962798efc305ca6ff32375224f 100644 --- a/src/app/external/exportSeda/controllers/ExportSEDATrait.php +++ b/src/app/external/exportSeda/controllers/ExportSEDATrait.php @@ -167,6 +167,11 @@ trait ExportSEDATrait } $messageSaved = ExportSEDATrait::saveMessage(['messageObject' => $sedaPackage['messageObject']]); + MessageExchangeModel::insertUnitIdentifier([ + 'messageId' => $messageSaved['messageId'], + 'tableName' => 'res_letterbox', + 'resId' => $resource['res_id'] + ]); if ($args['data']['actionMode'] == 'download') { return ['data' => ['encodedFile' => base64_encode(file_get_contents($sedaPackage['encodedFilePath']))]]; } else { @@ -488,7 +493,7 @@ trait ExportSEDATrait $messageId = $curlResponse['response']['messageId']; $curlResponse = CurlModel::execSimple([ - 'url' => rtrim($args['config']['exportSeda']['urlSAEService'], '/') . '/medona/message/'.urlencode($curlResponse['response']['messageId']).'/Export', + 'url' => rtrim($args['config']['exportSeda']['urlSAEService'], '/') . '/medona/message/'.urlencode($messageId).'/Export', 'method' => 'GET', 'cookie' => 'LAABS-AUTH=' . urlencode($args['config']['exportSeda']['token']), 'headers' => [ @@ -504,45 +509,37 @@ trait ExportSEDATrait return ['errors' => 'Error returned by the route /medona/message/{messageId}/Export : ' . $curlResponse['response']['message']]; } - $encodedAcknowledgement = ExportSEDATrait::getEncodedDocumentFromEncodedZip([ + $encodedAcknowledgement = ExportSEDATrait::getXmlFromZipMessage([ 'encodedZipDocument' => base64_encode($curlResponse['response']), 'messageId' => $messageId ]); if (!empty($encodedAcknowledgement['errors'])) { - return ['errors' => 'Error during getEncodedDocumentFromEncodedZip process : ' . $encodedAcknowledgement['errors']]; + return ['errors' => 'Error during getXmlFromZipMessage process : ' . $encodedAcknowledgement['errors']]; } return ['encodedAcknowledgement' => $encodedAcknowledgement['encodedDocument']]; } - public static function getEncodedDocumentFromEncodedZip(array $args) + public function getXmlFromZipMessage(array $args) { $tmpPath = CoreConfigModel::getTmpPath(); - $zipDocumentOnTmp = $tmpPath . mt_rand() .'_' . $GLOBALS['id'] . '_acknowledgement.zip'; + $zipDocumentOnTmp = $tmpPath . mt_rand() .'_' . $GLOBALS['id'] . '_acknowledgement.7z'; file_put_contents($zipDocumentOnTmp, base64_decode($args['encodedZipDocument'])); - $zipArchive = new \ZipArchive(); - $open = $zipArchive->open($zipDocumentOnTmp); - if ($open != true) { - return ['errors' => "getDocumentFromEncodedZip : $open"]; - } - - $dirOnTmp = $tmpPath . mt_rand() . '_acknowledgement'; - if (!@$zipArchive->extractTo($dirOnTmp)) { - return ['errors' => "getDocumentFromEncodedZip : Extract failed"]; - } + $path = $tmpPath. mt_rand() .'_' . $GLOBALS['id']; + shell_exec("7z x $zipDocumentOnTmp -o$path"); - $filesOnTmp = scandir($dirOnTmp); - foreach ($filesOnTmp as $fileOnTmp) { - if ($fileOnTmp == $args['messageId']) { - $base64Content = base64_encode(file_get_contents("{$dirOnTmp}/{$fileOnTmp}")); - unlink($zipDocumentOnTmp); - return ['encodedDocument' => $base64Content]; - } + $fullFilePath = $path."/".$args['messageId'].".xml"; + if (!file_exists($fullFilePath)) { + return ['errors' => "getDocumentFromEncodedZip : No document was found in Zip"]; } + + $content = file_get_contents($fullFilePath); + unlink($zipDocumentOnTmp); + unlink($fullFilePath); - return ['errors' => "getDocumentFromEncodedZip : No document was found in Zip"]; + return ['encodedDocument' => base64_encode($content)]; } public static function checkAcknowledgmentRecordManagement(array $args) diff --git a/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php b/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php index e1a1b2ea9be34eba36d27a0ca5a8322ce9aede18..9ed82b22ab7672bebbd30d0575726ae42c10cb91 100755 --- a/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php +++ b/src/app/external/messageExchange/models/MessageExchangeModelAbstract.php @@ -305,7 +305,7 @@ abstract class MessageExchangeModelAbstract public static function insertUnitIdentifier(array $args) { - ValidatorModel::notEmpty($args, ['messageId', 'tableName', 'resId', 'disposition']); + ValidatorModel::notEmpty($args, ['messageId', 'tableName', 'resId']); ValidatorModel::stringType($args, ['messageId', 'tableName', 'disposition']); ValidatorModel::intVal($args, ['resId']);