PM-2576 "Support for Timer-Event (End-points and Backend)"

- Se han implementado los siguientes End-points:
    GET    /api/1.0/{workspace}/project/{prj_uid}/timer-events
    GET    /api/1.0/{workspace}/project/{prj_uid}/timer-event/{tmrevn_uid}
    GET    /api/1.0/{workspace}/project/{prj_uid}/timer-event/event/{evn_uid}
    POST   /api/1.0/{workspace}/project/{prj_uid}/timer-event
    PUT    /api/1.0/{workspace}/project/{prj_uid}/timer-event/{tmrevn_uid}
    DELETE /api/1.0/{workspace}/project/{prj_uid}/timer-event/{tmrevn_uid}
- Se han implementado la funcionalidad y los metodos necesarios para este nuevo elemento
  en el modulo "BPMN-DESIGNER Backend"
- Se han agregado las validaciones necesarias para filtrar los nuevos tipos de tasks en el
  listado del "New case"
- Se han agregado los metodos necesarios para este nuevo elemento en los modulos Export and Import
- Se han agregado los metodos necesarios para este nuevo elemento en el modulo "Delete process"
- Se a implementado la funcionalidad para este nuevo elemento en el modulo "Running case"
This commit is contained in:
Victor Saisa Lopez
2015-06-30 12:04:53 -04:00
parent a8deb38b4f
commit 8b21d386d2
21 changed files with 8907 additions and 5373 deletions

View File

@@ -249,7 +249,7 @@ class Cases
$rows[] = array('uid' => 'char', 'value' => 'char');
$tasks = array();
$arrayTaskTypeToExclude = array("WEBENTRYEVENT", "END-MESSAGE-EVENT", "START-MESSAGE-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "INTERMEDIATE-CATCH-MESSAGE-EVENT", "SCRIPT-TASK");
$arrayTaskTypeToExclude = array("WEBENTRYEVENT", "END-MESSAGE-EVENT", "START-MESSAGE-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "INTERMEDIATE-CATCH-MESSAGE-EVENT", "SCRIPT-TASK", "START-TIMER-EVENT", "INTERMEDIATE-CATCH-TIMER-EVENT");
$c = new Criteria();
$c->clearSelectColumns();
@@ -7014,3 +7014,4 @@ class Cases
return $unserializedData;
}
}

View File

