From 63c59c2bb5928f8535c971c47a1274eefeb7f9a7 Mon Sep 17 00:00:00 2001
From: "kevin.dezaphi" <kevin.dezaphi@maarch.org>
Date: Mon, 15 Oct 2018 14:36:48 +0200
Subject: [PATCH] FEAT #8545 let visa circuit unchanged and redirect to the
 initiator entity

---
 apps/maarch_entreprise/lang/fr.php     |  8 ++--
 core/xml/actions_pages.xml             |  8 ++--
 modules/visa/interrupt_visa_entity.php | 52 --------------------------
 modules/visa/redirect_visa_entity.php  | 22 +++++++++++
 src/core/lang/lang-en.php              |  4 +-
 src/core/lang/lang-fr.php              |  4 +-
 6 files changed, 34 insertions(+), 64 deletions(-)
 delete mode 100644 modules/visa/interrupt_visa_entity.php
 create mode 100644 modules/visa/redirect_visa_entity.php

diff --git a/apps/maarch_entreprise/lang/fr.php b/apps/maarch_entreprise/lang/fr.php
index 4cf764b3929..2985621883f 100755
--- a/apps/maarch_entreprise/lang/fr.php
+++ b/apps/maarch_entreprise/lang/fr.php
@@ -4644,11 +4644,11 @@ if (!defined('_REJECTION_WORKFLOW_PREVIOUS')) {
 if (!defined('_REJECTION_WORKFLOW_PREVIOUS_DESC')) {
     define('_REJECTION_WORKFLOW_PREVIOUS_DESC', "Réinitialise la date de visa du précédent viseur présent dans le circuit de visa du document ('process_date' de la table listinstance).");
 }
-if (!defined('_INTERRUPT_WORKFLOW_ENTITY')) {
-    define('_INTERRUPT_WORKFLOW_ENTITY', 'Interrompre le circuit de visa - retour à l\'entité initiatrice');
+if (!defined('_REDIRECT_WORKFLOW_ENTITY')) {
+    define('_REDIRECT_WORKFLOW_ENTITY', 'Rediriger à l\'entité initiatrice');
 }
-if (!defined('_INTERRUPT_WORKFLOW_ENTITY_DESC')) {
-    define('_INTERRUPT_WORKFLOW_ENTITY_DESC', "Met à jour la date du visa de l'actuel viseur / signataire et de tous les viseurs suivant présents dans le circuit de visa du document ('process_date' de la table listinstance). Insère également un message d'interruption sur le viseur actuel ('process_comment' de la table listinstance) puis renvoie le document vers l'entité initiatrice de ce document.");
+if (!defined('_REDIRECT_WORKFLOW_ENTITY_DESC')) {
+    define('_REDIRECT_WORKFLOW_ENTITY_DESC', "Renvoie le document vers l'entité initiatrice du document sans modifier le circuit de visa actuel.");
 }
 if (!defined('_VISA_MAIL')) {
     define('_VISA_MAIL', 'Viser le courrier');
diff --git a/core/xml/actions_pages.xml b/core/xml/actions_pages.xml
index b636dfca2c8..345d3f5c8e9 100755
--- a/core/xml/actions_pages.xml
+++ b/core/xml/actions_pages.xml
@@ -334,10 +334,10 @@ An action page is described in a ACTIONPAGE tag :
         </COLLECTIONS>
     </ACTIONPAGE>
     <ACTIONPAGE>
-        <ID>interrupt_visa_entity</ID>
-        <LABEL>_INTERRUPT_WORKFLOW_ENTITY</LABEL>
-        <NAME>interrupt_visa_entity</NAME>
-        <DESC>_INTERRUPT_WORKFLOW_ENTITY_DESC</DESC>
+        <ID>redirect_visa_entity</ID>
+        <LABEL>_REDIRECT_WORKFLOW_ENTITY</LABEL>
+        <NAME>redirect_visa_entity</NAME>
+        <DESC>_REDIRECT_WORKFLOW_ENTITY_DESC</DESC>
         <ORIGIN>module</ORIGIN>
         <MODULE>visa</MODULE>
         <FLAG_CREATE>false</FLAG_CREATE>
diff --git a/modules/visa/interrupt_visa_entity.php b/modules/visa/interrupt_visa_entity.php
deleted file mode 100644
index 1dd801630a9..00000000000
--- a/modules/visa/interrupt_visa_entity.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-require_once 'modules/visa/class/class_modules_tools.php';
-$visa = new visa();
-
-if ($visa->currentUserSignRequired($_SESSION['doc_id']) == 'true') {
-    $label_action .=" ("._NO_USER_SIGNED_DOC.")";
-}
-
-$confirm = true;
-$etapes = ['empty_error'];
-
-function manage_empty_error($arr_id, $history, $id_action, $label_action, $status)
-{
-    $db = new Database();
-    $_SESSION['action_error'] = '';
-    $coll_id = $_SESSION['current_basket']['coll_id'];
-    $res_id = $arr_id[0];
-    $circuit_visa = new visa();
-    $sequence = $circuit_visa->getCurrentStep($res_id, $coll_id, 'VISA_CIRCUIT');
-    $stepDetails = $circuit_visa->getStepDetails($res_id, $coll_id, 'VISA_CIRCUIT', $sequence);
-
-    // Person who ends the workflow
-    if ($stepDetails['listinstance_id']) {
-        $db->query(
-            'UPDATE listinstance SET process_date = CURRENT_TIMESTAMP, process_comment = ? WHERE listinstance_id = ? AND item_id = ? AND res_id = ? AND difflist_type = ?',
-            ["A terminé le circuit avec l'action {$label_action}", $stepDetails['listinstance_id'], $stepDetails['item_id'], $res_id, 'VISA_CIRCUIT']
-        );
-    } else {
-        $db->query(
-            'UPDATE listinstance SET process_date = CURRENT_TIMESTAMP, process_comment = ? WHERE res_id = ? AND difflist_type = ? AND item_mode = ?',
-            ["A terminé le circuit avec l'action {$label_action}", $res_id, 'VISA_CIRCUIT', 'sign']
-        );
-    }
-
-    // People remaining in the workflow
-    $db->query(
-        'UPDATE listinstance SET process_date = CURRENT_TIMESTAMP, process_comment = ? WHERE res_id = ? AND difflist_type = ? AND process_date IS NULL',
-        ['Circuit Interrompu', $res_id, 'VISA_CIRCUIT']
-    );
-
-    $stmt = $db->query('SELECT initiator FROM res_letterbox WHERE res_id = ?', [$res_id]);
-    $resInitiator = $stmt->fetch();
-    $stmt = $db->query("SELECT item_id, item_type FROM listmodels WHERE object_id = ? and item_mode = 'dest'", [$resInitiator['initiator']]);
-    $resListModel = $stmt->fetch();
-    if (!empty($resListModel)) {
-        $db->query("UPDATE listinstance SET item_id = ?, item_type = ? WHERE res_id = ? AND item_mode = 'dest'", [$resListModel['item_id'], $resListModel['item_type'], $res_id]);
-        $db->query("UPDATE res_letterbox SET dest_user = ?, destination = ? WHERE res_id = ?", [$resListModel['item_id'], $resInitiator['initiator'], $res_id]);
-    }
-
-    return array('result' => $res_id . '#', 'history_msg' => '');
-}
diff --git a/modules/visa/redirect_visa_entity.php b/modules/visa/redirect_visa_entity.php
new file mode 100644
index 00000000000..9bc28db3f19
--- /dev/null
+++ b/modules/visa/redirect_visa_entity.php
@@ -0,0 +1,22 @@
+<?php
+
+$confirm = true;
+$etapes = ['empty_error'];
+
+function manage_empty_error($arr_id, $history, $id_action, $label_action, $status)
+{
+    $db = new Database();
+    $_SESSION['action_error'] = '';
+    $res_id = $arr_id[0];
+
+    $stmt = $db->query('SELECT initiator FROM res_letterbox WHERE res_id = ?', [$res_id]);
+    $resInitiator = $stmt->fetch();
+    $stmt = $db->query("SELECT item_id, item_type FROM listmodels WHERE object_id = ? and item_mode = 'dest'", [$resInitiator['initiator']]);
+    $resListModel = $stmt->fetch();
+    if (!empty($resListModel)) {
+        $db->query("UPDATE listinstance SET item_id = ?, item_type = ? WHERE res_id = ? AND item_mode = 'dest'", [$resListModel['item_id'], $resListModel['item_type'], $res_id]);
+        $db->query("UPDATE res_letterbox SET dest_user = ?, destination = ?, status = ? WHERE res_id = ?", [$resListModel['item_id'], $resInitiator['initiator'], $status, $res_id]);
+    }
+
+    return array('result' => $res_id . '#', 'history_msg' => '');
+}
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index a71b127e1aa..ce0364cbda5 100644
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -327,8 +327,8 @@ define('_REJECTION_WORKFLOW_PREVIOUS', 'Visa rejection - back to the previous au
 define('_REJECTION_WORKFLOW_PREVIOUS_DESC', 'Reset visa date of previous supervisor in visa circuit of document (\'process_date\' of listinstance table).');
 define('_REJECTION_WORKFLOW_REDACTOR', 'Visa rejection - back to the author');
 define('_REJECTION_WORKFLOW_REDACTOR_DESC', 'Reset visa date of all supervisor in visa circuit of document (\'process_date\' of listinstance table).');
-define('_INTERRUPT_WORKFLOW_ENTITY', 'Break the visa flow - back to the initiator entity');
-define('_INTERRUPT_WORKFLOW_ENTITY_DESC', 'Update visa date of current supervisor / signatory and all next supervisors in visa circuit of document (\'process_date\' of listinstance table). Insert an interrupt message on the actual visor (\'process_comment\' of listinstance table) then back the document to the initiator entity.');
+define('_REDIRECT_WORKFLOW_ENTITY', 'Back to the initiator entity');
+define('_REDIRECT_WORKFLOW_ENTITY_DESC', 'Back the document to the initiator entity without modofy the visa circuit.');
 define('_INTERRUPT_WORKFLOW', 'Break the visa flow');
 define('_INTERRUPT_WORKFLOW_DESC', 'Update visa date of current supervisor / signatory and all next supervisors in visa circuit of document (\'process_date\' of listinstance table). Insert an interrupt message on the actual visor (\'process_comment\' of listinstance table).');
 define('_PROCEED_WORKFLOW', 'continue the visa flow');
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index b25c7a109d1..8d2bd07d16b 100644
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -327,8 +327,8 @@ define('_REJECTION_WORKFLOW_PREVIOUS', 'Refuser le visa - retour au précédent
 define('_REJECTION_WORKFLOW_PREVIOUS_DESC', 'Réinitialise la date de visa du précédent viseur présent dans le circuit de visa du document (\'process_date\' de la table listinstance).');
 define('_REJECTION_WORKFLOW_REDACTOR', 'Refuser le visa - retour rédacteur');
 define('_REJECTION_WORKFLOW_REDACTOR_DESC', 'Réinitialise la date de visa de tous les viseurs présents dans le circuit de visa du document (\'process_date\' de la table listinstance).');
-define('_INTERRUPT_WORKFLOW_ENTITY', 'Interrompre le circuit de visa - retour à l\'entité initiatrice');
-define('_INTERRUPT_WORKFLOW_ENTITY_DESC', "Met à jour la date du visa de l'actuel viseur / signataire et de tous les viseurs suivant présents dans le circuit de visa du document ('process_date' de la table listinstance). Insère également un message d'interruption sur le viseur actuel ('process_comment' de la table listinstance) puis renvoie le document vers l'entité initiatrice de ce document.");
+define('_REDIRECT_WORKFLOW_ENTITY', 'Rediriger à l\'entité initiatrice');
+define('_REDIRECT_WORKFLOW_ENTITY_DESC', "Renvoie le document vers l'entité initiatrice du document sans modifier le circuit de visa actuel.");
 define('_INTERRUPT_WORKFLOW', 'Interrompre le circuit de visa');
 define('_INTERRUPT_WORKFLOW_DESC', 'Met à jour la date du visa de l\'actuel viseur / signataire et de tous les viseurs suivant présents dans le circuit de visa du document (\'process_date\' de la table listinstance). Insère également un message d\'interruption sur le viseur actuel (\'process_comment\' de la table listinstance).');
 define('_PROCEED_WORKFLOW', 'Poursuivre le circuit de visa');
-- 
GitLab