This commit is contained in:
Paula Quispe
2017-04-17 10:34:30 -04:00
parent 266be585ea
commit e722fa19db
3 changed files with 137 additions and 187 deletions

View File

@@ -2156,9 +2156,73 @@ class wsBase
return $result; return $result;
} }
} }
/**
* Execute the trigger defined in the steps
* This function is used when the case is derived from abe, Soap, PMFDerivateCase
*
* @param array $appData contain all the information about the case
* @param string $tasUid
* @param string $stepType
* @param string $stepUidObj
* @param string $triggerType
* @param string $labelAssigment
* @return string $varTriggers
*/
function executeTriggerFromDerivate($appData, $tasUid, $stepType, $stepUidObj, $triggerType, $labelAssigment = '')
{
$varTriggers = "\n";
$oCase = new Cases();
//Execute triggers before assignment
$aTriggers = $oCase->loadTriggers($tasUid, $stepType, $stepUidObj, $triggerType);
if (count( $aTriggers ) > 0) {
$varTriggers = $varTriggers . "<br /><b>".$labelAssigment."</b><br />";
$oPMScript = new PMScript();
foreach ($aTriggers as $aTrigger) {
//Set variables
$params = new stdClass();
$params->appData = $appData;
if ($this->stored_system_variables) {
$params->option = "STORED SESSION";
$params->SID = $this->wsSessionId;
}
$appFields["APP_DATA"] = array_merge($appData, G::getSystemConstants($params));
//PMScript
$oPMScript->setFields( $appFields['APP_DATA'] );
$bExecute = true;
if ($aTrigger['ST_CONDITION'] !== '') {
$oPMScript->setScript( $aTrigger['ST_CONDITION'] );
$bExecute = $oPMScript->evaluate();
}
if ($bExecute) {
$oPMScript->setScript( $aTrigger['TRI_WEBBOT'] );
$oPMScript->execute();
$trigger = TriggersPeer::retrieveByPk($aTrigger["TRI_UID"]);
$varTriggers = $varTriggers . "&nbsp;- " . nl2br(htmlentities($trigger->getTriTitle(), ENT_QUOTES)) . "<br />";
$appFields['APP_DATA'] = $oPMScript->aFields;
unset($appFields['APP_STATUS']);
unset($appFields['APP_PROC_STATUS']);
unset($appFields['APP_PROC_CODE']);
unset($appFields['APP_PIN']);
$oCase->updateCase($caseId, $appFields);
}
}
}
return $varTriggers;
}
/** /**
* derivate Case moves the case to the next task in the process according to the routing rules * Derivate Case moves the case to the next task in the process according to the routing rules
* *
* @param string $userId * @param string $userId
* @param string $caseId * @param string $caseId
@@ -2178,11 +2242,9 @@ class wsBase
$_SESSION["INDEX"] = $delIndex; $_SESSION["INDEX"] = $delIndex;
$_SESSION["USER_LOGGED"] = $userId; $_SESSION["USER_LOGGED"] = $userId;
//Define variables
$sStatus = 'TO_DO'; $sStatus = 'TO_DO';
$varResponse = ''; $varResponse = '';
$varTriggers = "\n";
$previousAppData = array(); $previousAppData = array();
if ($delIndex == '') { if ($delIndex == '') {
@@ -2218,17 +2280,9 @@ class wsBase
return $result; return $result;
} }
$oCriteria = new Criteria( 'workflow' ); //Validate if the case is paused or cancelled
$oCriteria->addSelectColumn( AppDelayPeer::APP_UID ); $oAppDelay = new AppDelay();
$oCriteria->addSelectColumn( AppDelayPeer::APP_DEL_INDEX ); $aRow = $oAppDelay->getCasesCancelOrPaused($caseId);
$oCriteria->add( AppDelayPeer::APP_TYPE, '' );
$oCriteria->add( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'PAUSE' )->addOr( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'CANCEL' ) ) );
$oCriteria->addAscendingOrderByColumn( AppDelayPeer::APP_ENABLE_ACTION_DATE );
$oDataset = AppDelayPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$aRow = $oDataset->getRow();
if (is_array($aRow)) { if (is_array($aRow)) {
if (isset( $aRow['APP_DISABLE_ACTION_USER'] ) && $aRow['APP_DISABLE_ACTION_USER'] != 0 && isset( $aRow['APP_DISABLE_ACTION_DATE'] ) && $aRow['APP_DISABLE_ACTION_DATE'] != '') { if (isset( $aRow['APP_DISABLE_ACTION_USER'] ) && $aRow['APP_DISABLE_ACTION_USER'] != 0 && isset( $aRow['APP_DISABLE_ACTION_DATE'] ) && $aRow['APP_DISABLE_ACTION_DATE'] != '') {
$result = new wsResponse( 19, G::LoadTranslation( 'ID_CASE_IN_STATUS' ) . " " . $aRow['APP_TYPE'] ); $result = new wsResponse( 19, G::LoadTranslation( 'ID_CASE_IN_STATUS' ) . " " . $aRow['APP_TYPE'] );
@@ -2264,101 +2318,13 @@ class wsBase
$previousAppData = $oPMScript->aFields; $previousAppData = $oPMScript->aFields;
} }
if ($bExecuteTriggersBeforeAssignment) {
//Execute triggers before assignment //Execute triggers before assignment
$aTriggers = $oCase->loadTriggers( $appdel['TAS_UID'], 'ASSIGN_TASK', - 1, 'BEFORE' ); if ($bExecuteTriggersBeforeAssignment) {
$varTriggers = $this->executeTriggerFromDerivate($appFields["APP_DATA"], $appdel['TAS_UID'], 'ASSIGN_TASK', -1, 'BEFORE', "-= Before Assignment =-");
if (count( $aTriggers ) > 0) {
$varTriggers = $varTriggers . "<br /><b>-= Before Assignment =-</b><br />";
$oPMScript = new PMScript();
foreach ($aTriggers as $aTrigger) {
//Set variables
$params = new stdClass();
$params->appData = $appFields["APP_DATA"];
if ($this->stored_system_variables) {
$params->option = "STORED SESSION";
$params->SID = $this->wsSessionId;
} }
$appFields["APP_DATA"] = array_merge( $appFields["APP_DATA"], G::getSystemConstants( $params ) ); //Execute triggers before routing
$varTriggers = $this->executeTriggerFromDerivate($appFields["APP_DATA"], $appdel['TAS_UID'], 'ASSIGN_TASK', -2, 'BEFORE', "-= Before Derivation =-");
//PMScript
$oPMScript->setFields( $appFields['APP_DATA'] );
$bExecute = true;
if ($aTrigger['ST_CONDITION'] !== '') {
$oPMScript->setScript( $aTrigger['ST_CONDITION'] );
$bExecute = $oPMScript->evaluate();
}
if ($bExecute) {
$oPMScript->setScript( $aTrigger['TRI_WEBBOT'] );
$oPMScript->execute();
$trigger = TriggersPeer::retrieveByPk($aTrigger["TRI_UID"]);
$varTriggers = $varTriggers . "&nbsp;- " . nl2br(htmlentities($trigger->getTriTitle(), ENT_QUOTES)) . "<br />";
//$appFields = $oCase->loadCase( $caseId );
$appFields['APP_DATA'] = $oPMScript->aFields;
unset($appFields['APP_STATUS']);
unset($appFields['APP_PROC_STATUS']);
unset($appFields['APP_PROC_CODE']);
unset($appFields['APP_PIN']);
$oCase->updateCase( $caseId, $appFields );
}
}
}
}
//Execute triggers before derivation BEFORE_ROUTING
$aTriggers = $oCase->loadTriggers( $appdel['TAS_UID'], 'ASSIGN_TASK', - 2, 'BEFORE' );
if (count( $aTriggers ) > 0) {
$varTriggers .= "<b>-= Before Derivation =-</b><br/>";
$oPMScript = new PMScript();
foreach ($aTriggers as $aTrigger) {
//Set variables
$params = new stdClass();
$params->appData = $appFields["APP_DATA"];
if ($this->stored_system_variables) {
$params->option = "STORED SESSION";
$params->SID = $this->wsSessionId;
}
$appFields["APP_DATA"] = array_merge( $appFields["APP_DATA"], G::getSystemConstants( $params ) );
//PMScript
$oPMScript->setFields( $appFields['APP_DATA'] );
$bExecute = true;
if ($aTrigger['ST_CONDITION'] !== '') {
$oPMScript->setScript( $aTrigger['ST_CONDITION'] );
$bExecute = $oPMScript->evaluate();
}
if ($bExecute) {
$oPMScript->setScript( $aTrigger['TRI_WEBBOT'] );
$oPMScript->execute();
$oTrigger = TriggersPeer::retrieveByPk( $aTrigger['TRI_UID'] );
$varTriggers .= "&nbsp;- " . nl2br( htmlentities( $oTrigger->getTriTitle(), ENT_QUOTES ) ) . "<br/>";
//$appFields = $oCase->loadCase( $caseId );
$appFields['APP_DATA'] = $oPMScript->aFields;
unset($appFields['APP_STATUS']);
unset($appFields['APP_PROC_STATUS']);
unset($appFields['APP_PROC_CODE']);
unset($appFields['APP_PIN']);
//$appFields['APP_DATA']['APPLICATION'] = $caseId;
$oCase->updateCase( $caseId, $appFields );
}
}
}
$oDerivation = new Derivation(); $oDerivation = new Derivation();
if (!empty($tasks)) { if (!empty($tasks)) {
@@ -2402,8 +2368,8 @@ class wsBase
$nodeNext['TAS_DEF_PROC_CODE'] = $val['NEXT_TASK']['TAS_DEF_PROC_CODE']; $nodeNext['TAS_DEF_PROC_CODE'] = $val['NEXT_TASK']['TAS_DEF_PROC_CODE'];
$nodeNext['DEL_PRIORITY'] = $appdel['DEL_PRIORITY']; $nodeNext['DEL_PRIORITY'] = $appdel['DEL_PRIORITY'];
$nodeNext['TAS_PARENT'] = $val['NEXT_TASK']['TAS_PARENT']; $nodeNext['TAS_PARENT'] = $val['NEXT_TASK']['TAS_PARENT'];
$nodeNext['ROU_CONDITION'] = $val['ROU_CONDITION']; $nodeNext['ROU_PREVIOUS_TYPE'] = (isset($val['NEXT_TASK']['ROU_PREVIOUS_TYPE'])) ? $val['NEXT_TASK']['ROU_PREVIOUS_TYPE'] : '';
$nodeNext['ROU_PREVIOUS_TASK'] = (isset($val['NEXT_TASK']['ROU_PREVIOUS_TASK'])) ? $val['NEXT_TASK']['ROU_PREVIOUS_TASK'] : '';
$nextDelegations[] = $nodeNext; $nextDelegations[] = $nodeNext;
$varResponse = $varResponse . (($varResponse != '') ? ',' : '') . $val['NEXT_TASK']['TAS_TITLE'] . $usrasgdUserName; $varResponse = $varResponse . (($varResponse != '') ? ',' : '') . $val['NEXT_TASK']['TAS_TITLE'] . $usrasgdUserName;
} }
@@ -2414,27 +2380,26 @@ class wsBase
$appFields['TAS_UID'] = $derive['TAS_UID']; $appFields['TAS_UID'] = $derive['TAS_UID'];
} }
$row = array (); //Get from the route information the nextTask
$oCriteria = new Criteria( 'workflow' ); $nextTaskUid = $appdel['TAS_UID'];
$del = DBAdapter::getStringDelimiter(); $nextRouteType = '';
$oCriteria->addSelectColumn( RoutePeer::ROU_TYPE ); do {
$oCriteria->addSelectColumn( RoutePeer::ROU_NEXT_TASK ); $oRoute = new \Route();
$oCriteria->add( RoutePeer::TAS_UID, $appdel['TAS_UID'] ); $nextRouteTask = $oRoute->getNextRouteByTask($nextTaskUid);
$oDataset = TaskPeer::doSelectRS( $oCriteria ); $prefix = '';
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); if (isset($nextRouteTask['ROU_NEXT_TASK'])) {
$oDataset->next(); $nextTaskUid = $nextRouteTask['ROU_NEXT_TASK'];
$nextRouteType = $nextRouteTask['ROU_TYPE'];
while ($aRow = $oDataset->getRow()) { $prefix = substr($nextTaskUid, 0, 4);
$row[] = array('ROU_TYPE' => $aRow['ROU_TYPE'], 'ROU_NEXT_TASK' => $aRow['ROU_NEXT_TASK']);
$oDataset->next();
} }
} while ($prefix == 'gtg-');
$aCurrentDerivation = array ( $aCurrentDerivation = array (
'APP_UID' => $caseId, 'APP_UID' => $caseId,
'DEL_INDEX' => $delIndex, 'DEL_INDEX' => $delIndex,
'APP_STATUS' => $sStatus, 'APP_STATUS' => $sStatus,
'TAS_UID' => $appdel['TAS_UID'], 'TAS_UID' => $appdel['TAS_UID'],
'ROU_TYPE' => $row[0]['ROU_TYPE'] 'ROU_TYPE' => $nextRouteType
); );
//We define some parameters in the before the derivation //We define some parameters in the before the derivation
@@ -2442,66 +2407,19 @@ class wsBase
$oDerivation->beforeDerivate( $oDerivation->beforeDerivate(
$aData, $aData,
$nextDelegations, $nextDelegations,
$row[0]['ROU_TYPE'], $nextRouteType,
$aCurrentDerivation $aCurrentDerivation
); );
$appFields = $oCase->loadCase( $caseId ); $appFields = $oCase->loadCase( $caseId );
//Execute triggers after derivation //Execute triggers after routing
$aTriggers = $oCase->loadTriggers( $appdel['TAS_UID'], 'ASSIGN_TASK', - 2, 'AFTER' ); $varTriggers = $this->executeTriggerFromDerivate($appFields["APP_DATA"], $appdel['TAS_UID'], 'ASSIGN_TASK', -2, 'AFTER', "-= After Derivation =-");
if (count( $aTriggers ) > 0) {
//Set variables
$params = new stdClass();
$params->appData = $appFields["APP_DATA"];
if ($this->stored_system_variables) {
$params->option = "STORED SESSION";
$params->SID = $this->wsSessionId;
}
$appFields["APP_DATA"] = array_merge( $appFields["APP_DATA"], G::getSystemConstants( $params ) );
//PMScript
$oPMScript = new PMScript();
$oPMScript->setFields( $appFields['APP_DATA'] );
$varTriggers .= "<b>-= After Derivation =-</b><br/>";
foreach ($aTriggers as $aTrigger) {
$bExecute = true;
if ($aTrigger['ST_CONDITION'] !== '') {
$oPMScript->setScript( $aTrigger['ST_CONDITION'] );
$bExecute = $oPMScript->evaluate();
}
if ($bExecute) {
$oPMScript->setScript( $aTrigger['TRI_WEBBOT'] );
$oPMScript->execute();
$oTrigger = TriggersPeer::retrieveByPk( $aTrigger['TRI_UID'] );
$varTriggers .= "&nbsp;- " . nl2br( htmlentities( $oTrigger->getTriTitle(), ENT_QUOTES ) ) . "<br/>";
//$appFields = $oCase->loadCase($caseId);
$appFields['APP_DATA'] = $oPMScript->aFields;
//$appFields['APP_DATA']['APPLICATION'] = $caseId;
//$appFields = $oCase->loadCase($caseId);
unset($appFields['APP_STATUS']);
unset($appFields['APP_PROC_STATUS']);
unset($appFields['APP_PROC_CODE']);
unset($appFields['APP_PIN']);
$oCase->updateCase( $caseId, $appFields );
}
}
}
$sFromName = ""; $sFromName = "";
if ($userId != "") { if ($userId != "") {
$user = new Users(); $user = new Users();
$arrayUserData = $user->load($userId); $arrayUserData = $user->load($userId);
if (trim($arrayUserData["USR_EMAIL"]) == "") { if (trim($arrayUserData["USR_EMAIL"]) == "") {
@@ -2513,15 +2431,9 @@ class wsBase
$oCase->sendNotifications( $appdel['TAS_UID'], $nextDelegations, $appFields['APP_DATA'], $caseId, $delIndex, $sFromName ); $oCase->sendNotifications( $appdel['TAS_UID'], $nextDelegations, $appFields['APP_DATA'], $caseId, $delIndex, $sFromName );
//Save data - Start
//$appFields = $oCase->loadCase($caseId);
//$oCase->updateCase($caseId, $appFields);
//Save data - End
$oProcess = new Process(); $oProcess = new Process();
$oProcessFieds = $oProcess->Load( $appFields['PRO_UID'] ); $oProcessFieds = $oProcess->Load( $appFields['PRO_UID'] );
//here dubug mode in web entry //here debug mode in web entry
if (isset( $oProcessFieds['PRO_DEBUG'] ) && $oProcessFieds['PRO_DEBUG']) { if (isset( $oProcessFieds['PRO_DEBUG'] ) && $oProcessFieds['PRO_DEBUG']) {
@@ -2534,7 +2446,7 @@ class wsBase
$res = $result->getPayloadArray(); $res = $result->getPayloadArray();
//now fill the array of AppDelegationPeer //Now fill the array of AppDelegationPeer
$oCriteria = new Criteria( 'workflow' ); $oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX );
$oCriteria->addSelectColumn( AppDelegationPeer::USR_UID ); $oCriteria->addSelectColumn( AppDelegationPeer::USR_UID );
@@ -2552,7 +2464,6 @@ class wsBase
while ($oDataset->next()) { while ($oDataset->next()) {
$aAppDel = $oDataset->getRow(); $aAppDel = $oDataset->getRow();
$oUser = new Users(); $oUser = new Users();
try { try {
@@ -2572,7 +2483,7 @@ class wsBase
$taskName = ''; $taskName = '';
} }
// execute events //Execute events
$eventPro = $_SESSION["PROCESS"]; $eventPro = $_SESSION["PROCESS"];
$eventApp = $caseId; $eventApp = $caseId;
$eventInd = $aAppDel['DEL_INDEX']; $eventInd = $aAppDel['DEL_INDEX'];
@@ -2580,8 +2491,7 @@ class wsBase
$oEvent = new Event(); $oEvent = new Event();
$oEvent->createAppEvents( $eventPro, $eventApp, $eventInd, $eventTas ); $oEvent->createAppEvents( $eventPro, $eventApp, $eventInd, $eventTas );
// end events //End events
$currentUser = new stdClass(); $currentUser = new stdClass();
$currentUser->userId = $aAppDel['USR_UID']; $currentUser->userId = $aAppDel['USR_UID'];

View File

@@ -112,5 +112,26 @@ class AppDelay extends BaseAppDelay
return false; return false;
} }
} }
/**
* Verify if the case is Paused or cancelled
*
* @param $appUid string
* @return $oDataset array
*/
public function getCasesCancelOrPaused($appUid)
{
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( AppDelayPeer::APP_UID );
$oCriteria->addSelectColumn( AppDelayPeer::APP_DEL_INDEX );
$oCriteria->add( AppDelayPeer::APP_TYPE, '' );
$oCriteria->add( AppDelayPeer::APP_UID, $appUid );
$oCriteria->add( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'PAUSE' )->addOr( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'CANCEL' ) ) );
$oCriteria->addAscendingOrderByColumn( AppDelayPeer::APP_ENABLE_ACTION_DATE );
$oDataset = AppDelayPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
return $oDataset->getRow();
}
} }

View File

@@ -384,4 +384,23 @@ class Route extends BaseRoute
$this->updateRouteOrder($accountsArray); $this->updateRouteOrder($accountsArray);
} }
} }
/**
* Get the route for the specific task
*
* @param $tasUid string
* @return $nextRoute array
*/
public function getNextRouteByTask($tasUid)
{
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( RoutePeer::ROU_TYPE );
$oCriteria->addSelectColumn( RoutePeer::ROU_NEXT_TASK );
$oCriteria->add( RoutePeer::TAS_UID, $tasUid );
$oDataset = TaskPeer::doSelectRS( $oCriteria );
$oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
$oDataset->next();
$row = $oDataset->getRow();
return (is_array($row)) ? $row : array();
}
} }