diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php
index fa57411e4..6ad37ca7a 100755
--- a/workflow/engine/classes/class.derivation.php
+++ b/workflow/engine/classes/class.derivation.php
@@ -605,9 +605,6 @@ class Derivation
break;
case "MULTIPLE_INSTANCE":
$userFields = $this->getUsersFullNameFromArray($this->getAllUsersFromAnyTask($nextAssignedTask["TAS_UID"]));
- if(empty($userFields)){
- throw (new Exception( G::LoadTranslation( 'ID_NO_USERS' ) ));
- }
break;
case "MULTIPLE_INSTANCE_VALUE_BASED":
$arrayApplicationData = $this->case->loadCase($tasInfo["APP_UID"]);
@@ -676,7 +673,7 @@ class Derivation
*
* @return void
*/
- private function throwEventsBetweenElementOriginAndElementDest($elementOriginUid, $elementDestUid, array $arrayApplicationData, $flagEventExecuteBeforeGateway = true, $flagEventExecuteAfterGateway = true)
+ private function throwEventsBetweenElementOriginAndElementDest($elementOriginUid, $elementDestUid, array $arrayApplicationData, $flagEventExecuteBeforeGateway = true, $flagEventExecuteAfterGateway = true, $rouCondition="")
{
try {
//Verify if the Project is BPMN
@@ -693,7 +690,7 @@ class Derivation
"elementOrigin" => ["uid" => $elementOriginUid, "type" => "bpmnActivity"],
"elementDest" => ["uid" => $elementDestUid, "type" => "bpmnActivity"]
];
-
+
foreach ($arrayElement as $key => $value) {
$arrayElementTaskRelationData = $elementTaskRelation->getElementTaskRelationWhere(
[
@@ -729,6 +726,10 @@ class Derivation
$elementDestType
);
+ if($elementDestUid == "-1"){
+ $arrayElement = $this->throwElementToEnd($elementOriginUid, $rouCondition);
+ }
+
foreach ($arrayElement as $value) {
switch ($value[1]) {
case "bpmnEvent":
@@ -758,6 +759,48 @@ class Derivation
}
}
+ /**
+ * Throw all events to End Process
+ *
+ * @param string $currentTask Task uid
+ *
+ * @return void
+ */
+ private function throwElementToEnd($currentTask, $routeCondition){
+ try{
+ $bpmnFlow = new BpmnFlow();
+ $rsCriFlow = $bpmnFlow->getElementOriginToElementDest($currentTask);
+ $arrayElement = array();
+ $count = 0;
+ $continue = false;
+ if($rsCriFlow->next()){
+ $continue = true;
+ $row = $rsCriFlow->getRow();
+ }
+ while ($continue) {
+ $array[0] = $row["FLO_ELEMENT_DEST"];
+ $array[1] = $row["FLO_ELEMENT_DEST_TYPE"];
+ $arrayElement[$count++] = $array;
+ $continue = false;
+ if($rsCriFlow->next()){
+ $continue = true;
+ $row = $rsCriFlow->getRow();
+ }else{
+ $rsCriFlow = $bpmnFlow->getElementOriginToElementDest($row["FLO_ELEMENT_DEST"],$routeCondition);
+ $routeCondition = '';
+ $continue = false;
+ if($rsCriFlow->next()){
+ $continue = true;
+ $row = $rsCriFlow->getRow();
+ }
+ }
+ }
+ return $arrayElement;
+ } catch (Exception $e) {
+ throw $e;
+ }
+ }
+
/**
* Throw Events for the Case
*
@@ -800,6 +843,7 @@ class Derivation
}
}
}
+ return $currentDestiny;
}
/**
@@ -1018,7 +1062,7 @@ class Derivation
//I think we need to change the APP_STATUS to completed,
//BpmnEvent
- $this->throwAllRouteInFlow($currentDelegation["TAS_UID"],$appFields);
+ $this->throwEventsBetweenElementOriginAndElementDest($currentDelegation["TAS_UID"], $nextDel["TAS_UID"], $appFields, $flagFirstIteration, true, $nextDel['ROU_CONDITION']);
break;
case TASK_FINISH_TASK:
$iAppThreadIndex = $appFields['DEL_THREAD'];
diff --git a/workflow/engine/classes/model/BpmnFlow.php b/workflow/engine/classes/model/BpmnFlow.php
index d5bf44443..e7212372f 100755
--- a/workflow/engine/classes/model/BpmnFlow.php
+++ b/workflow/engine/classes/model/BpmnFlow.php
@@ -116,6 +116,22 @@ class BpmnFlow extends BaseBpmnFlow
return $flow;
}
+
+ public static function getElementOriginToElementDest($floOrigin, $floCondition = ''){
+ $criFlow = new Criteria("workflow");
+ $criFlow->addSelectColumn(BpmnFlowPeer::FLO_ELEMENT_ORIGIN);
+ $criFlow->addSelectColumn(BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE);
+ $criFlow->addSelectColumn(BpmnFlowPeer::FLO_ELEMENT_DEST);
+ $criFlow->addSelectColumn(BpmnFlowPeer::FLO_ELEMENT_DEST_TYPE);
+ $criFlow->addSelectColumn(BpmnFlowPeer::FLO_CONDITION);
+ $criFlow->add(BpmnFlowPeer::FLO_ELEMENT_ORIGIN, $floOrigin, Criteria::EQUAL);
+ if($floCondition != ''){
+ $criFlow->add(BpmnFlowPeer::FLO_CONDITION, $floCondition, Criteria::EQUAL);
+ }
+ $rsCriFlow = RoutePeer::doSelectRS($criFlow);
+ $rsCriFlow->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ return $rsCriFlow;
+ }
/*public static function select($select, $where = array())
{
diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php
index 26252d49d..2961a5817 100755
--- a/workflow/engine/methods/cases/cases_Step.php
+++ b/workflow/engine/methods/cases/cases_Step.php
@@ -984,6 +984,9 @@ try {
$aFields['TASK'][$sKey]['NEXT_TASK']['ROU_PREVIOUS_TASK'] = '';
$aFields['TASK'][$sKey]['NEXT_TASK']['ROU_PREVIOUS_TYPE'] = '';
}
+ if(isset($aValues['ROU_CONDITION'])){
+ $aFields['TASK'][$sKey]['NEXT_TASK']['ROU_CONDITION'] = '';
+ }
}
}
diff --git a/workflow/engine/templates/cases/cases_ScreenDerivation.html b/workflow/engine/templates/cases/cases_ScreenDerivation.html
index 47732198d..638c82f42 100755
--- a/workflow/engine/templates/cases/cases_ScreenDerivation.html
+++ b/workflow/engine/templates/cases/cases_ScreenDerivation.html
@@ -7,7 +7,7 @@
-
+
∫
|
@@ -148,7 +148,7 @@
|
|
- {$data.NEXT_TASK.TAS_ASSIGN_TYPE}{$data.NEXT_TASK.TAS_DEF_PROC_CODE}{$data.NEXT_TASK.DEL_PRIORITY}{$data.NEXT_TASK.TAS_PARENT}{$data.NEXT_TASK.ROU_PREVIOUS_TASK}{$data.NEXT_TASK.ROU_PREVIOUS_TYPE}
+ {$data.NEXT_TASK.TAS_ASSIGN_TYPE}{$data.NEXT_TASK.TAS_DEF_PROC_CODE}{$data.NEXT_TASK.DEL_PRIORITY}{$data.NEXT_TASK.TAS_PARENT}{$data.NEXT_TASK.ROU_PREVIOUS_TASK}{$data.NEXT_TASK.ROU_PREVIOUS_TYPE}{$data.NEXT_TASK.ROU_CONDITION}
|