From 4382bbc7bbbc245b7653f62ffdc0df76f4420ecd Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 7 Sep 2018 12:01:42 -0400 Subject: [PATCH] HOR-4859 --- workflow/engine/classes/Cases.php | 80 +++++++++++--------- workflow/engine/classes/model/Task.php | 36 +++++++++ workflow/engine/methods/cases/cases_Open.php | 30 ++++---- 3 files changed, 96 insertions(+), 50 deletions(-) diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index a9284ba7c..91c2bfc15 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -380,44 +380,56 @@ class Cases return $rows; } - public function isSelfService($USR_UID, $TAS_UID, $APP_UID = '') + /** + * Checks if at least one of the user’s tasks is self-service + * + * @param string $usrUid + * @param string $tasUid + * @param string $appUid + * + * @return boolean + */ + public function isSelfService($usrUid, $tasUid, $appUid = '') { - $tasks = $this->getSelfServiceTasks($USR_UID); - - foreach ($tasks as $key => $val) { - if ($TAS_UID === $val['uid']) { - return true; - } - } - - if (!empty($APP_UID)) { - $task = new Task(); - $arrayTaskData = $task->load($TAS_UID); - - $taskGroupVariable = trim($arrayTaskData['TAS_GROUP_VARIABLE'], ' @#'); - - $caseData = $this->loadCase($APP_UID); - - if (isset($caseData['APP_DATA'][$taskGroupVariable])) { - $dataVariable = $caseData['APP_DATA'][$taskGroupVariable]; - - if (empty($dataVariable)) { - return false; - } - - $dataVariable = is_array($dataVariable)? $dataVariable : (array)trim($dataVariable); - - if (in_array($USR_UID, $dataVariable, true)) { - return true; - } - - $groups = new Groups(); - foreach ($groups->getActiveGroupsForAnUser($USR_UID) as $key => $group) { - if (in_array($group, $dataVariable, true)) { + $selfServiceVariable = Task::getVariableUsedInSelfService($tasUid); + switch ($selfServiceVariable){ + case Task::TASK_ASSIGN_TYPE_NO_SELF_SERVICE: + return false; + break; + case Task::SELF_SERVICE_WITHOUT_VARIABLE: + $tasks = $this->getSelfServiceTasks($usrUid); + foreach ($tasks as $key => $val) { + if ($tasUid === $val['uid']) { return true; } } - } + + return false; + break; + default://When is "Self Service Value Based Assignment" + if (!empty($appUid)) { + //If is Self service Value Based we will be get the value of variable defined in $selfServiceType + $selfServiceType = trim($selfServiceVariable, ' @#'); + $caseData = $this->loadCase($appUid); + if (isset($caseData['APP_DATA'][$selfServiceType])) { + $dataVariable = $caseData['APP_DATA'][$selfServiceType]; + if (empty($dataVariable)) { + return false; + } + + $dataVariable = is_array($dataVariable) ? $dataVariable : (array)trim($dataVariable); + if (in_array($usrUid, $dataVariable, true)) { + return true; + } + + $groups = new Groups(); + foreach ($groups->getActiveGroupsForAnUser($usrUid) as $key => $group) { + if (in_array($group, $dataVariable, true)) { + return true; + } + } + } + } } return false; diff --git a/workflow/engine/classes/model/Task.php b/workflow/engine/classes/model/Task.php index f6ddfc66b..0f80b9cac 100644 --- a/workflow/engine/classes/model/Task.php +++ b/workflow/engine/classes/model/Task.php @@ -16,6 +16,10 @@ */ class Task extends BaseTask { + const TASK_ASSIGN_TYPE_NO_SELF_SERVICE = null; + const TASK_ASSIGN_TYPE_SELF_SERVICE = 'SELF_SERVICE'; + const SELF_SERVICE_WITHOUT_VARIABLE = 'YES'; + const tas_type_events = [ 'INTERMEDIATE-THROW-MESSAGE-EVENT', 'INTERMEDIATE-THROW-EMAIL-EVENT', @@ -845,6 +849,38 @@ class Task extends BaseTask throw $e; } } + + /** + * Review if the task is "Self Service" + * If the task is not self service, the function returns null + * If the task is self service, the function returns the self service variable + * + * @param string $tasUid + * + * @return string|null + */ + public static function getVariableUsedInSelfService($tasUid) + { + $criteria = new Criteria(); + $criteria->add(TaskPeer::TAS_UID, $tasUid); + $task = TaskPeer::doSelectOne($criteria); + if (!is_null($task)) { + //Review if is "Self Service" + if ($task->getTasAssignType() === self::TASK_ASSIGN_TYPE_SELF_SERVICE) { + $variableInSelfService = $task->getTasGroupVariable(); + //Review if is "Self Service Value Based Assignment" + if (empty($variableInSelfService)) { + return self::SELF_SERVICE_WITHOUT_VARIABLE; + } else { + return $variableInSelfService; + } + } else { + self::TASK_ASSIGN_TYPE_NO_SELF_SERVICE; + } + } else { + self::TASK_ASSIGN_TYPE_NO_SELF_SERVICE; + } + } } \ No newline at end of file diff --git a/workflow/engine/methods/cases/cases_Open.php b/workflow/engine/methods/cases/cases_Open.php index 4ad552a6d..8e79f67b2 100644 --- a/workflow/engine/methods/cases/cases_Open.php +++ b/workflow/engine/methods/cases/cases_Open.php @@ -41,7 +41,7 @@ if ($RBAC->userCanAccess( 'PM_CASES' ) != 1) { } } -$oCase = new Cases(); +$caseInstance = new Cases(); //cleaning the case session data Cases::clearCaseSessionData(); @@ -49,8 +49,8 @@ Cases::clearCaseSessionData(); try { //Loading data for a Jump request if (!isset($_GET['APP_UID']) && isset($_GET['APP_NUMBER'])) { - $_GET['APP_UID'] = $oCase->getApplicationUIDByNumber( $_GET['APP_NUMBER'] ); - $_GET['DEL_INDEX'] = $oCase->getCurrentDelegation( $_GET['APP_UID'], $_SESSION['USER_LOGGED'] ); + $_GET['APP_UID'] = $caseInstance->getApplicationUIDByNumber( $_GET['APP_NUMBER'] ); + $_GET['DEL_INDEX'] = $caseInstance->getCurrentDelegation( $_GET['APP_UID'], $_SESSION['USER_LOGGED'] ); //if the application doesn't exist if (is_null($_GET['APP_UID'])) { @@ -65,8 +65,6 @@ try { G::header( 'location: casesListExtJs' ); exit(); } - //wrong implemented, need refactored - //$participated = $oCase->userParticipatedInCase($_GET['APP_UID'], $_SESSION['USER_LOGGED']); ??????? } $sAppUid = $_GET['APP_UID']; @@ -74,7 +72,7 @@ try { $_action = isset($_GET['action']) ? $_GET['action'] : ''; //loading application data - $aFields = $oCase->loadCase( $sAppUid, $iDelIndex ); + $aFields = $caseInstance->loadCase( $sAppUid, $iDelIndex ); if (!isset($_SESSION['CURRENT_TASK'])) { $_SESSION['CURRENT_TASK'] = $aFields['TAS_UID']; @@ -149,10 +147,10 @@ try { $_SESSION['CURRENT_TASK'] = $aFields['TAS_UID']; //if the task is in the valid selfservice tasks for this user, then catch the case, else just view the resume - if ($oCase->isSelfService( $_SESSION['USER_LOGGED'], $aFields['TAS_UID'], $sAppUid )) { - require_once (PATH_METHODS . 'cases' . PATH_SEP . 'cases_CatchSelfService.php'); + if ($caseInstance->isSelfService($_SESSION['USER_LOGGED'], $aFields['TAS_UID'], $sAppUid)) { + require_once(PATH_METHODS . 'cases' . PATH_SEP . 'cases_CatchSelfService.php'); } else { - require_once (PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php'); + require_once(PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php'); } exit(); @@ -164,8 +162,8 @@ try { $_SESSION['INDEX'] = $iDelIndex; if (is_null( $aFields['DEL_INIT_DATE'] )) { - $oCase->setDelInitDate( $sAppUid, $iDelIndex ); - $aFields = $oCase->loadCase( $sAppUid, $iDelIndex ); + $caseInstance->setDelInitDate( $sAppUid, $iDelIndex ); + $aFields = $caseInstance->loadCase( $sAppUid, $iDelIndex ); } $_SESSION['PROCESS'] = $aFields['PRO_UID']; @@ -176,10 +174,10 @@ try { unset( $_SESSION['bNoShowSteps'] ); /* Execute Before Triggers for first Task*/ - $oCase->getExecuteTriggerProcess($sAppUid, 'OPEN'); + $caseInstance->getExecuteTriggerProcess($sAppUid, 'OPEN'); /*end Execute Before Triggers for first Task*/ - $aNextStep = $oCase->getNextStep( $_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION'] ); + $aNextStep = $caseInstance->getNextStep( $_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION'] ); $sPage = $aNextStep['PAGE']; G::header( 'location: ' . $sPage ); @@ -208,7 +206,7 @@ try { $_SESSION['INDEX'] = $row['DEL_INDEX']; } - $Fields = $oCase->loadCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $flagJump); + $Fields = $caseInstance->loadCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $flagJump); $_SESSION['CURRENT_TASK'] = $Fields['TAS_UID']; require_once (PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php'); @@ -217,11 +215,11 @@ try { break; default: //APP_STATUS IS COMPLETED OR CANCELLED $_SESSION['APPLICATION'] = $sAppUid; - $_SESSION['INDEX'] = $oCase->getCurrentDelegationCase( $_GET['APP_UID'] ); + $_SESSION['INDEX'] = $caseInstance->getCurrentDelegationCase( $_GET['APP_UID'] ); $_SESSION['PROCESS'] = $aFields['PRO_UID']; $_SESSION['TASK'] = - 1; $_SESSION['STEP_POSITION'] = 0; - $Fields = $oCase->loadCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $flagJump); + $Fields = $caseInstance->loadCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $flagJump); $_SESSION['CURRENT_TASK'] = $Fields['TAS_UID']; require_once (PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php');