This commit is contained in:
Ronald Q
2016-08-04 15:27:09 -04:00
14 changed files with 236 additions and 216 deletions

View File

@@ -50,6 +50,28 @@ class Derivation
var $case; var $case;
protected $flagControl; protected $flagControl;
protected $flagControlMulInstance; protected $flagControlMulInstance;
private $regexpTaskTypeToInclude;
public function __construct()
{
$this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT");
}
/**
* @return mixed
*/
public function getRegexpTaskTypeToInclude()
{
return $this->regexpTaskTypeToInclude;
}
/**
* @param mixed $regexpTaskTypeToInclude
*/
public function setRegexpTaskTypeToInclude($regexpTaskTypeToInclude)
{
$this->regexpTaskTypeToInclude = $regexpTaskTypeToInclude;
}
/** /**
* prepareInformationTask * prepareInformationTask
@@ -240,15 +262,15 @@ class Derivation
foreach ($arrayNextTaskBackup as $value) { foreach ($arrayNextTaskBackup as $value) {
$arrayNextTaskData = $value; $arrayNextTaskData = $value;
$regexpTaskTypeToInclude = "GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT";
if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] != "-1" && if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] != "-1" &&
preg_match("/^(?:" . $regexpTaskTypeToInclude . ")$/", $arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"]) preg_match("/^(?:" . $this->regexpTaskTypeToInclude . ")$/", $arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"])
) { ) {
$arrayAux = $this->prepareInformation($arrayData, $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]); $arrayAux = $this->prepareInformation($arrayData, $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]);
foreach ($arrayAux as $value2) { foreach ($arrayAux as $value2) {
$arrayNextTask[++$i] = $value2; $key = ++$i;
$arrayNextTask[$key] = $value2;
$arrayNextTask[$key]['SOURCE_UID'] = $value['ROU_NEXT_TASK'];
foreach($aSecJoin as $rsj){ foreach($aSecJoin as $rsj){
$arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TASK"] = $rsj["ROU_PREVIOUS_TASK"]; $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TASK"] = $rsj["ROU_PREVIOUS_TASK"];
$arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TYPE"] = "SEC-JOIN"; $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TYPE"] = "SEC-JOIN";
@@ -262,7 +284,7 @@ class Derivation
) { ) {
$arrayNextTaskData["NEXT_TASK"]["TAS_UID"] = $arrayNextTaskData["TAS_UID"] . "/" . $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]; $arrayNextTaskData["NEXT_TASK"]["TAS_UID"] = $arrayNextTaskData["TAS_UID"] . "/" . $arrayNextTaskData["NEXT_TASK"]["TAS_UID"];
} }
$arrayNextTaskData['SOURCE_UID'] = $value['ROU_NEXT_TASK'];
$arrayNextTask[++$i] = $arrayNextTaskData; $arrayNextTask[++$i] = $arrayNextTaskData;
foreach($aSecJoin as $rsj){ foreach($aSecJoin as $rsj){
$arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TASK"] = $rsj["ROU_PREVIOUS_TASK"]; $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TASK"] = $rsj["ROU_PREVIOUS_TASK"];
@@ -781,6 +803,47 @@ class Derivation
/*----------------------------------********---------------------------------*/ /*----------------------------------********---------------------------------*/
} }
/**
* Get valid origin Task
*
* @param string $applicationUid Unique id of Case
* @param int $delIndex Delegation index
*
* @return string Returns valid origin Task
*/
private function __getTaskUidOrigin($applicationUid, $delIndex)
{
$taskUidOrigin = '';
do {
$criteria = new Criteria('workflow');
$criteria->addSelectColumn(AppDelegationPeer::DEL_PREVIOUS);
$criteria->addSelectColumn(TaskPeer::TAS_UID);
$criteria->addSelectColumn(TaskPeer::TAS_TYPE);
$criteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::INNER_JOIN);
$criteria->add(AppDelegationPeer::APP_UID, $applicationUid, Criteria::EQUAL);
$criteria->add(AppDelegationPeer::DEL_INDEX, $delIndex, Criteria::EQUAL);
$rsCriteria = AppDelegationPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
if ($rsCriteria->next()) {
$record = $rsCriteria->getRow();
if (preg_match('/^(?:' . 'NORMAL|SCRIPT\-TASK|WEBENTRYEVENT|START\-MESSAGE\-EVENT|START\-TIMER\-EVENT' . ')$/', $record['TAS_TYPE'])) {
$taskUidOrigin = $record['TAS_UID'];
}
$delIndex = $record['DEL_PREVIOUS'];
}
} while ($taskUidOrigin == '');
//Return
return $taskUidOrigin;
}
/** Derivate /** Derivate
* *
* @param array $currentDelegation * @param array $currentDelegation
@@ -806,6 +869,8 @@ class Derivation
//Get data for this DEL_INDEX current //Get data for this DEL_INDEX current
$appFields = $this->case->loadCase( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] ); $appFields = $this->case->loadCase( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] );
unset($appFields['APP_ROUTING_DATA']);
//We close the current derivation, then we'll try to derivate to each defined route //We close the current derivation, then we'll try to derivate to each defined route
$this->case->CloseCurrentDelegation( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] ); $this->case->CloseCurrentDelegation( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] );
@@ -1021,6 +1086,7 @@ class Derivation
break; break;
default: default:
$iNewDelIndex = $this->doDerivation($currentDelegation, $nextDel, $appFields, $aSP); $iNewDelIndex = $this->doDerivation($currentDelegation, $nextDel, $appFields, $aSP);
if($iNewDelIndex !== 0){ if($iNewDelIndex !== 0){
$arrayDerivationResult[] = ['DEL_INDEX' => $iNewDelIndex, 'TAS_UID' => $nextDel['TAS_UID'], 'USR_UID' => (isset($nextDel['USR_UID']))? $nextDel['USR_UID'] : '']; $arrayDerivationResult[] = ['DEL_INDEX' => $iNewDelIndex, 'TAS_UID' => $nextDel['TAS_UID'], 'USR_UID' => (isset($nextDel['USR_UID']))? $nextDel['USR_UID'] : ''];
} }
@@ -1069,15 +1135,22 @@ class Derivation
foreach ($arrayTaskNextDelNextDelegations as $key2 => $value2) { foreach ($arrayTaskNextDelNextDelegations as $key2 => $value2) {
$arrayTaskNextDelNextDel = $value2; $arrayTaskNextDelNextDel = $value2;
if($arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_ASSIGN_TYPE"] == 'MULTIPLE_INSTANCE'){ switch ($arrayTaskNextDelNextDel['NEXT_TASK']['TAS_ASSIGN_TYPE']) {
$aUserAssigned = true; case 'MANUAL':
if(!isset($arrayTaskNextDelNextDel["NEXT_TASK"]["USER_ASSIGNED"]["0"]["USR_UID"])){ $arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['USR_UID'] = '';
throw new Exception(G::LoadTranslation("ID_NO_USERS")); break;
case 'MULTIPLE_INSTANCE':
if (!isset($arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['0']['USR_UID'])) {
throw new Exception(G::LoadTranslation('ID_NO_USERS'));
} }
} else {
if (!isset($arrayTaskNextDelNextDel["NEXT_TASK"]["USER_ASSIGNED"]["USR_UID"])) { $arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['USR_UID'] = '';
throw new Exception(G::LoadTranslation("ID_NO_USERS")); break;
default:
if (!isset($arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['USR_UID'])) {
throw new Exception(G::LoadTranslation('ID_NO_USERS'));
} }
break;
} }
$rouPreType = ""; $rouPreType = "";
@@ -1088,6 +1161,7 @@ class Derivation
$rouPreType = $arrayTaskNextDelNextDel["NEXT_TASK"]["ROU_PREVIOUS_TYPE"]; $rouPreType = $arrayTaskNextDelNextDel["NEXT_TASK"]["ROU_PREVIOUS_TYPE"];
$rouPreTask = $arrayTaskNextDelNextDel["NEXT_TASK"]["ROU_PREVIOUS_TASK"]; $rouPreTask = $arrayTaskNextDelNextDel["NEXT_TASK"]["ROU_PREVIOUS_TASK"];
} }
$nextDelegationsAux[++$i] = array( $nextDelegationsAux[++$i] = array(
"TAS_UID" => $arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_UID"], "TAS_UID" => $arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_UID"],
"USR_UID" => $arrayTaskNextDelNextDel["NEXT_TASK"]["USER_ASSIGNED"]["USR_UID"], "USR_UID" => $arrayTaskNextDelNextDel["NEXT_TASK"]["USER_ASSIGNED"]["USR_UID"],
@@ -1195,15 +1269,39 @@ class Derivation
function doDerivation ($currentDelegation, $nextDel, $appFields, $aSP = null) function doDerivation ($currentDelegation, $nextDel, $appFields, $aSP = null)
{ {
$case = new \ProcessMaker\BusinessModel\Cases();
$arrayApplicationData = $case->getApplicationRecordByPk($currentDelegation['APP_UID'], [], false);
$arrayRoutingData = (!is_null($arrayApplicationData['APP_ROUTING_DATA']) && $arrayApplicationData['APP_ROUTING_DATA'] != '')? unserialize($arrayApplicationData['APP_ROUTING_DATA']) : [];
$iAppThreadIndex = $appFields['DEL_THREAD']; $iAppThreadIndex = $appFields['DEL_THREAD'];
$delType = 'NORMAL'; $delType = 'NORMAL';
$sendNotificationsMobile = false; $sendNotificationsMobile = false;
$taskNextDel = TaskPeer::retrieveByPK($nextDel["TAS_UID"]);
$taskUidOrigin = $this->__getTaskUidOrigin($currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX']);
$taskUidDest = $taskNextDel->getTasUid();
if (array_key_exists($taskUidOrigin . '/' . $taskUidDest, $arrayRoutingData)) {
$nextDel['USR_UID'] = $arrayRoutingData[$taskUidOrigin . '/' . $taskUidDest]['USR_UID'];
unset($arrayRoutingData[$taskUidOrigin . '/' . $taskUidDest]);
}
if ($taskNextDel->getTasType() == 'NORMAL' &&
$taskNextDel->getTasAssignType() != 'SELF_SERVICE' &&
(is_null($nextDel['USR_UID']) || $nextDel['USR_UID'] == '')
) {
throw new Exception(G::LoadTranslation('ID_NO_USERS'));
}
if (is_numeric( $nextDel['DEL_PRIORITY'] )) { if (is_numeric( $nextDel['DEL_PRIORITY'] )) {
$nextDel['DEL_PRIORITY'] = (isset( $nextDel['DEL_PRIORITY'] ) ? ($nextDel['DEL_PRIORITY'] >= 1 && $nextDel['DEL_PRIORITY'] <= 5 ? $nextDel['DEL_PRIORITY'] : '3') : '3'); $nextDel['DEL_PRIORITY'] = (isset( $nextDel['DEL_PRIORITY'] ) ? ($nextDel['DEL_PRIORITY'] >= 1 && $nextDel['DEL_PRIORITY'] <= 5 ? $nextDel['DEL_PRIORITY'] : '3') : '3');
} else { } else {
$nextDel['DEL_PRIORITY'] = 3; $nextDel['DEL_PRIORITY'] = 3;
} }
switch ($nextDel['TAS_ASSIGN_TYPE']) { switch ($nextDel['TAS_ASSIGN_TYPE']) {
case 'CANCEL_MI': case 'CANCEL_MI':
case 'STATIC_MI': case 'STATIC_MI':
@@ -1245,6 +1343,20 @@ class Derivation
break; break;
} }
if (array_key_exists('NEXT_ROUTING', $nextDel) && is_array($nextDel['NEXT_ROUTING']) && !empty($nextDel['NEXT_ROUTING'])) {
if (array_key_exists('TAS_UID', $nextDel['NEXT_ROUTING'])) {
$arrayRoutingData[$currentDelegation['TAS_UID'] . '/' . $nextDel['NEXT_ROUTING']['TAS_UID']] = $nextDel['NEXT_ROUTING'];
} else {
foreach ($nextDel['NEXT_ROUTING'] as $value) {
$arrayRoutingData[$currentDelegation['TAS_UID'] . '/' . $value['TAS_UID']] = $value;
}
}
}
$application = new Application();
$result = $application->update(['APP_UID' => $currentDelegation['APP_UID'], 'APP_ROUTING_DATA' => serialize($arrayRoutingData)]);
//APP_THREAD
$iAppThreadIndex = $appFields['DEL_THREAD']; $iAppThreadIndex = $appFields['DEL_THREAD'];
switch ($currentDelegation['ROU_TYPE']) { switch ($currentDelegation['ROU_TYPE']) {

View File

@@ -368,7 +368,7 @@ class PMScript
/** /**
* Evaluate the current script * Evaluate the current script
* *
* @return null * @return boolean
*/ */
public function evaluate () public function evaluate ()
{ {

View File

@@ -2379,12 +2379,6 @@ class wsBase
} }
foreach ($derive as $key => $val) { foreach ($derive as $key => $val) {
if ($val['NEXT_TASK']['TAS_ASSIGN_TYPE'] == 'MANUAL') {
$result = new wsResponse(15, G::LoadTranslation('ID_TASK_DEFINED_MANUAL_ASSIGNMENT'));
return $result;
}
//Routed to the next task, if end process then not exist user //Routed to the next task, if end process then not exist user
$nodeNext = array(); $nodeNext = array();
$usrasgdUid = null; $usrasgdUid = null;

View File

@@ -107,6 +107,8 @@ class ApplicationMapBuilder
$tMap->addColumn('APP_DRIVE_FOLDER_UID', 'AppDriveFolderUid', 'string', CreoleTypes::VARCHAR, false, 32); $tMap->addColumn('APP_DRIVE_FOLDER_UID', 'AppDriveFolderUid', 'string', CreoleTypes::VARCHAR, false, 32);
$tMap->addColumn('APP_ROUTING_DATA', 'AppRoutingData', 'string', CreoleTypes::LONGVARCHAR, false, null);
$tMap->addValidator('APP_STATUS', 'validValues', 'propel.validator.ValidValuesValidator', 'DRAFT|TO_DO|PAUSED|COMPLETED|CANCELLED', 'Please select a valid status.'); $tMap->addValidator('APP_STATUS', 'validValues', 'propel.validator.ValidValuesValidator', 'DRAFT|TO_DO|PAUSED|COMPLETED|CANCELLED', 'Please select a valid status.');
} // doBuild() } // doBuild()

View File

@@ -153,6 +153,12 @@ abstract class BaseApplication extends BaseObject implements Persistent
*/ */
protected $app_drive_folder_uid = ''; protected $app_drive_folder_uid = '';
/**
* The value for the app_routing_data field.
* @var string
*/
protected $app_routing_data;
/** /**
* Flag to prevent endless save loop, if this object is referenced * Flag to prevent endless save loop, if this object is referenced
* by another object which falls in this transaction. * by another object which falls in this transaction.
@@ -482,6 +488,17 @@ abstract class BaseApplication extends BaseObject implements Persistent
return $this->app_drive_folder_uid; return $this->app_drive_folder_uid;
} }
/**
* Get the [app_routing_data] column value.
*
* @return string
*/
public function getAppRoutingData()
{
return $this->app_routing_data;
}
/** /**
* Set the value of [app_uid] column. * Set the value of [app_uid] column.
* *
@@ -960,6 +977,28 @@ abstract class BaseApplication extends BaseObject implements Persistent
} // setAppDriveFolderUid() } // setAppDriveFolderUid()
/**
* Set the value of [app_routing_data] column.
*
* @param string $v new value
* @return void
*/
public function setAppRoutingData($v)
{
// Since the native PHP type for this column is string,
// we will cast the input to a string (if it is not).
if ($v !== null && !is_string($v)) {
$v = (string) $v;
}
if ($this->app_routing_data !== $v) {
$this->app_routing_data = $v;
$this->modifiedColumns[] = ApplicationPeer::APP_ROUTING_DATA;
}
} // setAppRoutingData()
/** /**
* Hydrates (populates) the object variables with values from the database resultset. * Hydrates (populates) the object variables with values from the database resultset.
* *
@@ -1019,12 +1058,14 @@ abstract class BaseApplication extends BaseObject implements Persistent
$this->app_drive_folder_uid = $rs->getString($startcol + 20); $this->app_drive_folder_uid = $rs->getString($startcol + 20);
$this->app_routing_data = $rs->getString($startcol + 21);
$this->resetModified(); $this->resetModified();
$this->setNew(false); $this->setNew(false);
// FIXME - using NUM_COLUMNS may be clearer. // FIXME - using NUM_COLUMNS may be clearer.
return $startcol + 21; // 21 = ApplicationPeer::NUM_COLUMNS - ApplicationPeer::NUM_LAZY_LOAD_COLUMNS). return $startcol + 22; // 22 = ApplicationPeer::NUM_COLUMNS - ApplicationPeer::NUM_LAZY_LOAD_COLUMNS).
} catch (Exception $e) { } catch (Exception $e) {
throw new PropelException("Error populating Application object", $e); throw new PropelException("Error populating Application object", $e);
@@ -1291,6 +1332,9 @@ abstract class BaseApplication extends BaseObject implements Persistent
case 20: case 20:
return $this->getAppDriveFolderUid(); return $this->getAppDriveFolderUid();
break; break;
case 21:
return $this->getAppRoutingData();
break;
default: default:
return null; return null;
break; break;
@@ -1332,6 +1376,7 @@ abstract class BaseApplication extends BaseObject implements Persistent
$keys[18] => $this->getAppDuration(), $keys[18] => $this->getAppDuration(),
$keys[19] => $this->getAppDelayDuration(), $keys[19] => $this->getAppDelayDuration(),
$keys[20] => $this->getAppDriveFolderUid(), $keys[20] => $this->getAppDriveFolderUid(),
$keys[21] => $this->getAppRoutingData(),
); );
return $result; return $result;
} }
@@ -1426,6 +1471,9 @@ abstract class BaseApplication extends BaseObject implements Persistent
case 20: case 20:
$this->setAppDriveFolderUid($value); $this->setAppDriveFolderUid($value);
break; break;
case 21:
$this->setAppRoutingData($value);
break;
} // switch() } // switch()
} }
@@ -1533,6 +1581,10 @@ abstract class BaseApplication extends BaseObject implements Persistent
$this->setAppDriveFolderUid($arr[$keys[20]]); $this->setAppDriveFolderUid($arr[$keys[20]]);
} }
if (array_key_exists($keys[21], $arr)) {
$this->setAppRoutingData($arr[$keys[21]]);
}
} }
/** /**
@@ -1628,6 +1680,10 @@ abstract class BaseApplication extends BaseObject implements Persistent
$criteria->add(ApplicationPeer::APP_DRIVE_FOLDER_UID, $this->app_drive_folder_uid); $criteria->add(ApplicationPeer::APP_DRIVE_FOLDER_UID, $this->app_drive_folder_uid);
} }
if ($this->isColumnModified(ApplicationPeer::APP_ROUTING_DATA)) {
$criteria->add(ApplicationPeer::APP_ROUTING_DATA, $this->app_routing_data);
}
return $criteria; return $criteria;
} }
@@ -1722,6 +1778,8 @@ abstract class BaseApplication extends BaseObject implements Persistent
$copyObj->setAppDriveFolderUid($this->app_drive_folder_uid); $copyObj->setAppDriveFolderUid($this->app_drive_folder_uid);
$copyObj->setAppRoutingData($this->app_routing_data);
$copyObj->setNew(true); $copyObj->setNew(true);

View File

@@ -25,7 +25,7 @@ abstract class BaseApplicationPeer
const CLASS_DEFAULT = 'classes.model.Application'; const CLASS_DEFAULT = 'classes.model.Application';
/** The total number of columns. */ /** The total number of columns. */
const NUM_COLUMNS = 21; const NUM_COLUMNS = 22;
/** The number of lazy-loaded columns. */ /** The number of lazy-loaded columns. */
const NUM_LAZY_LOAD_COLUMNS = 0; const NUM_LAZY_LOAD_COLUMNS = 0;
@@ -94,6 +94,9 @@ abstract class BaseApplicationPeer
/** the column name for the APP_DRIVE_FOLDER_UID field */ /** the column name for the APP_DRIVE_FOLDER_UID field */
const APP_DRIVE_FOLDER_UID = 'APPLICATION.APP_DRIVE_FOLDER_UID'; const APP_DRIVE_FOLDER_UID = 'APPLICATION.APP_DRIVE_FOLDER_UID';
/** the column name for the APP_ROUTING_DATA field */
const APP_ROUTING_DATA = 'APPLICATION.APP_ROUTING_DATA';
/** The PHP to DB Name Mapping */ /** The PHP to DB Name Mapping */
private static $phpNameMap = null; private static $phpNameMap = null;
@@ -105,10 +108,10 @@ abstract class BaseApplicationPeer
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/ */
private static $fieldNames = array ( private static $fieldNames = array (
BasePeer::TYPE_PHPNAME => array ('AppUid', 'AppTitle', 'AppDescription', 'AppNumber', 'AppParent', 'AppStatus', 'ProUid', 'AppProcStatus', 'AppProcCode', 'AppParallel', 'AppInitUser', 'AppCurUser', 'AppCreateDate', 'AppInitDate', 'AppFinishDate', 'AppUpdateDate', 'AppData', 'AppPin', 'AppDuration', 'AppDelayDuration', 'AppDriveFolderUid', ), BasePeer::TYPE_PHPNAME => array ('AppUid', 'AppTitle', 'AppDescription', 'AppNumber', 'AppParent', 'AppStatus', 'ProUid', 'AppProcStatus', 'AppProcCode', 'AppParallel', 'AppInitUser', 'AppCurUser', 'AppCreateDate', 'AppInitDate', 'AppFinishDate', 'AppUpdateDate', 'AppData', 'AppPin', 'AppDuration', 'AppDelayDuration', 'AppDriveFolderUid', 'AppRoutingData', ),
BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID, ApplicationPeer::APP_TITLE, ApplicationPeer::APP_DESCRIPTION, ApplicationPeer::APP_NUMBER, ApplicationPeer::APP_PARENT, ApplicationPeer::APP_STATUS, ApplicationPeer::PRO_UID, ApplicationPeer::APP_PROC_STATUS, ApplicationPeer::APP_PROC_CODE, ApplicationPeer::APP_PARALLEL, ApplicationPeer::APP_INIT_USER, ApplicationPeer::APP_CUR_USER, ApplicationPeer::APP_CREATE_DATE, ApplicationPeer::APP_INIT_DATE, ApplicationPeer::APP_FINISH_DATE, ApplicationPeer::APP_UPDATE_DATE, ApplicationPeer::APP_DATA, ApplicationPeer::APP_PIN, ApplicationPeer::APP_DURATION, ApplicationPeer::APP_DELAY_DURATION, ApplicationPeer::APP_DRIVE_FOLDER_UID, ), BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID, ApplicationPeer::APP_TITLE, ApplicationPeer::APP_DESCRIPTION, ApplicationPeer::APP_NUMBER, ApplicationPeer::APP_PARENT, ApplicationPeer::APP_STATUS, ApplicationPeer::PRO_UID, ApplicationPeer::APP_PROC_STATUS, ApplicationPeer::APP_PROC_CODE, ApplicationPeer::APP_PARALLEL, ApplicationPeer::APP_INIT_USER, ApplicationPeer::APP_CUR_USER, ApplicationPeer::APP_CREATE_DATE, ApplicationPeer::APP_INIT_DATE, ApplicationPeer::APP_FINISH_DATE, ApplicationPeer::APP_UPDATE_DATE, ApplicationPeer::APP_DATA, ApplicationPeer::APP_PIN, ApplicationPeer::APP_DURATION, ApplicationPeer::APP_DELAY_DURATION, ApplicationPeer::APP_DRIVE_FOLDER_UID, ApplicationPeer::APP_ROUTING_DATA, ),
BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'APP_TITLE', 'APP_DESCRIPTION', 'APP_NUMBER', 'APP_PARENT', 'APP_STATUS', 'PRO_UID', 'APP_PROC_STATUS', 'APP_PROC_CODE', 'APP_PARALLEL', 'APP_INIT_USER', 'APP_CUR_USER', 'APP_CREATE_DATE', 'APP_INIT_DATE', 'APP_FINISH_DATE', 'APP_UPDATE_DATE', 'APP_DATA', 'APP_PIN', 'APP_DURATION', 'APP_DELAY_DURATION', 'APP_DRIVE_FOLDER_UID', ), BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'APP_TITLE', 'APP_DESCRIPTION', 'APP_NUMBER', 'APP_PARENT', 'APP_STATUS', 'PRO_UID', 'APP_PROC_STATUS', 'APP_PROC_CODE', 'APP_PARALLEL', 'APP_INIT_USER', 'APP_CUR_USER', 'APP_CREATE_DATE', 'APP_INIT_DATE', 'APP_FINISH_DATE', 'APP_UPDATE_DATE', 'APP_DATA', 'APP_PIN', 'APP_DURATION', 'APP_DELAY_DURATION', 'APP_DRIVE_FOLDER_UID', 'APP_ROUTING_DATA', ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ) BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, )
); );
/** /**
@@ -118,10 +121,10 @@ abstract class BaseApplicationPeer
* e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0
*/ */
private static $fieldKeys = array ( private static $fieldKeys = array (
BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'AppTitle' => 1, 'AppDescription' => 2, 'AppNumber' => 3, 'AppParent' => 4, 'AppStatus' => 5, 'ProUid' => 6, 'AppProcStatus' => 7, 'AppProcCode' => 8, 'AppParallel' => 9, 'AppInitUser' => 10, 'AppCurUser' => 11, 'AppCreateDate' => 12, 'AppInitDate' => 13, 'AppFinishDate' => 14, 'AppUpdateDate' => 15, 'AppData' => 16, 'AppPin' => 17, 'AppDuration' => 18, 'AppDelayDuration' => 19, 'AppDriveFolderUid' => 20, ), BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'AppTitle' => 1, 'AppDescription' => 2, 'AppNumber' => 3, 'AppParent' => 4, 'AppStatus' => 5, 'ProUid' => 6, 'AppProcStatus' => 7, 'AppProcCode' => 8, 'AppParallel' => 9, 'AppInitUser' => 10, 'AppCurUser' => 11, 'AppCreateDate' => 12, 'AppInitDate' => 13, 'AppFinishDate' => 14, 'AppUpdateDate' => 15, 'AppData' => 16, 'AppPin' => 17, 'AppDuration' => 18, 'AppDelayDuration' => 19, 'AppDriveFolderUid' => 20, 'AppRoutingData' => 21, ),
BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID => 0, ApplicationPeer::APP_TITLE => 1, ApplicationPeer::APP_DESCRIPTION => 2, ApplicationPeer::APP_NUMBER => 3, ApplicationPeer::APP_PARENT => 4, ApplicationPeer::APP_STATUS => 5, ApplicationPeer::PRO_UID => 6, ApplicationPeer::APP_PROC_STATUS => 7, ApplicationPeer::APP_PROC_CODE => 8, ApplicationPeer::APP_PARALLEL => 9, ApplicationPeer::APP_INIT_USER => 10, ApplicationPeer::APP_CUR_USER => 11, ApplicationPeer::APP_CREATE_DATE => 12, ApplicationPeer::APP_INIT_DATE => 13, ApplicationPeer::APP_FINISH_DATE => 14, ApplicationPeer::APP_UPDATE_DATE => 15, ApplicationPeer::APP_DATA => 16, ApplicationPeer::APP_PIN => 17, ApplicationPeer::APP_DURATION => 18, ApplicationPeer::APP_DELAY_DURATION => 19, ApplicationPeer::APP_DRIVE_FOLDER_UID => 20, ), BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID => 0, ApplicationPeer::APP_TITLE => 1, ApplicationPeer::APP_DESCRIPTION => 2, ApplicationPeer::APP_NUMBER => 3, ApplicationPeer::APP_PARENT => 4, ApplicationPeer::APP_STATUS => 5, ApplicationPeer::PRO_UID => 6, ApplicationPeer::APP_PROC_STATUS => 7, ApplicationPeer::APP_PROC_CODE => 8, ApplicationPeer::APP_PARALLEL => 9, ApplicationPeer::APP_INIT_USER => 10, ApplicationPeer::APP_CUR_USER => 11, ApplicationPeer::APP_CREATE_DATE => 12, ApplicationPeer::APP_INIT_DATE => 13, ApplicationPeer::APP_FINISH_DATE => 14, ApplicationPeer::APP_UPDATE_DATE => 15, ApplicationPeer::APP_DATA => 16, ApplicationPeer::APP_PIN => 17, ApplicationPeer::APP_DURATION => 18, ApplicationPeer::APP_DELAY_DURATION => 19, ApplicationPeer::APP_DRIVE_FOLDER_UID => 20, ApplicationPeer::APP_ROUTING_DATA => 21, ),
BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'APP_TITLE' => 1, 'APP_DESCRIPTION' => 2, 'APP_NUMBER' => 3, 'APP_PARENT' => 4, 'APP_STATUS' => 5, 'PRO_UID' => 6, 'APP_PROC_STATUS' => 7, 'APP_PROC_CODE' => 8, 'APP_PARALLEL' => 9, 'APP_INIT_USER' => 10, 'APP_CUR_USER' => 11, 'APP_CREATE_DATE' => 12, 'APP_INIT_DATE' => 13, 'APP_FINISH_DATE' => 14, 'APP_UPDATE_DATE' => 15, 'APP_DATA' => 16, 'APP_PIN' => 17, 'APP_DURATION' => 18, 'APP_DELAY_DURATION' => 19, 'APP_DRIVE_FOLDER_UID' => 20, ), BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'APP_TITLE' => 1, 'APP_DESCRIPTION' => 2, 'APP_NUMBER' => 3, 'APP_PARENT' => 4, 'APP_STATUS' => 5, 'PRO_UID' => 6, 'APP_PROC_STATUS' => 7, 'APP_PROC_CODE' => 8, 'APP_PARALLEL' => 9, 'APP_INIT_USER' => 10, 'APP_CUR_USER' => 11, 'APP_CREATE_DATE' => 12, 'APP_INIT_DATE' => 13, 'APP_FINISH_DATE' => 14, 'APP_UPDATE_DATE' => 15, 'APP_DATA' => 16, 'APP_PIN' => 17, 'APP_DURATION' => 18, 'APP_DELAY_DURATION' => 19, 'APP_DRIVE_FOLDER_UID' => 20, 'APP_ROUTING_DATA' => 21, ),
BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ) BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, )
); );
/** /**
@@ -264,6 +267,8 @@ abstract class BaseApplicationPeer
$criteria->addSelectColumn(ApplicationPeer::APP_DRIVE_FOLDER_UID); $criteria->addSelectColumn(ApplicationPeer::APP_DRIVE_FOLDER_UID);
$criteria->addSelectColumn(ApplicationPeer::APP_ROUTING_DATA);
} }
const COUNT = 'COUNT(APPLICATION.APP_UID)'; const COUNT = 'COUNT(APPLICATION.APP_UID)';

View File

@@ -42,6 +42,7 @@
<column name="APP_DURATION" type="DOUBLE" default="0"/> <column name="APP_DURATION" type="DOUBLE" default="0"/>
<column name="APP_DELAY_DURATION" type="DOUBLE" default="0"/> <column name="APP_DELAY_DURATION" type="DOUBLE" default="0"/>
<column name="APP_DRIVE_FOLDER_UID" type="VARCHAR" size="32" default="" required="false"/> <column name="APP_DRIVE_FOLDER_UID" type="VARCHAR" size="32" default="" required="false"/>
<column name="APP_ROUTING_DATA" type="LONGVARCHAR" />
<validator column="APP_STATUS"> <validator column="APP_STATUS">
<rule name="validValues" value="DRAFT|TO_DO|PAUSED|COMPLETED|CANCELLED" message="Please select a valid status." /> <rule name="validValues" value="DRAFT|TO_DO|PAUSED|COMPLETED|CANCELLED" message="Please select a valid status." />
</validator> </validator>

View File

@@ -33,6 +33,7 @@ CREATE TABLE `APPLICATION`
`APP_DURATION` DOUBLE default 0, `APP_DURATION` DOUBLE default 0,
`APP_DELAY_DURATION` DOUBLE default 0, `APP_DELAY_DURATION` DOUBLE default 0,
`APP_DRIVE_FOLDER_UID` VARCHAR(32) default '', `APP_DRIVE_FOLDER_UID` VARCHAR(32) default '',
`APP_ROUTING_DATA` MEDIUMTEXT,
PRIMARY KEY (`APP_UID`), PRIMARY KEY (`APP_UID`),
KEY `indexApp`(`PRO_UID`, `APP_STATUS`, `APP_UID`), KEY `indexApp`(`PRO_UID`, `APP_STATUS`, `APP_UID`),
KEY `indexAppNumber`(`APP_NUMBER`), KEY `indexAppNumber`(`APP_NUMBER`),

View File

@@ -122,13 +122,10 @@ try {
$oDerivation = new Derivation(); $oDerivation = new Derivation();
$aCurrentDerivation = array ('APP_UID' => $_SESSION['APPLICATION'],'DEL_INDEX' => $_SESSION['INDEX'],'APP_STATUS' => $sStatus,'TAS_UID' => $_SESSION['TASK'],'ROU_TYPE' => $_POST['form']['ROU_TYPE'] $aCurrentDerivation = array ('APP_UID' => $_SESSION['APPLICATION'],'DEL_INDEX' => $_SESSION['INDEX'],'APP_STATUS' => $sStatus,'TAS_UID' => $_SESSION['TASK'],'ROU_TYPE' => $_POST['form']['ROU_TYPE']
); );
$aPInformation = $oDerivation->prepareInformation( array ('USER_UID' => $_SESSION['USER_LOGGED'],'APP_UID' => $_SESSION['APPLICATION'],'DEL_INDEX' => $_SESSION['INDEX'])
$aPInformation = $oDerivation->prepareInformation( array ('USER_UID' => $_SESSION['USER_LOGGED'],'APP_UID' => $_SESSION['APPLICATION'],'DEL_INDEX' => $_SESSION['INDEX'] );
) ); $oRoute = new \ProcessMaker\Core\RoutingScreen();
$nextTasks = $oRoute->mergeDataDerivation($_POST['form']['TASKS'], $aPInformation);
//$_POST['form']['TASKS'] is the information after the cases_ScreenDerivation
$nextTasks = G::array_merges($aPInformation,$_POST['form']['TASKS']);
$arrayDerivationResult = $oDerivation->derivate($aCurrentDerivation, $nextTasks); $arrayDerivationResult = $oDerivation->derivate($aCurrentDerivation, $nextTasks);
if (!empty($arrayDerivationResult)) { if (!empty($arrayDerivationResult)) {

View File

@@ -1054,6 +1054,9 @@ try {
if(isset($aValues['ROU_CONDITION'])){ if(isset($aValues['ROU_CONDITION'])){
$aFields['TASK'][$sKey]['NEXT_TASK']['ROU_CONDITION'] = '<input type="hidden" name="' . $hiddenName . '[ROU_CONDITION]" id="' . $hiddenName . '[ROU_CONDITION]" value="' . $aValues['ROU_CONDITION'] . '">'; $aFields['TASK'][$sKey]['NEXT_TASK']['ROU_CONDITION'] = '<input type="hidden" name="' . $hiddenName . '[ROU_CONDITION]" id="' . $hiddenName . '[ROU_CONDITION]" value="' . $aValues['ROU_CONDITION'] . '">';
} }
if(isset($aValues['SOURCE_UID'])){
$aFields['TASK'][$sKey]['NEXT_TASK']['SOURCE_UID'] = '<input type="hidden" name="' . $hiddenName . '[SOURCE_UID]" id="' . $hiddenName . '[SOURCE_UID]" value="' . $aValues['SOURCE_UID'] . '">';
}
} }
} }

View File

@@ -415,7 +415,8 @@ class Light
$aData['APP_UID'] = $app_uid; $aData['APP_UID'] = $app_uid;
$aData['DEL_INDEX'] = $del_index; $aData['DEL_INDEX'] = $del_index;
$aData['USER_UID'] = $usr_uid; $aData['USER_UID'] = $usr_uid;
$derive = $oDerivation->prepareInformation( $aData ); $oRoute = new \ProcessMaker\Core\RoutingScreen();
$derive = $oRoute->prepareInformation($aData);
$response = array(); $response = array();
foreach ($derive as $sKey => &$aValues) { foreach ($derive as $sKey => &$aValues) {
$sPriority = ''; //set priority value $sPriority = ''; //set priority value

View File

@@ -5,187 +5,33 @@ namespace ProcessMaker\Core;
class RoutingScreen extends \Derivation class RoutingScreen extends \Derivation
{ {
/** public function __construct()
* @param array $arrayData
* @param string $taskUid
* @return array
* @throws \Exception
*/
public function prepareInformation(array $arrayData, $taskUid = "")
{ {
try { parent::__construct();
$this->case = new \Cases(); $this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT");
$task = new \Task();
$arrayApplicationData = $this->case->loadCase($arrayData["APP_UID"]);
$arrayNextTask = array();
$arrayNextTaskDefault = array();
$i = 0;
$flagDefault = false;
$aSecJoin = array();
$count = 0;
$routeData = $this->getRouteData($arrayData, $taskUid);
foreach ($routeData as $arrayRouteData) {
if ((int)($arrayRouteData["ROU_DEFAULT"]) == 1) {
$arrayNextTaskDefault = $arrayRouteData;
$flagDefault = true;
continue;
} }
$flagAddDelegation = $this->executeScript($arrayRouteData, $arrayApplicationData["APP_DATA"]); public function mergeDataDerivation($post, $prepareInformation)
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 = true;
}
if ($arrayRouteData['ROU_TYPE'] == 'SEC-JOIN') {
$aSecJoin[$count]['ROU_PREVIOUS_TASK'] = $arrayRouteData['ROU_NEXT_TASK'];
$aSecJoin[$count]['ROU_PREVIOUS_TYPE'] = 'SEC-JOIN';
$count++;
}
}
if ($arrayRouteData['ROU_TYPE'] == 'EVALUATE' && !empty($arrayNextTask)) {
$flagAddDelegation = false;
}
if ($flagAddDelegation &&
preg_match("/^(?:EVALUATE|PARALLEL-BY-EVALUATION)$/", $arrayRouteData["ROU_TYPE"]) &&
trim($arrayRouteData["ROU_CONDITION"]) == ""
) {
$flagAddDelegation = false;
}
if ($flagAddDelegation) {
$arrayNextTask[++$i] = $this->prepareInformationTask($arrayRouteData);
}
}
if (!$arrayNextTask && count($arrayNextTaskDefault) > 0) {
$arrayNextTask[++$i] = $this->prepareInformationTask($arrayNextTaskDefault);
}
//Check Task GATEWAYTOGATEWAY, END-MESSAGE-EVENT, END-EMAIL-EVENT
$arrayNextTaskBackup = $arrayNextTask;
$arrayNextTask = array();
$i = 0;
foreach ($arrayNextTaskBackup as $value) {
$arrayNextTaskData = $value;
$regexpTaskTypeToInclude = "GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT";
if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] != "-1" &&
preg_match("/^(?:" . $regexpTaskTypeToInclude . ")$/", $arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"])
) {
$arrayAux = $this->prepareInformation($arrayData, $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]);
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|INTERMEDIATE-THROW-EMAIL-EVENT";
if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] == "-1" &&
preg_match("/^(?:" . $regexpTaskTypeToInclude . ")$/", $arrayNextTaskData["TAS_TYPE"])
) {
$arrayNextTaskData["NEXT_TASK"]["TAS_UID"] = $arrayNextTaskData["TAS_UID"] . "/" . $arrayNextTaskData["NEXT_TASK"]["TAS_UID"];
}
$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";
}
//Start-Timer with Script-task
$criteriaE = new \Criteria("workflow");
$criteriaE->addSelectColumn(\ElementTaskRelationPeer::ELEMENT_UID);
$criteriaE->addJoin(\BpmnEventPeer::EVN_UID, \ElementTaskRelationPeer::ELEMENT_UID, \Criteria::LEFT_JOIN);
$criteriaE->add(\ElementTaskRelationPeer::TAS_UID, $arrayNextTaskData["TAS_UID"], \Criteria::EQUAL);
$criteriaE->add(\BpmnEventPeer::EVN_TYPE, 'START', \Criteria::EQUAL);
$criteriaE->add(\BpmnEventPeer::EVN_MARKER, 'TIMER', \Criteria::EQUAL);
$rsCriteriaE = \AppDelegationPeer::doSelectRS($criteriaE);
$rsCriteriaE->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteriaE->next()) {
if ($arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"] == "SCRIPT-TASK") {
if (isset($arrayNextTaskData["NEXT_TASK"]["USER_ASSIGNED"]["USR_UID"]) && $arrayNextTaskData["NEXT_TASK"]["USER_ASSIGNED"]["USR_UID"] == "") {
$useruid = "00000000000000000000000000000001";
$userFields = $this->getUsersFullNameFromArray($useruid);
$arrayNextTask[$i]["NEXT_TASK"]["USER_ASSIGNED"] = $userFields;
}
}
}
}
}
//1. There is no rule
if (empty($arrayNextTask)) {
$bpmn = new \ProcessMaker\Project\Bpmn();
throw new \Exception(\G::LoadTranslation(
'ID_NO_DERIVATION_' . (($bpmn->exists($arrayApplicationData['PRO_UID'])) ? 'BPMN_RULE' : 'RULE')
));
}
//Return
return $arrayNextTask;
} catch (\Exception $e) {
throw $e;
}
}
public function getRouteData($arrayData, $taskUid)
{ {
$criteria = new \Criteria("workflow"); $iPost = count($post);
$aDataMerged = array();
$criteria->addSelectColumn(\RoutePeer::TAS_UID); $flagJumpTask = false;
$criteria->addSelectColumn(\RoutePeer::ROU_NEXT_TASK); foreach ($prepareInformation as $key => $nextTask) {
$criteria->addSelectColumn(\RoutePeer::ROU_TYPE); $aDataMerged[$key] = $nextTask['NEXT_TASK'];
$criteria->addSelectColumn(\RoutePeer::ROU_DEFAULT); unset($aDataMerged[$key]['USER_ASSIGNED']);
$criteria->addSelectColumn(\RoutePeer::ROU_CONDITION); $aDataMerged[$key]['DEL_PRIORITY'] = '';
for ($i = 1; $i <= $iPost; $i++) {
if ($taskUid != "") { if(isset($post[$i]['SOURCE_UID']) && ($nextTask['NEXT_TASK']['TAS_UID'] === $post[$i]['SOURCE_UID']) && ($post[$i]['SOURCE_UID'] !== $post[$i]['TAS_UID'])){
$criteria->add(\RoutePeer::TAS_UID, $taskUid, \Criteria::EQUAL); $flagJumpTask = true;
$criteria->addAscendingOrderByColumn(\RoutePeer::ROU_CASE); $aDataMerged[$key]['NEXT_ROUTING'][] = $post[$i];
$rsCriteria = \RoutePeer::doSelectRS($criteria);
} else {
$criteria->addJoin(\AppDelegationPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::LEFT_JOIN);
$criteria->addJoin(\AppDelegationPeer::TAS_UID, \RoutePeer::TAS_UID, \Criteria::LEFT_JOIN);
$criteria->add(\AppDelegationPeer::APP_UID, $arrayData["APP_UID"], \Criteria::EQUAL);
$criteria->add(\AppDelegationPeer::DEL_INDEX, $arrayData["DEL_INDEX"], \Criteria::EQUAL);
$criteria->addAscendingOrderByColumn(\RoutePeer::ROU_CASE);
$rsCriteria = \AppDelegationPeer::doSelectRS($criteria);
} }
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$array = array();
while ($rsCriteria->next()) {
$array[] = \G::array_merges($rsCriteria->getRow(), $arrayData);
} }
return $array;
} }
//If flagJumpTask is false the template does not Jump Intermediate Events
public function executeScript($arrayRouteData, $appData) if(!$flagJumpTask){
{ $aDataMerged = $post;
//Evaluate the condition if there are conditions defined
$flagAddDelegation = true;
if (trim($arrayRouteData["ROU_CONDITION"]) != "" && $arrayRouteData["ROU_TYPE"] != "SELECT") {
\G::LoadClass("pmScript");
$pmScript = new \PMScript();
$pmScript->setFields($appData);
$pmScript->setScript($arrayRouteData["ROU_CONDITION"]);
$flagAddDelegation = $pmScript->evaluate();
} }
return $flagAddDelegation; return $aDataMerged;
} }
} }

View File

@@ -2106,7 +2106,7 @@ class BpmnWorkflow extends Project\Bpmn
//Update Process //Update Process
$process = \ProcessPeer::retrieveByPk($this->wp->getUid()); $process = \ProcessPeer::retrieveByPk($this->wp->getUid());
$arrayActionDone = ($process->getProActionDone() != '')? unserialize($process->getProActionDone()) : []; $arrayActionDone = (!is_null($process->getProActionDone()) && $process->getProActionDone() != '')? unserialize($process->getProActionDone()) : [];
$arrayActionDone[] = $actionDone; $arrayActionDone[] = $actionDone;
$this->wp->update(['PRO_ACTION_DONE' => serialize($arrayActionDone)]); $this->wp->update(['PRO_ACTION_DONE' => serialize($arrayActionDone)]);

View File

@@ -148,7 +148,7 @@
<tr height="0"> <tr height="0">
<td colspan="2"> <td colspan="2">
{$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} {$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}{$data.NEXT_TASK.SOURCE_UID}
</td> </td>
</tr> </tr>