diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 6433852fa..16589fc30 100644 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -1068,7 +1068,23 @@ class Derivation switch ($routeType) { case "SEC-JOIN": $arrayOpenThread = ($flagTaskIsMultipleInstance && $flagTaskAssignTypeIsMultipleInstance)? $this->case->searchOpenPreviousTasks($currentDelegation["TAS_UID"], $currentDelegation["APP_UID"]) : array(); - $arraySiblings = $this->case->getOpenSiblingThreads($nextDel["TAS_UID"], $currentDelegation["APP_UID"], $currentDelegation["DEL_INDEX"], $currentDelegation["TAS_UID"]); + + if ($flagTaskIsMultipleInstance && $flagTaskAssignTypeIsMultipleInstance && $nextDel["ROU_PREVIOUS_TYPE"] == 'SEC-JOIN') { + $appDelegation = new AppDelegation(); + $arraySiblings = $appDelegation->getAllTasksBeforeSecJoin( + $nextDel["ROU_PREVIOUS_TASK"], + $currentDelegation["APP_UID"], + $appFields['DEL_PREVIOUS'], + 'OPEN' + ); + } else { + $arraySiblings = $this->case->getOpenSiblingThreads( + $nextDel["TAS_UID"], + $currentDelegation["APP_UID"], + $currentDelegation["DEL_INDEX"], + $currentDelegation["TAS_UID"] + ); + } if(is_array($arrayOpenThread) && is_array($arraySiblings)){ $arrayOpenThread = array_merge($arrayOpenThread, $arraySiblings); } diff --git a/workflow/engine/classes/model/AppDelegation.php b/workflow/engine/classes/model/AppDelegation.php index 6c95d0e57..d83282b14 100644 --- a/workflow/engine/classes/model/AppDelegation.php +++ b/workflow/engine/classes/model/AppDelegation.php @@ -851,7 +851,7 @@ class AppDelegation extends BaseAppDelegation * @param string $sAppUid * @return array $index */ - public static function getAllTasksBeforeSecJoin($nextTaskUid, $sAppUid, $sDelPrevious){ + public static function getAllTasksBeforeSecJoin($nextTaskUid, $sAppUid, $sDelPrevious, $threadStatus = ''){ $criteriaR = new Criteria('workflow'); $criteriaR->addSelectColumn(AppDelegationPeer::DEL_INDEX); $criteriaR->addSelectColumn(AppDelegationPeer::DEL_PREVIOUS); @@ -860,6 +860,9 @@ class AppDelegation extends BaseAppDelegation $criteriaR->add(RoutePeer::ROU_TYPE, 'SEC-JOIN', Criteria::EQUAL); $criteriaR->add(AppDelegationPeer::APP_UID, $sAppUid, Criteria::EQUAL); $criteriaR->add(AppDelegationPeer::DEL_PREVIOUS, $sDelPrevious, Criteria::EQUAL); + if (!empty($threadStatus)) { + $criteriaR->add(AppDelegationPeer::DEL_THREAD_STATUS, $threadStatus, Criteria::EQUAL); + } $rsCriteriaR = RoutePeer::doSelectRS($criteriaR); $rsCriteriaR->setFetchmode(ResultSet::FETCHMODE_ASSOC); $index = array();