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