From bc8453fcd33d4b67b2b93bc12a3aac74db88de02 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 6 Mar 2017 10:48:18 -0400 Subject: [PATCH] HOR-2810 --- workflow/engine/classes/model/AppDelay.php | 1 - workflow/engine/methods/cases/open.php | 4 +++ .../src/ProcessMaker/BusinessModel/Cases.php | 33 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/model/AppDelay.php b/workflow/engine/classes/model/AppDelay.php index 5f31558a2..56a4e5179 100644 --- a/workflow/engine/classes/model/AppDelay.php +++ b/workflow/engine/classes/model/AppDelay.php @@ -111,7 +111,6 @@ class AppDelay extends BaseAppDelay } else { return false; } - } } diff --git a/workflow/engine/methods/cases/open.php b/workflow/engine/methods/cases/open.php index 59fb1f87c..07f4d0219 100644 --- a/workflow/engine/methods/cases/open.php +++ b/workflow/engine/methods/cases/open.php @@ -90,6 +90,10 @@ foreach ($_GET as $k => $v) { } if( isset($_GET['action']) && ($_GET['action'] == 'jump') ) { + $oNewCase = new \ProcessMaker\BusinessModel\Cases(); + //We need to get the last index OPEN or CLOSED (by Paused cases) + //Set true because we need to check if the case is paused + $delIndex = $oNewCase->getOneLastThread($appUid, true); $case = $oCase->loadCase( $appUid, $delIndex, $_GET['action']); } else { $case = $oCase->loadCase( $appUid, $delIndex ); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index 7da5ad23c..c755d5ebb 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -3339,4 +3339,37 @@ class Cases $row = $dataSet->getRow(); return isset($row['DEL_INDEX']) ? $row['DEL_INDEX'] : 0; } + + /** + * Get last index, we can considering the pause thread + * + * This function return the last index thread and will be considered the paused cases + * Is created by Jump to and redirect the correct thread + * by default is not considered the paused thread + * in parallel cases return the first thread to find + * @param string $appUid + * @param boolean $checkCaseIsPaused + * @return integer delIndex + */ + public function getOneLastThread($appUid, $checkCaseIsPaused = false) + { + $criteria = new \Criteria('workflow'); + $criteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); + $criteria->addSelectColumn(\AppDelegationPeer::DEL_THREAD_STATUS); + $criteria->add(\AppDelegationPeer::APP_UID, $appUid, \Criteria::EQUAL); + $dataSet = \AppDelegationPeer::doSelectRS($criteria); + $dataSet->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $dataSet->next(); + $row = $dataSet->getRow(); + $delIndex = 0; + while (is_array($row)) { + $delIndex = $row['DEL_INDEX']; + if ($checkCaseIsPaused && \AppDelay::isPaused($appUid, $delIndex)) { + return $delIndex; + } + $dataSet->next(); + $row = $dataSet->getRow(); + } + return $delIndex; + } }