From 29bc85ba4ddd066393e9f9592a295531903b87b2 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Fri, 27 Sep 2019 10:03:31 +0200
Subject: [PATCH] FEAT #11271 TIME 1:00 Calculate process limit date

---
 migration/19.12/1912.sql                      |  1 +
 sql/structure.sql                             |  2 +-
 .../controllers/IndexingController.php        | 56 ++++++++++++++++++-
 src/app/resource/models/ResModelAbstract.php  | 42 +-------------
 4 files changed, 58 insertions(+), 43 deletions(-)

diff --git a/migration/19.12/1912.sql b/migration/19.12/1912.sql
index 8e65544e36c..685214c40b4 100644
--- a/migration/19.12/1912.sql
+++ b/migration/19.12/1912.sql
@@ -410,6 +410,7 @@ CREATE VIEW res_view_attachments AS
   FROM res_attachments;
 
 
+/* DATA */
 TRUNCATE TABLE custom_fields;
 INSERT INTO custom_fields (id, label, type, values) VALUES (1, 'Nature', 'select', '["Courrier simple", "Courriel", "Chronopost", "Pli numérique"]');
 INSERT INTO custom_fields (id, label, type, values) VALUES (2, 'N° recommandé', 'string', '""');
diff --git a/sql/structure.sql b/sql/structure.sql
index f64eec9da31..63b82709e05 100755
--- a/sql/structure.sql
+++ b/sql/structure.sql
@@ -76,7 +76,7 @@ CREATE TABLE doctypes
   process_delay INTEGER NOT NULL,
   delay1 INTEGER NOT NULL,
   delay2 INTEGER NOT NULL,
-  process_mode INTEGER NOT NULL,
+  process_mode CHARACTER VARYING(256) NOT NULL,
   CONSTRAINT doctypes_pkey PRIMARY KEY (type_id)
 )
 WITH (OIDS=FALSE);
diff --git a/src/app/resource/controllers/IndexingController.php b/src/app/resource/controllers/IndexingController.php
index ba4da5be854..e35316b5437 100755
--- a/src/app/resource/controllers/IndexingController.php
+++ b/src/app/resource/controllers/IndexingController.php
@@ -18,10 +18,12 @@ use Action\models\ActionModel;
 use Doctype\models\DoctypeModel;
 use Entity\models\EntityModel;
 use Group\models\GroupModel;
+use Priority\models\PriorityModel;
 use Respect\Validation\Validator;
 use Slim\Http\Request;
 use Slim\Http\Response;
 use SrcCore\controllers\PreparedClauseController;
+use SrcCore\models\ValidatorModel;
 
 class IndexingController
 {
@@ -130,11 +132,19 @@ class IndexingController
         $queryParams = $request->getQueryParams();
 
         if (!empty($queryParams['doctype'])) {
-            $obj['doctype'] = DoctypeModel::getById(['id' => $queryParams['doctype']]);
+            $doctype = DoctypeModel::getById(['id' => $queryParams['doctype'], 'select' => ['process_delay']]);
+            $delay = $doctype['process_delay'];
+        } elseif (!empty($queryParams['priority'])) {
+            $priority = PriorityModel::getById(['id' => $queryParams['priority'], 'select' => ['delays']]);
+            $delay = $priority['delays'];
+        }
+        if (empty($delay)) {
+            return $response->withStatus(400)->withJson(['errors' => 'Delay is empty']);
         }
 
+        $processLimitDate = IndexingController::calculateProcessDate(['date' => date('c'), 'delay' => $delay]);
 
-        return $response->withJson(['actions' => $actions]);
+        return $response->withJson(['processLimitDate' => $processLimitDate]);
     }
 
     public static function getEntitiesChildrenLevel($aArgs = [])
@@ -170,4 +180,46 @@ class IndexingController
 
         return ['indexingParameters' => $group[0]['indexation_parameters']];
     }
+
+    public static function calculateProcessDate(array $args)
+    {
+        ValidatorModel::notEmpty($args, ['date', 'delay']);
+        ValidatorModel::intVal($args, ['delay']);
+
+        $date = new \DateTime($args['date']);
+
+        $calendarType = 'calendar';
+
+        if ($calendarType == 'workingDay') {
+            $hollidays = [
+                '01-01',
+                '01-05',
+                '08-05',
+                '14-07',
+                '15-08',
+                '01-11',
+                '11-11',
+                '25-12'
+            ];
+            if (function_exists('easter_date')) {
+                $hollidays[] = date('d-m', easter_date() + 86400);
+            }
+
+            $processDelayUpdated = 1;
+            for ($i = 1; $i <= $args['delay']; $i++) {
+                $tmpDate = new \DateTime($args['delay']);
+                $tmpDate->add(new \DateInterval("P{$i}D"));
+                if (in_array($tmpDate->format('N'), [6, 7]) || in_array($tmpDate->format('d-m'), $hollidays)) {
+                    ++$args['delay'];
+                }
+                ++$processDelayUpdated;
+            }
+
+            $date->add(new \DateInterval("P{$processDelayUpdated}D"));
+        } else {
+            $date->add(new \DateInterval("P{$args['delay']}D"));
+        }
+
+        return $date->format('Y-m-d H:i:s');
+    }
 }
diff --git a/src/app/resource/models/ResModelAbstract.php b/src/app/resource/models/ResModelAbstract.php
index 95a0bd6281e..12254f62d1b 100755
--- a/src/app/resource/models/ResModelAbstract.php
+++ b/src/app/resource/models/ResModelAbstract.php
@@ -15,6 +15,7 @@
 namespace Resource\models;
 
 use Doctype\models\DoctypeModel;
+use Resource\controllers\IndexingController;
 use SrcCore\models\CoreConfigModel;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
@@ -288,46 +289,7 @@ abstract class ResModelAbstract
             $defaultDate = date('c');
         }
 
-        $date = new \DateTime($defaultDate);
-
-        $calendarType = 'calendar';
-        $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'apps/maarch_entreprise/xml/features.xml']);
-
-        if ($loadedXml && !empty((string)$loadedXml->FEATURES->type_calendar)) {
-            $calendarType = (string)$loadedXml->FEATURES->type_calendar;
-        }
-
-        if ($calendarType == 'workingDay') {
-            $hollidays = [
-                '01-01',
-                '01-05',
-                '08-05',
-                '14-07',
-                '15-08',
-                '01-11',
-                '11-11',
-                '25-12'
-            ];
-            if (function_exists('easter_date')) {
-                $hollidays[] = date('d-m', easter_date() + 86400);
-            }
-
-            $processDelayUpdated = 1;
-            for ($i = 1; $i <= $processDelay; $i++) {
-                $tmpDate = new \DateTime($defaultDate);
-                $tmpDate->add(new \DateInterval("P{$i}D"));
-                if (in_array($tmpDate->format('N'), [6, 7]) || in_array($tmpDate->format('d-m'), $hollidays)) {
-                    ++$processDelay;
-                }
-                ++$processDelayUpdated;
-            }
-
-            $date->add(new \DateInterval("P{$processDelayUpdated}D"));
-        } else {
-            $date->add(new \DateInterval("P{$processDelay}D"));
-        }
-
-        return $date->format('Y-m-d H:i:s');
+        return IndexingController::calculateProcessDate(['date' => $defaultDate, 'delay' => $processDelay]);
     }
 
     public static function getCategories()
-- 
GitLab