@@ -112,7 +112,7 @@ class Derivation
$arrayTaskData["NEXT_TASK"]["TAS_PARENT"] = "";
}
$arrayTaskData["NEXT_TASK"]["USER_ASSIGNED"] = (!in_array($arrayTaskData["NEXT_TASK"]["TAS_TYPE"], array("GATEWAYTOGATEWAY", "END-MESSAGE-EVENT", "SCRIPT-TASK", "END-EMAIL-EVENT")))? $this->getNextAssignedUser($arrayTaskData) : array("USR_UID" => "", "USR_FULLNAME" => "");
$arrayTaskData["NEXT_TASK"]["USER_ASSIGNED"] = (!in_array($arrayTaskData["NEXT_TASK"]["TAS_TYPE"], array("GATEWAYTOGATEWAY", "END-MESSAGE-EVENT", "SCRIPT-TASK", "INTERMEDIATE-CATCH-TIMER-EVENT", "END-EMAIL-EVENT")))? $this->getNextAssignedUser($arrayTaskData) : array("USR_UID" => "", "USR_FULLNAME" => "");
}
//Return
@@ -237,7 +237,7 @@ class Derivation
}
} else {
if (in_array($arrayNextTaskData["TAS_TYPE"], array("END-MESSAGE-EVENT", "END-EMAIL-EVENT")) &&
$arrayNextTaskData["NEXT_TASK"]["TAS_UID"] == "-1"
$arrayNextTaskData["NEXT_TASK"]["TAS_UID"] == "-1"
) {
$arrayNextTaskData["NEXT_TASK"]["TAS_UID"] = $arrayNextTaskData["TAS_UID"] . "/" . $arrayNextTaskData["NEXT_TASK"]["TAS_UID"];
}
@@ -593,13 +593,20 @@ class Derivation
//We close the current derivation, then we'll try to derivate to each defined route
$this->case->CloseCurrentDelegation( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] );
//Get data for current delegation (current Task)
$task = TaskPeer::retrieveByPK($currentDelegation["TAS_UID"]);
$currentDelegation["TAS_ASSIGN_TYPE"] = $task->getTasAssignType();
$currentDelegation["TAS_MI_COMPLETE_VARIABLE"] = $task->getTasMiCompleteVariable();
$currentDelegation["TAS_MI_INSTANCE_VARIABLE"] = $task->getTasMiInstanceVariable();
//Count how many tasks should be derivated.
//$countNextTask = count($nextDelegations);
//$removeList = true;
foreach ($nextDelegations as $nextDel) {
//BpmnEvent - END-MESSAGE-EVENT - Check and get unique id
//BpmnEvent - END-EMAIL-EVENT - Check and get unique id
//BpmnEvent - END-MESSAGE-EVENT, END-EMAIL-EVENT
//Check and get unique id
if (preg_match("/^(.{32})\/(\-1)$/", $nextDel["TAS_UID"], $arrayMatch)) {
$nextDel["TAS_UID"] = $arrayMatch[2];
$nextDel["TAS_UID_DUMMY"] = $arrayMatch[1];
@@ -624,12 +631,6 @@ class Derivation
continue;
}
}
//get TAS_ASSIGN_TYPE for current Delegation
$oTask = new Task();
$aTask = $oTask->load( $currentDelegation['TAS_UID'] );
$currentDelegation['TAS_ASSIGN_TYPE'] = $aTask['TAS_ASSIGN_TYPE'];
$currentDelegation['TAS_MI_COMPLETE_VARIABLE'] = $aTask['TAS_MI_COMPLETE_VARIABLE'];
$currentDelegation['TAS_MI_INSTANCE_VARIABLE'] = $aTask['TAS_MI_INSTANCE_VARIABLE'];
//get open threads
$openThreads = $this->case->GetOpenThreads( $currentDelegation['APP_UID'] );
@@ -637,6 +638,9 @@ class Derivation
if (($nextDel['TAS_UID'] == TASK_FINISH_PROCESS) && (($openThreads + 1) > 1)) {
$nextDel['TAS_UID'] = TASK_FINISH_TASK;
}
$taskNextDel = TaskPeer::retrieveByPK($nextDel["TAS_UID"]); //Get data for next delegation (next Task)
switch ($nextDel['TAS_UID']) {
case TASK_FINISH_PROCESS:
/*Close all delegations of $currentDelegation['APP_UID'] */
@@ -644,29 +648,22 @@ class Derivation
$this->case->closeAllThreads( $currentDelegation['APP_UID'] );
//I think we need to change the APP_STATUS to completed,
//BpmnEvent - END-MESSAGE-EVENT and END-EMAIL-EVENT
//BpmnEvent - END-MESSAGE-EVENT, END-EMAIL-EVENT
if (isset($nextDel["TAS_UID_DUMMY"])) {
$taskDummy = TaskPeer::retrieveByPK($nextDel["TAS_UID_DUMMY"]);
switch ($taskDummy->getTasType()) {
case "END-MESSAGE-EVENT":
//Throw Message-Events - BpmnEvent - END-MESSAGE-EVENT
$case = new \ProcessMaker\BusinessModel\Cases();
$case->throwMessageEventBetweenElementOriginAndElementDest(
$currentDelegation["TAS_UID"],
$nextDel["TAS_UID_DUMMY"],
$appFields
);
$case->throwMessageEventBetweenElementOriginAndElementDest($currentDelegation["TAS_UID"], $nextDel["TAS_UID_DUMMY"], $appFields);
break;
case "END-EMAIL-EVENT":
//Email Event
$emailEvent = new \ProcessMaker\BusinessModel\EmailEvent();
$emailEvent->emailEventBetweenElementOriginAndElementDest(
$currentDelegation["TAS_UID"],
$nextDel["TAS_UID_DUMMY"],
$appFields
);
$emailEvent->emailEventBetweenElementOriginAndElementDest($currentDelegation["TAS_UID"], $nextDel["TAS_UID_DUMMY"], $appFields);
break;
}
}
@@ -730,21 +727,15 @@ class Derivation
$case = new \ProcessMaker\BusinessModel\Cases();
$case->throwMessageEventBetweenElementOriginAndElementDest($currentDelegation["TAS_UID"], $nextDel["TAS_UID"], $appFields);
//Email Event
//Throw Email-Events
$emailEvent = new \ProcessMaker\BusinessModel\EmailEvent();
$emailEvent->emailEventBetweenElementOriginAndElementDest(
$currentDelegation["TAS_UID"],
$nextDel["TAS_UID"],
$appFields
);
$emailEvent->emailEventBetweenElementOriginAndElementDest($currentDelegation["TAS_UID"], $nextDel["TAS_UID"], $appFields);
//Derivate
$aSP = isset( $aSP ) ? $aSP : null;
$taskNextDel = \TaskPeer::retrieveByPK($nextDel["TAS_UID"]);
$iNewDelIndex = $this->doDerivation( $currentDelegation, $nextDel, $appFields, $aSP );
//Execute Script-Task
@@ -753,12 +744,11 @@ class Derivation
$appFields["APP_DATA"] = $scriptTask->execScriptByActivityUid($nextDel["TAS_UID"], $appFields);
//Create record in table APP_ASSIGN_SELF_SERVICE_VALUE
$task = new Task();
$arrayNextTaskData = $task->load($nextDel["TAS_UID"]);
$arrayTaskTypeToExclude = array("SCRIPT-TASK");
if (!in_array($arrayNextTaskData["TAS_TYPE"], array("SCRIPT-TASK"))) {
if ($arrayNextTaskData["TAS_ASSIGN_TYPE"] == "SELF_SERVICE" && trim($arrayNextTaskData["TAS_GROUP_VARIABLE"]) != "") {
$nextTaskGroupVariable = trim($arrayNextTaskData["TAS_GROUP_VARIABLE"], " @#");
if (!in_array($taskNextDel->getTasType(), $arrayTaskTypeToExclude)) {
if ($taskNextDel->getTasAssignType() == "SELF_SERVICE" && trim($taskNextDel->getTasGroupVariable()) != "") {
$nextTaskGroupVariable = trim($taskNextDel->getTasGroupVariable(), " @#");
if (isset($appFields["APP_DATA"][$nextTaskGroupVariable]) && trim($appFields["APP_DATA"][$nextTaskGroupVariable]) != "") {
$appAssignSelfServiceValue = new AppAssignSelfServiceValue();
@@ -768,8 +758,8 @@ class Derivation
}
}
//Check if $nextDel["TAS_UID"] is Script-Task
if (!is_null($taskNextDel) && $taskNextDel->getTasType() == "SCRIPT-TASK") {
//Check if $taskNextDel is Script-Task
if ($taskNextDel->getTasType() == "SCRIPT-TASK") {
$this->case->CloseCurrentDelegation($currentDelegation["APP_UID"], $iNewDelIndex);
//Get for $nextDel["TAS_UID"] your next Task
@@ -823,12 +813,9 @@ class Derivation
$users->refreshTotal($appFields['CURRENT_USER_UID'], 'remove', 'inbox');
}
} elseif ($nextDel['TAS_UID'] != '-1') {
$taskNex = TaskPeer::retrieveByPK($nextDel['TAS_UID']);
$aTask = $taskNex->toArray( BasePeer::TYPE_FIELDNAME );
$arrayTaskTypeToExclude = array("WEBENTRYEVENT", "END-MESSAGE-EVENT", "START-MESSAGE-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "INTERMEDIATE-CATCH-MESSAGE-EVENT", "SCRIPT-TASK", "INTERMEDIATE-CATCH-TIMER-EVENT");
$arrayTaskTypeToExclude = array("WEBENTRYEVENT", "END-MESSAGE-EVENT", "START-MESSAGE-EVENT", "INTERMEDIATE-THROW-MESSAGE-EVENT", "INTERMEDIATE-CATCH-MESSAGE-EVENT", "SCRIPT-TASK");
if (!in_array($aTask['TAS_TYPE'], $arrayTaskTypeToExclude)) {
if (!in_array($taskNextDel->getTasType(), $arrayTaskTypeToExclude)) {
if (!empty($iNewDelIndex) && empty($aSP)) {
$oAppDel = AppDelegationPeer::retrieveByPK( $appFields['APP_UID'], $iNewDelIndex );
$aFields = $oAppDel->toArray( BasePeer::TYPE_FIELDNAME );
@@ -854,7 +841,9 @@ class Derivation
}
}
} else {
if (!in_array($aTask['TAS_TYPE'], array("SCRIPT-TASK"))) {
$arrayTaskTypeToExclude = array("SCRIPT-TASK");
if ($removeList && !in_array($taskNextDel->getTasType(), $arrayTaskTypeToExclude)) {
$oRow = ApplicationPeer::retrieveByPK($appFields["APP_UID"]);
$aFields = $oRow->toArray( BasePeer::TYPE_FIELDNAME );
@@ -869,6 +858,7 @@ class Derivation
}
}
/*----------------------------------********---------------------------------*/
unset( $aSP );
$removeList = false;
@@ -977,19 +967,19 @@ class Derivation
// set the initial date to null the time its created
$aNewCase = $this->case->startCase( $aSP['TAS_UID'], $aSP['USR_UID'], true, $appFields);
$taskNextDel = TaskPeer::retrieveByPK($aSP["TAS_UID"]); //Sub-Process
//Create record in table APP_ASSIGN_SELF_SERVICE_VALUE
$taskSub = new Task();
$arrayNextTaskData = $taskSub->load($aSP["TAS_UID"]);
if ($arrayNextTaskData["TAS_ASSIGN_TYPE"] == "SELF_SERVICE" && trim($arrayNextTaskData["TAS_GROUP_VARIABLE"]) != "") {
$nextTaskGroupVariable = trim($arrayNextTaskData["TAS_GROUP_VARIABLE"], " @#");
if ($taskNextDel->getTasAssignType() == "SELF_SERVICE" && trim($taskNextDel->getTasGroupVariable()) != "") {
$nextTaskGroupVariable = trim($taskNextDel->getTasGroupVariable(), " @#");
if (isset($appFields["APP_DATA"][$nextTaskGroupVariable]) && trim($appFields["APP_DATA"][$nextTaskGroupVariable]) != "") {
$appAssignSelfServiceValue = new AppAssignSelfServiceValue();
$appAssignSelfServiceValue->create($aNewCase['APPLICATION'], $aNewCase['INDEX'], array("PRO_UID" => $aNewCase['PROCESS'], "TAS_UID" => $aSP["TAS_UID"], "GRP_UID" => trim($appFields["APP_DATA"][$nextTaskGroupVariable])));
$appAssignSelfServiceValue->create($aNewCase["APPLICATION"], $aNewCase["INDEX"], array("PRO_UID" => $aNewCase["PROCESS"], "TAS_UID" => $aSP["TAS_UID"], "GRP_UID" => trim($appFields["APP_DATA"][$nextTaskGroupVariable])));
}
}
//Copy case variables to sub-process case
$aFields = unserialize( $aSP['SP_VARIABLES_OUT'] );
$aNewFields = array ();
@@ -1284,3 +1274,4 @@ class Derivation
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,5 @@
<?php
class TimerEvent extends BaseTimerEvent
{
}

View File

@@ -0,0 +1,5 @@
<?php
class TimerEventPeer extends BaseTimerEventPeer
{
}

View File

@@ -75,7 +75,7 @@ class ScriptTaskMapBuilder
$tMap->addColumn('SCRTAS_OBJ_UID', 'ScrtasObjUid', 'string', CreoleTypes::VARCHAR, true, 32);
$tMap->addValidator('SCRTAS_OBJ_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'TRIGGER', 'Please set a valid value for TMREVN_DEF_STATUS');
$tMap->addValidator('SCRTAS_OBJ_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'TRIGGER', 'Please set a valid value for SCRTAS_OBJ_TYPE');
} // doBuild()

View File

@@ -159,13 +159,13 @@ class TaskMapBuilder
$tMap->addColumn('TAS_SELFSERVICE_EXECUTION', 'TasSelfserviceExecution', 'string', CreoleTypes::VARCHAR, false, 15);
$tMap->addValidator('TAS_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'NORMAL|ADHOC|SUBPROCESS|HIDDEN|GATEWAYTOGATEWAY|WEBENTRYEVENT|END-MESSAGE-EVENT|START-MESSAGE-EVENT|INTERMEDIATE-THROW-MESSAGE-EVENT|INTERMEDIATE-CATCH-MESSAGE-EVENT|SCRIPT-TASK|END-EMAIL-EVENT', 'Please enter a valid value for TAS_TYPE');
$tMap->addValidator('TAS_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'NORMAL|ADHOC|SUBPROCESS|HIDDEN|GATEWAYTOGATEWAY|WEBENTRYEVENT|END-MESSAGE-EVENT|START-MESSAGE-EVENT|INTERMEDIATE-THROW-MESSAGE-EVENT|INTERMEDIATE-CATCH-MESSAGE-EVENT|SCRIPT-TASK|START-TIMER-EVENT|INTERMEDIATE-CATCH-TIMER-EVENT|END-EMAIL-EVENT', 'Please set a valid value for TAS_TYPE');
$tMap->addValidator('TAS_TIMEUNIT', 'validValues', 'propel.validator.ValidValuesValidator', 'MINUTES|HOURS|DAYS|WEEKS|MONTHS', 'Please select a valid value for TAS_TIMEUNIT.');
$tMap->addValidator('TAS_ALERT', 'validValues', 'propel.validator.ValidValuesValidator', 'TRUE|FALSE', 'Please select a valid value for TAS_ALERT.');
$tMap->addValidator('TAS_ASSIGN_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'BALANCED|MANUAL|EVALUATE|REPORT_TO|SELF_SERVICE|STATIC_MI|CANCEL_MI', 'Please select a valid value for TAS_ASSIGN_TYPE.');
$tMap->addValidator('TAS_ASSIGN_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'BALANCED|MANUAL|EVALUATE|REPORT_TO|SELF_SERVICE|STATIC_MI|CANCEL_MI', 'Please select a valid value for TAS_ASSIGN_TYPE.');
$tMap->addValidator('TAS_ASSIGN_LOCATION', 'validValues', 'propel.validator.ValidValuesValidator', 'TRUE|FALSE', 'Please select a valid value for TAS_ASSIGN_LOCATION.');
@@ -199,4 +199,4 @@ class TaskMapBuilder
} // doBuild()
} // TaskMapBuilder
} // TaskMapBuilder

View File

@@ -0,0 +1,102 @@
<?php
require_once 'propel/map/MapBuilder.php';
include_once 'creole/CreoleTypes.php';
/**
* This class adds structure of 'TIMER_EVENT' table to 'workflow' DatabaseMap object.
*
*
*
* These statically-built map classes are used by Propel to do runtime db structure discovery.
* For example, the createSelectSql() method checks the type of a given column used in an
* ORDER BY clause to know whether it needs to apply SQL to make the ORDER BY case-insensitive
* (i.e. if it's a text column type).
*
* @package workflow.classes.model.map
*/
class TimerEventMapBuilder
{
/**
* The (dot-path) name of this class
*/
const CLASS_NAME = 'classes.model.map.TimerEventMapBuilder';
/**
* The database map.
*/
private $dbMap;
/**
* Tells us if this DatabaseMapBuilder is built so that we
* don't have to re-build it every time.
*
* @return boolean true if this DatabaseMapBuilder is built, false otherwise.
*/
public function isBuilt()
{
return ($this->dbMap !== null);
}
/**
* Gets the databasemap this map builder built.
*
* @return the databasemap
*/
public function getDatabaseMap()
{
return $this->dbMap;
}
/**
* The doBuild() method builds the DatabaseMap
*
* @return void
* @throws PropelException
*/
public function doBuild()
{
$this->dbMap = Propel::getDatabaseMap('workflow');
$tMap = $this->dbMap->addTable('TIMER_EVENT');
$tMap->setPhpName('TimerEvent');
$tMap->setUseIdGenerator(false);
$tMap->addPrimaryKey('TMREVN_UID', 'TmrevnUid', 'string', CreoleTypes::VARCHAR, true, 32);
$tMap->addColumn('PRJ_UID', 'PrjUid', 'string', CreoleTypes::VARCHAR, true, 32);
$tMap->addColumn('EVN_UID', 'EvnUid', 'string', CreoleTypes::VARCHAR, true, 32);
$tMap->addColumn('TMREVN_OPTION', 'TmrevnOption', 'string', CreoleTypes::VARCHAR, true, 50);
$tMap->addColumn('TMREVN_START_DATE', 'TmrevnStartDate', 'int', CreoleTypes::DATE, false, null);
$tMap->addColumn('TMREVN_END_DATE', 'TmrevnEndDate', 'int', CreoleTypes::DATE, false, null);
$tMap->addColumn('TMREVN_DAY', 'TmrevnDay', 'string', CreoleTypes::VARCHAR, true, 2);
$tMap->addColumn('TMREVN_HOUR', 'TmrevnHour', 'string', CreoleTypes::VARCHAR, true, 2);
$tMap->addColumn('TMREVN_MINUTE', 'TmrevnMinute', 'string', CreoleTypes::VARCHAR, true, 2);
$tMap->addColumn('TMREVN_CONFIGURATION_DATA', 'TmrevnConfigurationData', 'string', CreoleTypes::LONGVARCHAR, true, null);
$tMap->addColumn('TMREVN_NEXT_RUN_DATE', 'TmrevnNextRunDate', 'int', CreoleTypes::TIMESTAMP, false, null);
$tMap->addColumn('TMREVN_LAST_RUN_DATE', 'TmrevnLastRunDate', 'int', CreoleTypes::TIMESTAMP, false, null);
$tMap->addColumn('TMREVN_LAST_EXECUTION_DATE', 'TmrevnLastExecutionDate', 'int', CreoleTypes::TIMESTAMP, false, null);
$tMap->addColumn('TMREVN_STATUS', 'TmrevnStatus', 'string', CreoleTypes::VARCHAR, true, 25);
$tMap->addValidator('TMREVN_OPTION', 'validValues', 'propel.validator.ValidValuesValidator', 'HOURLY|DAILY|MONTHLY|EVERY|ONE-DATE-TIME|WAIT-FOR|WAIT-UNTIL-SPECIFIED-DATE-TIME', 'Please set a valid value for TMREVN_OPTION');
$tMap->addValidator('TMREVN_STATUS', 'validValues', 'propel.validator.ValidValuesValidator', 'ACTIVE|INACTIVE|PROCESSED', 'Please set a valid value for TMREVN_STATUS');
} // doBuild()
} // TimerEventMapBuilder

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff