diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php
index a75894031..e9425af24 100755
--- a/workflow/engine/classes/class.derivation.php
+++ b/workflow/engine/classes/class.derivation.php
@@ -182,6 +182,8 @@ class Derivation
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$flagDefault = false;
+ $aSecJoin = array();
+ $count = 0;
while ($rsCriteria->next()) {
$arrayRouteData = G::array_merges($rsCriteria->getRow(), $arrayData);
@@ -206,9 +208,14 @@ class Derivation
if (trim($arrayRouteData["ROU_CONDITION"]) == "" && $arrayRouteData["ROU_NEXT_TASK"] != "-1") {
$arrayTaskData = $task->load($arrayRouteData["ROU_NEXT_TASK"]);
-
if ($arrayRouteData["ROU_TYPE"] != "SEC-JOIN" && $arrayTaskData["TAS_TYPE"] == "GATEWAYTOGATEWAY") {
- $flagAddDelegation = false;
+ $flagAddDelegation = true;
+ }
+
+ if($arrayRouteData["ROU_TYPE"] == "SEC-JOIN"){
+ $aSecJoin[$count]["ROU_PREVIOUS_TASK"] = $arrayRouteData["ROU_NEXT_TASK"];
+ $aSecJoin[$count]["ROU_PREVIOUS_TYPE"] = "SEC-JOIN";
+ $count++;
}
}
@@ -236,7 +243,6 @@ class Derivation
$arrayNextTaskBackup = $arrayNextTask;
$arrayNextTask = array();
$i = 0;
-
foreach ($arrayNextTaskBackup as $value) {
$arrayNextTaskData = $value;
@@ -249,6 +255,10 @@ class Derivation
foreach ($arrayAux as $value2) {
$arrayNextTask[++$i] = $value2;
+ foreach($aSecJoin as $rsj){
+ $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TASK"] = $rsj["ROU_PREVIOUS_TASK"];
+ $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TYPE"] = "SEC-JOIN";
+ }
}
} else {
$regexpTaskTypeToInclude = "END-MESSAGE-EVENT|END-EMAIL-EVENT";
@@ -260,6 +270,10 @@ class Derivation
}
$arrayNextTask[++$i] = $arrayNextTaskData;
+ foreach($aSecJoin as $rsj){
+ $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TASK"] = $rsj["ROU_PREVIOUS_TASK"];
+ $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TYPE"] = "SEC-JOIN";
+ }
}
}
@@ -905,7 +919,7 @@ class Derivation
if (isset($nextDel["TAS_UID_DUMMY"])) {
$taskDummy = TaskPeer::retrieveByPK($nextDel["TAS_UID_DUMMY"]);
- if (preg_match("/^(?:END-MESSAGE-EVENT|END-EMAIL-EVENT)$/", $taskDummy->getEvnType())) {
+ if (preg_match("/^(?:END-MESSAGE-EVENT|END-EMAIL-EVENT)$/", $taskDummy->getTasType())) {
//Throw Events
$this->throwEventsBetweenElementOriginAndElementDest($currentDelegation["TAS_UID"], $nextDel["TAS_UID_DUMMY"], $appFields, $flagFirstIteration, true);
}
@@ -954,11 +968,17 @@ class Derivation
case "SEC-JOIN":
$arrayOpenThread = ($flagTaskIsMultipleInstance && $flagTaskAssignTypeIsMultipleInstance)? $this->case->searchOpenPreviousTasks($currentDelegation["TAS_UID"], $currentDelegation["APP_UID"]) : array();
$arrayOpenThread = array_merge($arrayOpenThread, $this->case->getOpenSiblingThreads($nextDel["TAS_UID"], $currentDelegation["APP_UID"], $currentDelegation["DEL_INDEX"], $currentDelegation["TAS_UID"]));
-
$canDerivate = empty($arrayOpenThread);
break;
default:
$canDerivate = true;
+ //Check if the previous is a SEC-JOIN and check threads
+ if(isset($nextDel["ROU_PREVIOUS_TYPE"])){
+ if($nextDel["ROU_PREVIOUS_TYPE"] == "SEC-JOIN"){
+ $arrayOpenThread = $this->case->searchOpenPreviousTasks($nextDel["ROU_PREVIOUS_TASK"], $currentDelegation["APP_UID"]);
+ $canDerivate = empty($arrayOpenThread);
+ }
+ }
break;
}
break;
@@ -1054,7 +1074,9 @@ class Derivation
"TAS_ASSIGN_TYPE" => $arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_ASSIGN_TYPE"],
"TAS_DEF_PROC_CODE" => $arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_DEF_PROC_CODE"],
"DEL_PRIORITY" => "",
- "TAS_PARENT" => $arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_PARENT"]
+ "TAS_PARENT" => $arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_PARENT"],
+ "ROU_PREVIOUS_TYPE" => $arrayTaskNextDelNextDel["NEXT_TASK"]["ROU_PREVIOUS_TYPE"],
+ "ROU_PREVIOUS_TASK" => $arrayTaskNextDelNextDel["NEXT_TASK"]["ROU_PREVIOUS_TASK"]
);
}
diff --git a/workflow/engine/classes/model/AdditionalTables.php b/workflow/engine/classes/model/AdditionalTables.php
index b6549e701..ccc949199 100755
--- a/workflow/engine/classes/model/AdditionalTables.php
+++ b/workflow/engine/classes/model/AdditionalTables.php
@@ -40,10 +40,12 @@ function validateType ($value, $type)
$value1 = str_replace(".", "", $value1);
$value = $value1.".".$value2;
} else {
- $value2 = substr($value, $posPoint+1);
- $value1 = substr($value, 0, $posPoint);
- $value1 = str_replace(",", "", $value1);
- $value = $value1.".".$value2;
+ if($posPoint) {
+ $value2 = substr($value, $posPoint+1);
+ $value1 = substr($value, 0, $posPoint);
+ $value1 = str_replace(",", "", $value1);
+ $value = $value1.".".$value2;
+ }
}
break;
default:
diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php
index a47a68306..5e1c751f3 100755
--- a/workflow/engine/classes/model/Process.php
+++ b/workflow/engine/classes/model/Process.php
@@ -173,13 +173,13 @@ class Process extends BaseProcess
$this->setProTimeunit( 'DAYS' );
$this->setProStatus( 'ACTIVE' );
$this->setProTypeDay( '' );
- $this->setProType( 'NORMAL' );
+ $this->setProType((isset($aData["PRO_TYPE"]))? $aData["PRO_TYPE"]: "NORMAL");
$this->setProAssignment( 'FALSE' );
$this->setProShowMap( '' );
$this->setProShowMessage( '' );
$this->setProShowDelegate( '' );
$this->setProShowDynaform( '' );
- $this->setProCategory( $aData['PRO_CATEGORY'] );
+ $this->setProCategory((isset($aData["PRO_CATEGORY"]))? $aData["PRO_CATEGORY"]: "");
$this->setProSubCategory( '' );
$this->setProIndustry( '' );
$this->setProCreateDate( date("Y-m-d H:i:s") );
diff --git a/workflow/engine/classes/model/map/ProcessMapBuilder.php b/workflow/engine/classes/model/map/ProcessMapBuilder.php
index ab4a2a653..087ea7644 100755
--- a/workflow/engine/classes/model/map/ProcessMapBuilder.php
+++ b/workflow/engine/classes/model/map/ProcessMapBuilder.php
@@ -77,7 +77,7 @@ class ProcessMapBuilder
$tMap->addColumn('PRO_TYPE_DAY', 'ProTypeDay', 'string', CreoleTypes::CHAR, true, 1);
- $tMap->addColumn('PRO_TYPE', 'ProType', 'string', CreoleTypes::VARCHAR, true, 20);
+ $tMap->addColumn('PRO_TYPE', 'ProType', 'string', CreoleTypes::VARCHAR, true, 256);
$tMap->addColumn('PRO_ASSIGNMENT', 'ProAssignment', 'string', CreoleTypes::VARCHAR, true, 20);
@@ -87,6 +87,8 @@ class ProcessMapBuilder
$tMap->addColumn('PRO_SUBPROCESS', 'ProSubprocess', 'int', CreoleTypes::TINYINT, true, null);
+ $tMap->addColumn('PRO_TRI_OPEN', 'ProTriOpen', 'string', CreoleTypes::VARCHAR, true, 32);
+
$tMap->addColumn('PRO_TRI_DELETED', 'ProTriDeleted', 'string', CreoleTypes::VARCHAR, true, 32);
$tMap->addColumn('PRO_TRI_CANCELED', 'ProTriCanceled', 'string', CreoleTypes::VARCHAR, true, 32);
@@ -137,8 +139,6 @@ class ProcessMapBuilder
$tMap->addValidator('PRO_STATUS', 'validValues', 'propel.validator.ValidValuesValidator', 'ACTIVE|INACTIVE|DISABLED', 'Please select a valid Process Status.');
- $tMap->addValidator('PRO_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'NORMAL', 'Please select a valid Process Type.');
-
$tMap->addValidator('PRO_ASSIGNMENT', 'validValues', 'propel.validator.ValidValuesValidator', 'TRUE|FALSE', 'Please select a valid Process Assignment');
} // doBuild()
diff --git a/workflow/engine/classes/model/om/BaseProcessPeer.php b/workflow/engine/classes/model/om/BaseProcessPeer.php
index 40addd748..11aea4ff8 100755
--- a/workflow/engine/classes/model/om/BaseProcessPeer.php
+++ b/workflow/engine/classes/model/om/BaseProcessPeer.php
@@ -670,9 +670,6 @@ abstract class BaseProcessPeer
if ($obj->isNew() || $obj->isColumnModified(ProcessPeer::PRO_STATUS))
$columns[ProcessPeer::PRO_STATUS] = $obj->getProStatus();
- if ($obj->isNew() || $obj->isColumnModified(ProcessPeer::PRO_TYPE))
- $columns[ProcessPeer::PRO_TYPE] = $obj->getProType();
-
if ($obj->isNew() || $obj->isColumnModified(ProcessPeer::PRO_ASSIGNMENT))
$columns[ProcessPeer::PRO_ASSIGNMENT] = $obj->getProAssignment();
diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml
index f24c3bfa4..47f35964e 100755
--- a/workflow/engine/config/schema.xml
+++ b/workflow/engine/config/schema.xml
@@ -846,7 +846,7 @@