From 7628eea086cff6d0424c9e0f2efa4cd320784f1b Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Thu, 8 Oct 2020 23:58:27 +0200
Subject: [PATCH] FEAT #15047 TIME 1:20 Begin initSeda

---
 rest/index.php                                |   3 +
 .../exportSeda/controllers/SedaController.php | 104 ++++++++++++++++++
 2 files changed, 107 insertions(+)
 create mode 100755 src/app/external/exportSeda/controllers/SedaController.php

diff --git a/rest/index.php b/rest/index.php
index c923adf70db..2f737938fb7 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -623,6 +623,9 @@ $app->post('/collaboraOnline/file', \ContentManagement\controllers\CollaboraOnli
 $app->delete('/collaboraOnline/file', \ContentManagement\controllers\CollaboraOnlineController::class . ':deleteTmpFile');
 $app->post('/collaboraOnline/encodedFile', \ContentManagement\controllers\CollaboraOnlineController::class . ':saveTmpEncodedDocument');
 
+// Archival
+$app->get('/resources/{resId}/initSeda', \ExportSeda\controllers\SedaController::class . ':initSeda');
+
 // Registered mail
 $app->get('/registeredMail/sites', \RegisteredMail\controllers\IssuingSiteController::class . ':get');
 $app->get('/registeredMail/sites/{id}', \RegisteredMail\controllers\IssuingSiteController::class . ':getById');
diff --git a/src/app/external/exportSeda/controllers/SedaController.php b/src/app/external/exportSeda/controllers/SedaController.php
new file mode 100755
index 00000000000..7dfd2fbd854
--- /dev/null
+++ b/src/app/external/exportSeda/controllers/SedaController.php
@@ -0,0 +1,104 @@
+<?php
+
+/**
+* Copyright Maarch since 2008 under licence GPLv3.
+* See LICENCE.txt file at the root folder for more details.
+* This file is part of Maarch software.
+*
+*/
+
+/**
+* @brief Seda Controller
+* @author dev@maarch.org
+*/
+
+namespace ExportSeda\controllers;
+
+use Attachment\models\AttachmentModel;
+use Doctype\models\DoctypeModel;
+use Email\models\EmailModel;
+use Entity\models\EntityModel;
+use Note\models\NoteModel;
+use Resource\models\ResModel;
+use Respect\Validation\Validator;
+use Slim\Http\Request;
+use Slim\Http\Response;
+use SrcCore\models\CoreConfigModel;
+
+class SedaController
+{
+    public function initSeda(Request $request, Response $response, array $aArgs)
+    {
+        if (!Validator::intVal()->validate($aArgs['resId'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Route resId is not an integer']);
+        }
+
+        $resource = ResModel::getById(['resId' => $aArgs['resId'], 'select' => ['destination', 'type_id', 'subject']]);
+        if (empty($resource)) {
+            return $response->withStatus(400)->withJson(['errors' => 'resource does not exists']);
+        } elseif (empty($resource['destination'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'resource has no destination', 'lang' => 'noDestination']);
+        }
+
+        $doctype = DoctypeModel::getById(['id' => $resource['type_id'], 'select' => ['description', 'retention_rule', 'retention_final_disposition']]);
+        if (empty($doctype['retention_rule']) || empty($doctype['retention_final_disposition'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'retention_rule or retention_final_disposition is empty for doctype', 'lang' => 'noRetentionInfo']);
+        }
+        $entity = EntityModel::getByEntityId(['entityId' => $resource['destination'], 'select' => ['producer_service', 'entity_label', 'business_id']]);
+        if (empty($entity['producer_service'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'producer_service is empty for this entity', 'lang' => 'noProducerService']);
+        }
+
+        $sedaXml = CoreConfigModel::getXmlLoaded(['path' => 'modules/export_seda/xml/config.xml']);
+        if (empty($sedaXml->CONFIG->senderOrgRegNumber)) {
+            return $response->withStatus(400)->withJson(['errors' => 'No senderOrgRegNumber found in config.xml (export_seda)']);
+        }
+
+        $return = [
+            'data' => [
+                'entity' => [
+                    'label'              => $entity['entity_label'],
+                    'siren'              => $entity['business_id'],
+                    'archiveEntitySiren' => $sedaXml->CONFIG->senderOrgRegNumber
+                ],
+                'doctype' => [
+                    'label'                     => $doctype['description'],
+                    'retentionRule'             => $doctype['retention_rule'],
+                    'retentionFinalDisposition' => $doctype['retention_final_disposition']
+                ]
+            ],
+            'archiveUnit' => [
+                [
+                    'id'    => 'letterbox_' . $aArgs['resId'],
+                    'label' => $resource['subject'],
+                    'type'  => 'mainDocument'
+                ]
+            ]
+        ];
+
+        $notes = NoteModel::get(['select' => ['note_text', 'id'], 'where' => ['identifier = ?'], 'data' => [$aArgs['resId']]]);
+        foreach ($notes as $note) {
+            $return['archiveUnit'][] = [
+                'id'    => 'note_' . $note['id'],
+                'label' => $note['note_text'],
+                'type'  => 'note'
+            ];
+        }
+
+        $emails = EmailModel::get([
+            'select'  => ['object', 'id'],
+            'where'   => ['document->>\'id\' = ?', 'status = ?'],
+            'data'    => [$aArgs['resId'], 'SENT'],
+            'orderBy' => ['send_date desc']
+        ]);
+        foreach ($emails as $email) {
+            $return['archiveUnit'][] = [
+                'id'    => 'note_' . $email['id'],
+                'label' => $email['object'],
+                'type'  => 'email'
+            ];
+        }
+        
+        return $response->withJson($return);
+    }
+}
-- 
GitLab