From 11d972b391268eeb6b1cb3ee3abbb993fb1c5fbc Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Fri, 29 Jul 2016 16:27:55 -0400 Subject: [PATCH 01/20] HOR-1502 add HOR-1502 --- workflow/engine/methods/cases/cases_Derivate.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/workflow/engine/methods/cases/cases_Derivate.php b/workflow/engine/methods/cases/cases_Derivate.php index c0fe09090..5c313961b 100755 --- a/workflow/engine/methods/cases/cases_Derivate.php +++ b/workflow/engine/methods/cases/cases_Derivate.php @@ -123,7 +123,13 @@ try { $aCurrentDerivation = array ('APP_UID' => $_SESSION['APPLICATION'],'DEL_INDEX' => $_SESSION['INDEX'],'APP_STATUS' => $sStatus,'TAS_UID' => $_SESSION['TASK'],'ROU_TYPE' => $_POST['form']['ROU_TYPE'] ); - $arrayDerivationResult = $oDerivation->derivate($aCurrentDerivation, $_POST['form']['TASKS']); + $aPInformation = $oDerivation->prepareInformation( array ('USER_UID' => $_SESSION['USER_LOGGED'],'APP_UID' => $_SESSION['APPLICATION'],'DEL_INDEX' => $_SESSION['INDEX'] + ) ); + + //$_POST['form']['TASKS'] is the information after the cases_ScreenDerivation + $nextTasks = G::array_merges($aPInformation,$_POST['form']['TASKS']); + + $arrayDerivationResult = $oDerivation->derivate($aCurrentDerivation, $nextTasks); if (!empty($arrayDerivationResult)) { foreach ($_POST['form']['TASKS'] as $key => $value) { From aaa4ba24938c47199f48b72eead4c331cfa936bd Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Mon, 1 Aug 2016 16:42:58 -0400 Subject: [PATCH 02/20] =?UTF-8?q?HOR-1501=20Crear=20el=20m=C3=A9todo=20rec?= =?UTF-8?q?ursivo=20para=20encontrar=20la=20siguiente=20tarea=20con=20usua?= =?UTF-8?q?rios=20asignados=20despu=C3=A9s=20de=20un=20intermediase=20even?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflow/engine/classes/class.derivation.php | 2 +- workflow/engine/classes/class.pmScript.php | 2 +- workflow/engine/methods/cases/cases_Step.php | 9 +- .../src/ProcessMaker/Core/RoutingScreen.php | 191 ++++++++++++++++++ 4 files changed, 200 insertions(+), 4 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Core/RoutingScreen.php diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 85c69d260..757447a08 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -58,7 +58,7 @@ class Derivation * * @return array Return array */ - private function prepareInformationTask(array $arrayTaskData) + protected function prepareInformationTask(array $arrayTaskData) { try { $task = new Task(); diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php index 3ec8cef4d..51d661445 100644 --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -368,7 +368,7 @@ class PMScript /** * Evaluate the current script * - * @return void + * @return null */ public function evaluate () { diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index ee8c75589..deda937c0 100755 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -798,8 +798,13 @@ try { $aFields['TAS_TYPE_DAY'] = G::LoadTranslation( 'ID_COUNT_DAYS' ); $aFields['TAS_CALENDAR'] = G::LoadTranslation( 'ID_CALENDAR' ); - $aFields['TASK'] = $oDerivation->prepareInformation( array ('USER_UID' => $_SESSION['USER_LOGGED'],'APP_UID' => $_SESSION['APPLICATION'],'DEL_INDEX' => $_SESSION['INDEX'] - ) ); + $oRoute = new \ProcessMaker\Core\RoutingScreen(); + $arrayData = array( + 'USER_UID' => $_SESSION['USER_LOGGED'], + 'APP_UID' => $_SESSION['APPLICATION'], + 'DEL_INDEX' => $_SESSION['INDEX'] + ); + $aFields['TASK'] = $oRoute->prepareInformation($arrayData); if (empty( $aFields['TASK'] )) { throw (new Exception( G::LoadTranslation( 'ID_NO_DERIVATION_RULE' ) )); diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php new file mode 100644 index 000000000..606bd8448 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -0,0 +1,191 @@ +case = new \Cases(); + $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"]); + + 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"); + + $criteria->addSelectColumn(\RoutePeer::TAS_UID); + $criteria->addSelectColumn(\RoutePeer::ROU_NEXT_TASK); + $criteria->addSelectColumn(\RoutePeer::ROU_TYPE); + $criteria->addSelectColumn(\RoutePeer::ROU_DEFAULT); + $criteria->addSelectColumn(\RoutePeer::ROU_CONDITION); + + if ($taskUid != "") { + $criteria->add(\RoutePeer::TAS_UID, $taskUid, \Criteria::EQUAL); + $criteria->addAscendingOrderByColumn(\RoutePeer::ROU_CASE); + + $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; + } + + public function executeScript($arrayRouteData, $appData) + { + //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; + } + +} \ No newline at end of file From 18f086c09e18fbee7d7e107c1b5940e9ca42d21c Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Mon, 1 Aug 2016 16:42:58 -0400 Subject: [PATCH 03/20] =?UTF-8?q?HOR-1501=20Crear=20el=20m=C3=A9todo=20rec?= =?UTF-8?q?ursivo=20para=20encontrar=20la=20siguiente=20tarea=20con=20usua?= =?UTF-8?q?rios=20asignados=20despu=C3=A9s=20de=20un=20intermediase=20even?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit up observations fix in type function return source_uid --- workflow/engine/classes/class.derivation.php | 32 ++++++++++++++++--- workflow/engine/classes/class.pmScript.php | 2 +- workflow/engine/methods/cases/cases_Step.php | 9 ++++-- .../src/ProcessMaker/Core/RoutingScreen.php | 14 ++++++++ 4 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Core/RoutingScreen.php diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 85c69d260..0ec976b12 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -50,6 +50,28 @@ class Derivation var $case; protected $flagControl; 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 @@ -240,15 +262,15 @@ class Derivation foreach ($arrayNextTaskBackup as $value) { $arrayNextTaskData = $value; - $regexpTaskTypeToInclude = "GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT"; - 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"]); foreach ($arrayAux as $value2) { - $arrayNextTask[++$i] = $value2; + $key = ++$i; + $arrayNextTask[$key] = $value2; + $arrayNextTask[$key]['SOURCE_UID'] = $value['ROU_NEXT_TASK']; foreach($aSecJoin as $rsj){ $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TASK"] = $rsj["ROU_PREVIOUS_TASK"]; $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['SOURCE_UID'] = $value['ROU_NEXT_TASK']; $arrayNextTask[++$i] = $arrayNextTaskData; foreach($aSecJoin as $rsj){ $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TASK"] = $rsj["ROU_PREVIOUS_TASK"]; diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php index 3ec8cef4d..476b8ea1f 100644 --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -368,7 +368,7 @@ class PMScript /** * Evaluate the current script * - * @return void + * @return bool */ public function evaluate () { diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index ee8c75589..deda937c0 100755 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -798,8 +798,13 @@ try { $aFields['TAS_TYPE_DAY'] = G::LoadTranslation( 'ID_COUNT_DAYS' ); $aFields['TAS_CALENDAR'] = G::LoadTranslation( 'ID_CALENDAR' ); - $aFields['TASK'] = $oDerivation->prepareInformation( array ('USER_UID' => $_SESSION['USER_LOGGED'],'APP_UID' => $_SESSION['APPLICATION'],'DEL_INDEX' => $_SESSION['INDEX'] - ) ); + $oRoute = new \ProcessMaker\Core\RoutingScreen(); + $arrayData = array( + 'USER_UID' => $_SESSION['USER_LOGGED'], + 'APP_UID' => $_SESSION['APPLICATION'], + 'DEL_INDEX' => $_SESSION['INDEX'] + ); + $aFields['TASK'] = $oRoute->prepareInformation($arrayData); if (empty( $aFields['TASK'] )) { throw (new Exception( G::LoadTranslation( 'ID_NO_DERIVATION_RULE' ) )); diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php new file mode 100644 index 000000000..af096967d --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -0,0 +1,14 @@ +setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"); + } + +} \ No newline at end of file From 739841514b3a73ddcb6090bd7cfac23aaf1c1b6f Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Tue, 2 Aug 2016 11:22:27 -0400 Subject: [PATCH 04/20] up observation --- workflow/engine/classes/class.pmScript.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php index 476b8ea1f..bd5c3d954 100644 --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -368,7 +368,7 @@ class PMScript /** * Evaluate the current script * - * @return bool + * @return boolean */ public function evaluate () { From 124bf8f49b9a34dc5d5bf411de53adcd6b72bae0 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Tue, 2 Aug 2016 11:22:27 -0400 Subject: [PATCH 05/20] up observation HOR-1502 ok HOR-1502 --- .../engine/methods/cases/cases_Derivate.php | 11 +++---- workflow/engine/methods/cases/cases_Step.php | 3 ++ .../src/ProcessMaker/Core/RoutingScreen.php | 32 +++++++++++++++++++ .../cases/cases_ScreenDerivation.html | 2 +- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/workflow/engine/methods/cases/cases_Derivate.php b/workflow/engine/methods/cases/cases_Derivate.php index 5c313961b..69898ce4f 100755 --- a/workflow/engine/methods/cases/cases_Derivate.php +++ b/workflow/engine/methods/cases/cases_Derivate.php @@ -122,13 +122,10 @@ try { $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'] ); - - $aPInformation = $oDerivation->prepareInformation( array ('USER_UID' => $_SESSION['USER_LOGGED'],'APP_UID' => $_SESSION['APPLICATION'],'DEL_INDEX' => $_SESSION['INDEX'] - ) ); - - //$_POST['form']['TASKS'] is the information after the cases_ScreenDerivation - $nextTasks = G::array_merges($aPInformation,$_POST['form']['TASKS']); - + $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); $arrayDerivationResult = $oDerivation->derivate($aCurrentDerivation, $nextTasks); if (!empty($arrayDerivationResult)) { diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index deda937c0..e3dc45004 100755 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -1054,6 +1054,9 @@ try { if(isset($aValues['ROU_CONDITION'])){ $aFields['TASK'][$sKey]['NEXT_TASK']['ROU_CONDITION'] = ''; } + if(isset($aValues['SOURCE_UID'])){ + $aFields['TASK'][$sKey]['NEXT_TASK']['SOURCE_UID'] = ''; + } } } diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index af096967d..62254c3d4 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -11,4 +11,36 @@ class RoutingScreen extends \Derivation $this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"); } + public function mergeDataDerivation($post, $prepareInformation) + { + $count = 1; + $iPost = count($post); + $aDataMerged = array(); + $flag = false; + foreach ($prepareInformation as $key => $nextTask) { + for ($i = 1; $i <= $iPost; $i++) { + if(isset($post[$i]['SOURCE_UID']) && $nextTask['NEXT_TASK']['TAS_UID'] === $post[$i]['SOURCE_UID']){ + if($post[$i]['SOURCE_UID'] !== $post[$i]['TAS_UID']){ + $aDataMerged[$count] = $nextTask['NEXT_TASK']; + unset($aDataMerged[$count]['USER_ASSIGNED']); + $aDataMerged[$count]['DEL_PRIORITY'] = ''; + $aDataMerged[$count]['NEXT_ROUTING'] = $post[$i]; + $count++; + $flag = true; + } else { + $aDataMerged[$count] = \G::array_merges($nextTask['NEXT_TASK'],$post[$i]); + unset($aDataMerged[$count]['USER_ASSIGNED']); + $count++; + $flag = true; + break; + } + } + } + } + if(!$flag){ + $aDataMerged = $post; + } + return $aDataMerged; + } + } \ No newline at end of file diff --git a/workflow/engine/templates/cases/cases_ScreenDerivation.html b/workflow/engine/templates/cases/cases_ScreenDerivation.html index 8df2fa4c2..b4f5a96ff 100755 --- a/workflow/engine/templates/cases/cases_ScreenDerivation.html +++ b/workflow/engine/templates/cases/cases_ScreenDerivation.html @@ -148,7 +148,7 @@ - {$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} From 792fda0a21e2ced7c4b1d9d2b3592f2c99581290 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Thu, 4 Aug 2016 11:36:58 -0400 Subject: [PATCH 06/20] HOR-1504 "Almacenar la info de la(s) siguiente(s) derivaciones..." SOLVED Issue: Almacenar la info de la(s) siguiente(s) derivaciones, solo cuando sea necesario (asignacion manual) Cause: Nuevo requerimiento de funciones Solution: Se a implementado esta nueva funcionalidad --- workflow/engine/classes/class.derivation.php | 108 ++++++++++++++++-- workflow/engine/classes/class.wsBase.php | 6 - .../model/map/ApplicationMapBuilder.php | 2 + .../classes/model/om/BaseApplication.php | 60 +++++++++- .../classes/model/om/BaseApplicationPeer.php | 23 ++-- workflow/engine/config/schema.xml | 1 + workflow/engine/data/mysql/schema.sql | 1 + .../Project/Adapter/BpmnWorkflow.php | 2 +- 8 files changed, 177 insertions(+), 26 deletions(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 05ca8e023..074131d0a 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -803,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 * * @param array $currentDelegation @@ -828,6 +869,8 @@ class Derivation //Get data for this DEL_INDEX current $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 $this->case->CloseCurrentDelegation( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] ); @@ -1043,6 +1086,7 @@ class Derivation break; default: $iNewDelIndex = $this->doDerivation($currentDelegation, $nextDel, $appFields, $aSP); + if($iNewDelIndex !== 0){ $arrayDerivationResult[] = ['DEL_INDEX' => $iNewDelIndex, 'TAS_UID' => $nextDel['TAS_UID'], 'USR_UID' => (isset($nextDel['USR_UID']))? $nextDel['USR_UID'] : '']; } @@ -1091,15 +1135,22 @@ class Derivation foreach ($arrayTaskNextDelNextDelegations as $key2 => $value2) { $arrayTaskNextDelNextDel = $value2; - if($arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_ASSIGN_TYPE"] == 'MULTIPLE_INSTANCE'){ - $aUserAssigned = true; - 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"])) { - throw new Exception(G::LoadTranslation("ID_NO_USERS")); - } + switch ($arrayTaskNextDelNextDel['NEXT_TASK']['TAS_ASSIGN_TYPE']) { + case 'MANUAL': + $arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['USR_UID'] = ''; + break; + case 'MULTIPLE_INSTANCE': + if (!isset($arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['0']['USR_UID'])) { + throw new Exception(G::LoadTranslation('ID_NO_USERS')); + } + + $arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['USR_UID'] = ''; + break; + default: + if (!isset($arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['USR_UID'])) { + throw new Exception(G::LoadTranslation('ID_NO_USERS')); + } + break; } $rouPreType = ""; @@ -1110,6 +1161,7 @@ class Derivation $rouPreType = $arrayTaskNextDelNextDel["NEXT_TASK"]["ROU_PREVIOUS_TYPE"]; $rouPreTask = $arrayTaskNextDelNextDel["NEXT_TASK"]["ROU_PREVIOUS_TASK"]; } + $nextDelegationsAux[++$i] = array( "TAS_UID" => $arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_UID"], "USR_UID" => $arrayTaskNextDelNextDel["NEXT_TASK"]["USER_ASSIGNED"]["USR_UID"], @@ -1217,15 +1269,39 @@ class Derivation 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']; $delType = 'NORMAL'; $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'] )) { $nextDel['DEL_PRIORITY'] = (isset( $nextDel['DEL_PRIORITY'] ) ? ($nextDel['DEL_PRIORITY'] >= 1 && $nextDel['DEL_PRIORITY'] <= 5 ? $nextDel['DEL_PRIORITY'] : '3') : '3'); } else { $nextDel['DEL_PRIORITY'] = 3; } + switch ($nextDel['TAS_ASSIGN_TYPE']) { case 'CANCEL_MI': case 'STATIC_MI': @@ -1267,6 +1343,20 @@ class Derivation 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']; switch ($currentDelegation['ROU_TYPE']) { diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index 2df12068c..8f2ad869b 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -2379,12 +2379,6 @@ class wsBase } 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 $nodeNext = array(); $usrasgdUid = null; diff --git a/workflow/engine/classes/model/map/ApplicationMapBuilder.php b/workflow/engine/classes/model/map/ApplicationMapBuilder.php index 167f35e29..6bd09a85a 100755 --- a/workflow/engine/classes/model/map/ApplicationMapBuilder.php +++ b/workflow/engine/classes/model/map/ApplicationMapBuilder.php @@ -107,6 +107,8 @@ class ApplicationMapBuilder $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.'); } // doBuild() diff --git a/workflow/engine/classes/model/om/BaseApplication.php b/workflow/engine/classes/model/om/BaseApplication.php index 437bdd259..f04ca84c1 100755 --- a/workflow/engine/classes/model/om/BaseApplication.php +++ b/workflow/engine/classes/model/om/BaseApplication.php @@ -153,6 +153,12 @@ abstract class BaseApplication extends BaseObject implements Persistent */ 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 * 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; } + /** + * Get the [app_routing_data] column value. + * + * @return string + */ + public function getAppRoutingData() + { + + return $this->app_routing_data; + } + /** * Set the value of [app_uid] column. * @@ -960,6 +977,28 @@ abstract class BaseApplication extends BaseObject implements Persistent } // 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. * @@ -1019,12 +1058,14 @@ abstract class BaseApplication extends BaseObject implements Persistent $this->app_drive_folder_uid = $rs->getString($startcol + 20); + $this->app_routing_data = $rs->getString($startcol + 21); + $this->resetModified(); $this->setNew(false); // 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) { throw new PropelException("Error populating Application object", $e); @@ -1291,6 +1332,9 @@ abstract class BaseApplication extends BaseObject implements Persistent case 20: return $this->getAppDriveFolderUid(); break; + case 21: + return $this->getAppRoutingData(); + break; default: return null; break; @@ -1332,6 +1376,7 @@ abstract class BaseApplication extends BaseObject implements Persistent $keys[18] => $this->getAppDuration(), $keys[19] => $this->getAppDelayDuration(), $keys[20] => $this->getAppDriveFolderUid(), + $keys[21] => $this->getAppRoutingData(), ); return $result; } @@ -1426,6 +1471,9 @@ abstract class BaseApplication extends BaseObject implements Persistent case 20: $this->setAppDriveFolderUid($value); break; + case 21: + $this->setAppRoutingData($value); + break; } // switch() } @@ -1533,6 +1581,10 @@ abstract class BaseApplication extends BaseObject implements Persistent $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); } + if ($this->isColumnModified(ApplicationPeer::APP_ROUTING_DATA)) { + $criteria->add(ApplicationPeer::APP_ROUTING_DATA, $this->app_routing_data); + } + return $criteria; } @@ -1722,6 +1778,8 @@ abstract class BaseApplication extends BaseObject implements Persistent $copyObj->setAppDriveFolderUid($this->app_drive_folder_uid); + $copyObj->setAppRoutingData($this->app_routing_data); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseApplicationPeer.php b/workflow/engine/classes/model/om/BaseApplicationPeer.php index 508479f0b..bd869e1b7 100755 --- a/workflow/engine/classes/model/om/BaseApplicationPeer.php +++ b/workflow/engine/classes/model/om/BaseApplicationPeer.php @@ -25,7 +25,7 @@ abstract class BaseApplicationPeer const CLASS_DEFAULT = 'classes.model.Application'; /** The total number of columns. */ - const NUM_COLUMNS = 21; + const NUM_COLUMNS = 22; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -94,6 +94,9 @@ abstract class BaseApplicationPeer /** the column name for the APP_DRIVE_FOLDER_UID field */ 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 */ private static $phpNameMap = null; @@ -105,10 +108,10 @@ abstract class BaseApplicationPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ 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_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_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_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_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, 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', '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, 21, ) ); /** @@ -118,10 +121,10 @@ abstract class BaseApplicationPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ 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_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_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_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_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, 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, '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, 21, ) ); /** @@ -264,6 +267,8 @@ abstract class BaseApplicationPeer $criteria->addSelectColumn(ApplicationPeer::APP_DRIVE_FOLDER_UID); + $criteria->addSelectColumn(ApplicationPeer::APP_ROUTING_DATA); + } const COUNT = 'COUNT(APPLICATION.APP_UID)'; diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index d3bf953bb..e2b2f3ab6 100755 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -42,6 +42,7 @@ + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index c346956bb..2756f916c 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -33,6 +33,7 @@ CREATE TABLE `APPLICATION` `APP_DURATION` DOUBLE default 0, `APP_DELAY_DURATION` DOUBLE default 0, `APP_DRIVE_FOLDER_UID` VARCHAR(32) default '', + `APP_ROUTING_DATA` MEDIUMTEXT, PRIMARY KEY (`APP_UID`), KEY `indexApp`(`PRO_UID`, `APP_STATUS`, `APP_UID`), KEY `indexAppNumber`(`APP_NUMBER`), diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index d7154ebfa..7f0196df1 100755 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -2106,7 +2106,7 @@ class BpmnWorkflow extends Project\Bpmn //Update Process $process = \ProcessPeer::retrieveByPk($this->wp->getUid()); - $arrayActionDone = ($process->getProActionDone() != '')? unserialize($process->getProActionDone()) : []; + $arrayActionDone = (!is_null($process->getProActionDone()) && $process->getProActionDone() != '')? unserialize($process->getProActionDone()) : []; $arrayActionDone[] = $actionDone; $this->wp->update(['PRO_ACTION_DONE' => serialize($arrayActionDone)]); From 9229be669dfe63f2cddb2c1a168774c94689830b Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Thu, 4 Aug 2016 12:00:42 -0400 Subject: [PATCH 07/20] HOR-1502 --- .../src/ProcessMaker/Core/RoutingScreen.php | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index 62254c3d4..603be8a7f 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -13,31 +13,22 @@ class RoutingScreen extends \Derivation public function mergeDataDerivation($post, $prepareInformation) { - $count = 1; $iPost = count($post); $aDataMerged = array(); - $flag = false; + $flagJumpTask = false; foreach ($prepareInformation as $key => $nextTask) { + $aDataMerged[$key] = $nextTask['NEXT_TASK']; + unset($aDataMerged[$key]['USER_ASSIGNED']); + $aDataMerged[$key]['DEL_PRIORITY'] = ''; for ($i = 1; $i <= $iPost; $i++) { - if(isset($post[$i]['SOURCE_UID']) && $nextTask['NEXT_TASK']['TAS_UID'] === $post[$i]['SOURCE_UID']){ - if($post[$i]['SOURCE_UID'] !== $post[$i]['TAS_UID']){ - $aDataMerged[$count] = $nextTask['NEXT_TASK']; - unset($aDataMerged[$count]['USER_ASSIGNED']); - $aDataMerged[$count]['DEL_PRIORITY'] = ''; - $aDataMerged[$count]['NEXT_ROUTING'] = $post[$i]; - $count++; - $flag = true; - } else { - $aDataMerged[$count] = \G::array_merges($nextTask['NEXT_TASK'],$post[$i]); - unset($aDataMerged[$count]['USER_ASSIGNED']); - $count++; - $flag = true; - break; - } + if(isset($post[$i]['SOURCE_UID']) && ($nextTask['NEXT_TASK']['TAS_UID'] === $post[$i]['SOURCE_UID']) && ($post[$i]['SOURCE_UID'] !== $post[$i]['TAS_UID'])){ + $flagJumpTask = true; + $aDataMerged[$key]['NEXT_ROUTING'][] = $post[$i]; } } } - if(!$flag){ + //If flagJumpTask is false the template does not Jump Intermediate Events + if(!$flagJumpTask){ $aDataMerged = $post; } return $aDataMerged; From 07dd7e58e89d84bec8bce6e1c10ca8948ee9633b Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Thu, 4 Aug 2016 15:30:29 -0400 Subject: [PATCH 08/20] change methods --- workflow/engine/classes/class.derivation.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index aa039c0ed..074131d0a 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -80,7 +80,7 @@ class Derivation * * @return array Return array */ - protected function prepareInformationTask(array $arrayTaskData) + private function prepareInformationTask(array $arrayTaskData) { try { $task = new Task(); From 18ab7cd4d381ae65d0e467627e851320a992737e Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Fri, 5 Aug 2016 17:38:31 -0400 Subject: [PATCH 09/20] fix in derivation --- workflow/engine/classes/class.wsBase.php | 14 ++++++++------ .../src/ProcessMaker/BusinessModel/Light.php | 2 ++ .../engine/src/ProcessMaker/Core/RoutingScreen.php | 3 +-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index 8f2ad869b..d5bc254fd 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -2249,6 +2249,7 @@ class wsBase $oCase->setDelInitDate( $caseId, $delIndex ); $appFields = $oCase->loadCase( $caseId, $delIndex ); } + unset($appFields['APP_ROUTING_DATA']); $appFields["APP_DATA"]["APPLICATION"] = $caseId; @@ -2439,8 +2440,9 @@ class wsBase //derivate case $aCurrentDerivation = array ('APP_UID' => $caseId,'DEL_INDEX' => $delIndex,'APP_STATUS' => $sStatus,'TAS_UID' => $appdel['TAS_UID'],'ROU_TYPE' => $row[0]['ROU_TYPE'] ); - - $oDerivation->derivate( $aCurrentDerivation, $nextDelegations ); + $oRoute = new \ProcessMaker\Core\RoutingScreen(); + $nextTasks = $oRoute->mergeDataDerivation($nextDelegations, $oDerivation->prepareInformation($aData)); + $oDerivation->derivate( $aCurrentDerivation, $nextTasks ); $appFields = $oCase->loadCase( $caseId ); //Execute triggers after derivation @@ -2485,10 +2487,10 @@ class wsBase $appFields['APP_DATA'] = $oPMScript->aFields; //$appFields['APP_DATA']['APPLICATION'] = $caseId; //$appFields = $oCase->loadCase($caseId); - unset($aFields['APP_STATUS']); - unset($aFields['APP_PROC_STATUS']); - unset($aFields['APP_PROC_CODE']); - unset($aFields['APP_PIN']); + unset($appFields['APP_STATUS']); + unset($appFields['APP_PROC_STATUS']); + unset($appFields['APP_PROC_CODE']); + unset($appFields['APP_PIN']); $oCase->updateCase( $caseId, $appFields ); } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php index e5ec9dad0..65befbdbe 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php @@ -451,6 +451,7 @@ class Light $taskAss['delPriority'] = isset($aValues['NEXT_TASK']['DEL_PRIORITY'])?$aValues['NEXT_TASK']['DEL_PRIORITY']:""; $taskAss['taskParent'] = $aValues['NEXT_TASK']['TAS_PARENT']; $taskAss['taskMessage'] = $taskType?$taskMessage:""; + $taskAss['sourceUid'] = $aValues['SOURCE_UID']; $users = array(); $users['userId'] = $derive[$sKey]['NEXT_TASK']['USER_ASSIGNED']['USR_UID']; $users['userFullName'] = strip_tags($derive[$sKey]['NEXT_TASK']['USER_ASSIGNED']['USR_FULLNAME']); @@ -468,6 +469,7 @@ class Light $manual['delPriority'] = isset($aValues['NEXT_TASK']['DEL_PRIORITY'])?$aValues['NEXT_TASK']['DEL_PRIORITY']:""; $manual['taskParent'] = $aValues['NEXT_TASK']['TAS_PARENT']; $manual['taskMessage'] = $taskType?$taskMessage:""; + $manual['sourceUid'] = $aValues['SOURCE_UID']; $Aux = array (); foreach ($aValues['NEXT_TASK']['USER_ASSIGNED'] as $aUser) { $Aux[$aUser['USR_UID']] = $aUser['USR_FULLNAME']; diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index 603be8a7f..a8bd8fd31 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -13,14 +13,13 @@ class RoutingScreen extends \Derivation public function mergeDataDerivation($post, $prepareInformation) { - $iPost = count($post); $aDataMerged = array(); $flagJumpTask = false; foreach ($prepareInformation as $key => $nextTask) { $aDataMerged[$key] = $nextTask['NEXT_TASK']; unset($aDataMerged[$key]['USER_ASSIGNED']); $aDataMerged[$key]['DEL_PRIORITY'] = ''; - for ($i = 1; $i <= $iPost; $i++) { + foreach ($post as $i => $item) { if(isset($post[$i]['SOURCE_UID']) && ($nextTask['NEXT_TASK']['TAS_UID'] === $post[$i]['SOURCE_UID']) && ($post[$i]['SOURCE_UID'] !== $post[$i]['TAS_UID'])){ $flagJumpTask = true; $aDataMerged[$key]['NEXT_ROUTING'][] = $post[$i]; From bbc742bad83d17f65a2dc309399e2d0776358438 Mon Sep 17 00:00:00 2001 From: "Paula V. Quispe" Date: Tue, 9 Aug 2016 15:13:50 -0400 Subject: [PATCH 10/20] HOR-1502 --- workflow/engine/src/ProcessMaker/Core/RoutingScreen.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index a8bd8fd31..3a8302f4f 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -20,9 +20,13 @@ class RoutingScreen extends \Derivation unset($aDataMerged[$key]['USER_ASSIGNED']); $aDataMerged[$key]['DEL_PRIORITY'] = ''; foreach ($post as $i => $item) { - if(isset($post[$i]['SOURCE_UID']) && ($nextTask['NEXT_TASK']['TAS_UID'] === $post[$i]['SOURCE_UID']) && ($post[$i]['SOURCE_UID'] !== $post[$i]['TAS_UID'])){ + if(isset($post[$i]['SOURCE_UID']) && ($nextTask['NEXT_TASK']['TAS_UID'] === $post[$i]['SOURCE_UID'])){ $flagJumpTask = true; - $aDataMerged[$key]['NEXT_ROUTING'][] = $post[$i]; + if($post[$i]['SOURCE_UID'] === $post[$i]['TAS_UID']){ + $aDataMerged[$key]['USR_UID'] = $post[$i]['USR_UID']; + } else { + $aDataMerged[$key]['NEXT_ROUTING'][] = $post[$i]; + } } } } From 803394c2b05681f86ad8537b66d6a2a016d2b0e5 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Wed, 10 Aug 2016 15:25:54 -0400 Subject: [PATCH 11/20] fix in route screen --- workflow/engine/classes/class.derivation.php | 86 +++++++++++++++++++- workflow/engine/methods/cases/cases_Step.php | 2 +- 2 files changed, 86 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 074131d0a..cf42cf2c7 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -51,10 +51,12 @@ class Derivation protected $flagControl; protected $flagControlMulInstance; private $regexpTaskTypeToInclude; + public $flagSanity = false; public function __construct() { $this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT"); + $this->flagSanity = true; } /** @@ -256,7 +258,8 @@ class Derivation } //Check Task GATEWAYTOGATEWAY, END-MESSAGE-EVENT, END-EMAIL-EVENT - $arrayNextTaskBackup = $arrayNextTask; + $arrayNextTaskBackup = $this->preSanity($arrayNextTask); + $arrayNextTask = array(); $i = 0; foreach ($arrayNextTaskBackup as $value) { @@ -327,6 +330,87 @@ class Derivation } } + public function preSanity($arrayNextTask) + { + $arrayNextTaskResponse = array(); + if ($arrayNextTask) { + $arrayTask = array(); + $arrayNotTask = array(); + $regex = "END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"; + foreach ($arrayNextTask as $index => $item) { + if (($item["NEXT_TASK"]["TAS_UID"] != "-1" && + preg_match("/^(?:" . $regex . ")$/", $item["NEXT_TASK"]["TAS_TYPE"])) + ) { + $arrayNotTask[] = $index; + } else { + $arrayTask[] = $index; + } + } + if ($arrayTask) { + foreach ($arrayNotTask as $item) { + unset($arrayNextTask[$item]); + } + $arrayNextTaskResponse = array_values($arrayNextTask); + } else { + $pos = array_shift($arrayNotTask); + $arrayNextTaskResponse[] = $arrayNextTask[$pos]; + foreach ($arrayNextTask as $nextTask) { + $flag = false; + foreach ($arrayNextTaskResponse as $task) { + if (!in_array($nextTask['ROU_NEXT_TASK'], $task, true)) { + $flag = true; + } + } + if ($flag) { + $arrayNextTaskResponse[] = $nextTask; + } + } + } + } + return $arrayNextTaskResponse; + } + + public function postSanity($arrayNextTask) + { + $arrayNextTaskResponse = array(); + if ($arrayNextTask) { + $arrayTask = array(); + $arrayNotTask = array(); + $regex = "GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"; + foreach ($arrayNextTask as $index => $item) { + if (($item["NEXT_TASK"]["TAS_UID"] != "-1" && + preg_match("/^(?:" . $regex . ")$/", $item["NEXT_TASK"]["TAS_TYPE"])) + || $item['ROU_TYPE'] == "SEC-JOIN" + ) { + $arrayNotTask[] = $index; + } else { + $arrayTask[] = $index; + } + } + if ($arrayTask) { + foreach ($arrayNotTask as $item) { + unset($arrayNextTask[$item]); + } + $arrayNextTaskResponse = array_values($arrayNextTask); + } else { + $pos = array_shift($arrayNotTask); + $arrayNextTaskResponse[] = $arrayNextTask[$pos]; + foreach ($arrayNextTask as $nextTask) { + $flag = false; + foreach ($arrayNextTaskResponse as $task) { + if (!in_array($nextTask['ROU_NEXT_TASK'], $task, true)) { + $flag = true; + } + } + if ($flag) { + $arrayNextTaskResponse[] = $nextTask; + } + } + } + } + return array_combine(range(1, count($arrayNextTaskResponse)), array_values($arrayNextTaskResponse)); + } + /** * getRouteCondition * diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index e3dc45004..d081b715f 100755 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -804,7 +804,7 @@ try { 'APP_UID' => $_SESSION['APPLICATION'], 'DEL_INDEX' => $_SESSION['INDEX'] ); - $aFields['TASK'] = $oRoute->prepareInformation($arrayData); + $aFields['TASK'] = $oRoute->postSanity($oRoute->prepareInformation($arrayData)); if (empty( $aFields['TASK'] )) { throw (new Exception( G::LoadTranslation( 'ID_NO_DERIVATION_RULE' ) )); From 7755e365134a40a8be7212e491b6374570c03b10 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Thu, 11 Aug 2016 12:06:34 -0400 Subject: [PATCH 12/20] fix in Script Task --- workflow/engine/classes/class.derivation.php | 8 +++++--- workflow/engine/src/ProcessMaker/Core/RoutingScreen.php | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index cf42cf2c7..0ca09abb1 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -258,8 +258,10 @@ class Derivation } //Check Task GATEWAYTOGATEWAY, END-MESSAGE-EVENT, END-EMAIL-EVENT - $arrayNextTaskBackup = $this->preSanity($arrayNextTask); - + $arrayNextTaskBackup = $arrayNextTask; + if ($this->flagSanity) { + $arrayNextTaskBackup = $this->preSanity($arrayNextTask); + } $arrayNextTask = array(); $i = 0; foreach ($arrayNextTaskBackup as $value) { @@ -376,7 +378,7 @@ class Derivation if ($arrayNextTask) { $arrayTask = array(); $arrayNotTask = array(); - $regex = "GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"; + $regex = "GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"; foreach ($arrayNextTask as $index => $item) { if (($item["NEXT_TASK"]["TAS_UID"] != "-1" && preg_match("/^(?:" . $regex . ")$/", $item["NEXT_TASK"]["TAS_TYPE"])) diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index 3a8302f4f..69362171a 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -8,7 +8,7 @@ class RoutingScreen extends \Derivation public function __construct() { parent::__construct(); - $this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"); + $this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"); } public function mergeDataDerivation($post, $prepareInformation) From 37cae26d3a37e2b3e906eee4da4b1e82de8ccc8a Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Thu, 11 Aug 2016 12:09:24 -0400 Subject: [PATCH 13/20] fix in flag --- workflow/engine/classes/class.derivation.php | 1 - workflow/engine/src/ProcessMaker/Core/RoutingScreen.php | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 0ca09abb1..140899388 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -56,7 +56,6 @@ class Derivation public function __construct() { $this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT"); - $this->flagSanity = true; } /** diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index 69362171a..56c7035a3 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -9,6 +9,7 @@ class RoutingScreen extends \Derivation { parent::__construct(); $this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"); + $this->flagSanity = true; } public function mergeDataDerivation($post, $prepareInformation) From 880c0f0c8b2fa5f8b62ae2bf717db3be89e7c4f7 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Thu, 11 Aug 2016 12:54:48 -0400 Subject: [PATCH 14/20] change to methods --- workflow/engine/methods/cases/cases_Step.php | 2 +- workflow/engine/src/ProcessMaker/Core/RoutingScreen.php | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index d081b715f..566003b5d 100755 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -804,7 +804,7 @@ try { 'APP_UID' => $_SESSION['APPLICATION'], 'DEL_INDEX' => $_SESSION['INDEX'] ); - $aFields['TASK'] = $oRoute->postSanity($oRoute->prepareInformation($arrayData)); + $aFields['TASK'] = $oRoute->prepareRoutingScreen($arrayData); if (empty( $aFields['TASK'] )) { throw (new Exception( G::LoadTranslation( 'ID_NO_DERIVATION_RULE' ) )); diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index 56c7035a3..d6428218b 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -38,4 +38,9 @@ class RoutingScreen extends \Derivation return $aDataMerged; } + public function prepareRoutingScreen($arrayData) + { + return $this->postSanity($this->prepareInformation($arrayData)); + } + } \ No newline at end of file From d599dfa76fb556595cde0ef7b0aab7df30eff3b8 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Fri, 12 Aug 2016 07:41:52 -0400 Subject: [PATCH 15/20] change in methods --- workflow/engine/classes/class.derivation.php | 8 ++-- .../src/ProcessMaker/Core/RoutingScreen.php | 47 ++++++++++++++++++- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 140899388..3a6b7867d 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -52,6 +52,7 @@ class Derivation protected $flagControlMulInstance; private $regexpTaskTypeToInclude; public $flagSanity = false; + public $node; public function __construct() { @@ -259,18 +260,19 @@ class Derivation //Check Task GATEWAYTOGATEWAY, END-MESSAGE-EVENT, END-EMAIL-EVENT $arrayNextTaskBackup = $arrayNextTask; if ($this->flagSanity) { - $arrayNextTaskBackup = $this->preSanity($arrayNextTask); + //$arrayNextTaskBackup = $this->preSanity($arrayNextTask); } $arrayNextTask = array(); $i = 0; foreach ($arrayNextTaskBackup as $value) { $arrayNextTaskData = $value; - + $this->node[$value['TAS_UID']]['out'][$value['ROU_NEXT_TASK']] = $value['ROU_TYPE']; + //$this->node[$value['TAS_UID']]['type'][] = $value['ROU_TYPE']; if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] != "-1" && preg_match("/^(?:" . $this->regexpTaskTypeToInclude . ")$/", $arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"]) ) { $arrayAux = $this->prepareInformation($arrayData, $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]); - + $this->node[$value['ROU_NEXT_TASK']]['in'][$value['TAS_UID']] = $value['ROU_TYPE']; foreach ($arrayAux as $value2) { $key = ++$i; $arrayNextTask[$key] = $value2; diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index d6428218b..838d56984 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -5,6 +5,11 @@ namespace ProcessMaker\Core; class RoutingScreen extends \Derivation { + public $convergent = 0; + public $divergent = 0; + public $gateway = array('PARALLEL', 'PARALLEL-BY-EVALUATION'); + public $isFirst; + public function __construct() { parent::__construct(); @@ -40,7 +45,47 @@ class RoutingScreen extends \Derivation public function prepareRoutingScreen($arrayData) { - return $this->postSanity($this->prepareInformation($arrayData)); + $array = $this->postSanity($this->prepareInformation($arrayData)); + return $array; + } + + public function postSanity($arrayInformation) + { + $response = array(); + foreach ($arrayInformation as $index => $element) { + $this->divergent = 0; + $this->convergent = 0; + $this->isFirst = true; + if ($this->checkElement($this->node[$element['TAS_UID']])) { + $response[] = $element; + } + } + return array_combine(range(1, count($response)), array_values($response)); + //return parent::postSanity($arrayNextTask); // TODO: Change the autogenerated stub + } + + public function checkElement($element) + { + if (empty($element['in'])) { + $x = 1; + return; + } + $outElement = $element['out']; + foreach ($outElement as $index => $outE) { + if (!$this->isFirst && in_array($outE, $this->gateway)) { + $this->divergent++; + } + } + $this->isFirst = false; + $inElement = $element['in']; + foreach ($inElement as $index => $inE) { + if ($inE == 'SEC-JOIN') { + $this->convergent++; + } + $this->checkElement($this->node[$index]); + } + //$this->checkElement($inElement); + return $this->convergent == 0 || $this->convergent == $this->divergent; } } \ No newline at end of file From 04ac513270ca4b2329ff25bca111d7f6205f0876 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Fri, 12 Aug 2016 12:05:55 -0400 Subject: [PATCH 16/20] fix in method --- workflow/engine/classes/class.derivation.php | 87 +------------------ .../src/ProcessMaker/Core/RoutingScreen.php | 68 +++++++++------ 2 files changed, 45 insertions(+), 110 deletions(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 3a6b7867d..5b6383e9d 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -51,7 +51,7 @@ class Derivation protected $flagControl; protected $flagControlMulInstance; private $regexpTaskTypeToInclude; - public $flagSanity = false; +// public $flagSanity = false; public $node; public function __construct() @@ -259,9 +259,7 @@ class Derivation //Check Task GATEWAYTOGATEWAY, END-MESSAGE-EVENT, END-EMAIL-EVENT $arrayNextTaskBackup = $arrayNextTask; - if ($this->flagSanity) { - //$arrayNextTaskBackup = $this->preSanity($arrayNextTask); - } + $arrayNextTask = array(); $i = 0; foreach ($arrayNextTaskBackup as $value) { @@ -333,87 +331,6 @@ class Derivation } } - public function preSanity($arrayNextTask) - { - $arrayNextTaskResponse = array(); - if ($arrayNextTask) { - $arrayTask = array(); - $arrayNotTask = array(); - $regex = "END-MESSAGE-EVENT|END-EMAIL-EVENT|SCRIPT-TASK|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"; - foreach ($arrayNextTask as $index => $item) { - if (($item["NEXT_TASK"]["TAS_UID"] != "-1" && - preg_match("/^(?:" . $regex . ")$/", $item["NEXT_TASK"]["TAS_TYPE"])) - ) { - $arrayNotTask[] = $index; - } else { - $arrayTask[] = $index; - } - } - if ($arrayTask) { - foreach ($arrayNotTask as $item) { - unset($arrayNextTask[$item]); - } - $arrayNextTaskResponse = array_values($arrayNextTask); - } else { - $pos = array_shift($arrayNotTask); - $arrayNextTaskResponse[] = $arrayNextTask[$pos]; - foreach ($arrayNextTask as $nextTask) { - $flag = false; - foreach ($arrayNextTaskResponse as $task) { - if (!in_array($nextTask['ROU_NEXT_TASK'], $task, true)) { - $flag = true; - } - } - if ($flag) { - $arrayNextTaskResponse[] = $nextTask; - } - } - } - } - return $arrayNextTaskResponse; - } - - public function postSanity($arrayNextTask) - { - $arrayNextTaskResponse = array(); - if ($arrayNextTask) { - $arrayTask = array(); - $arrayNotTask = array(); - $regex = "GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"; - foreach ($arrayNextTask as $index => $item) { - if (($item["NEXT_TASK"]["TAS_UID"] != "-1" && - preg_match("/^(?:" . $regex . ")$/", $item["NEXT_TASK"]["TAS_TYPE"])) - || $item['ROU_TYPE'] == "SEC-JOIN" - ) { - $arrayNotTask[] = $index; - } else { - $arrayTask[] = $index; - } - } - if ($arrayTask) { - foreach ($arrayNotTask as $item) { - unset($arrayNextTask[$item]); - } - $arrayNextTaskResponse = array_values($arrayNextTask); - } else { - $pos = array_shift($arrayNotTask); - $arrayNextTaskResponse[] = $arrayNextTask[$pos]; - foreach ($arrayNextTask as $nextTask) { - $flag = false; - foreach ($arrayNextTaskResponse as $task) { - if (!in_array($nextTask['ROU_NEXT_TASK'], $task, true)) { - $flag = true; - } - } - if ($flag) { - $arrayNextTaskResponse[] = $nextTask; - } - } - } - } - return array_combine(range(1, count($arrayNextTaskResponse)), array_values($arrayNextTaskResponse)); - } - /** * getRouteCondition * diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index 838d56984..fb9117456 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -5,16 +5,16 @@ namespace ProcessMaker\Core; class RoutingScreen extends \Derivation { - public $convergent = 0; - public $divergent = 0; + protected $convergent; + protected $divergent; public $gateway = array('PARALLEL', 'PARALLEL-BY-EVALUATION'); public $isFirst; + protected $taskSecJoin; public function __construct() { parent::__construct(); $this->setRegexpTaskTypeToInclude("GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT|INTERMEDIATE-CATCH-TIMER-EVENT|INTERMEDIATE-THROW-EMAIL-EVENT"); - $this->flagSanity = true; } public function mergeDataDerivation($post, $prepareInformation) @@ -45,47 +45,65 @@ class RoutingScreen extends \Derivation public function prepareRoutingScreen($arrayData) { - $array = $this->postSanity($this->prepareInformation($arrayData)); - return $array; - } - - public function postSanity($arrayInformation) - { + $information= $this->prepareInformation($arrayData); $response = array(); - foreach ($arrayInformation as $index => $element) { - $this->divergent = 0; - $this->convergent = 0; + $this->taskSecJoin = array(); + foreach ($information as $index => $element) { + $this->divergent = array(); + $this->convergent = array(); $this->isFirst = true; - if ($this->checkElement($this->node[$element['TAS_UID']])) { - $response[] = $element; + $x = $this->checkElement($this->node[$element['TAS_UID']]); + if ($x) { + $save = false; + foreach ($response as $task) { + if (!in_array($element['ROU_NEXT_TASK'], $task, true)) { + $save = true; + } + } + if ((!$response || $save)) { + $response[] = $element; + } + } + } + if(count($response) > 1){ + foreach ($response as $index => $task) { + $delete = false; + foreach ($this->taskSecJoin as $tj => $type) { + if (in_array($tj, $task, true)) { + $delete = true; + } + } + if ($delete) { + unset($response[$index]); + } } } return array_combine(range(1, count($response)), array_values($response)); - //return parent::postSanity($arrayNextTask); // TODO: Change the autogenerated stub } - + public function checkElement($element) { if (empty($element['in'])) { - $x = 1; - return; + return true; } $outElement = $element['out']; - foreach ($outElement as $index => $outE) { + foreach ($outElement as $indexO => $outE) { if (!$this->isFirst && in_array($outE, $this->gateway)) { - $this->divergent++; + $this->divergent[$indexO] = $outE; + } + if ($outE == 'SEC-JOIN' && strpos($indexO, 'itee') === false) { + $this->taskSecJoin[$indexO] = $outE; } } $this->isFirst = false; $inElement = $element['in']; - foreach ($inElement as $index => $inE) { + foreach ($inElement as $indexI => $inE) { if ($inE == 'SEC-JOIN') { - $this->convergent++; + $this->convergent[$indexI]=$inE; } - $this->checkElement($this->node[$index]); + $this->checkElement($this->node[$indexI]); } - //$this->checkElement($inElement); - return $this->convergent == 0 || $this->convergent == $this->divergent; + return count($this->convergent) == 0 || count($this->convergent) == count($this->divergent); } } \ No newline at end of file From c2b5219bd1922c16719d16bd1017d546c5f353d1 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Fri, 12 Aug 2016 12:07:52 -0400 Subject: [PATCH 17/20] remove comment --- workflow/engine/classes/class.derivation.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 5b6383e9d..690935875 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -51,7 +51,6 @@ class Derivation protected $flagControl; protected $flagControlMulInstance; private $regexpTaskTypeToInclude; -// public $flagSanity = false; public $node; public function __construct() @@ -265,7 +264,6 @@ class Derivation foreach ($arrayNextTaskBackup as $value) { $arrayNextTaskData = $value; $this->node[$value['TAS_UID']]['out'][$value['ROU_NEXT_TASK']] = $value['ROU_TYPE']; - //$this->node[$value['TAS_UID']]['type'][] = $value['ROU_TYPE']; if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] != "-1" && preg_match("/^(?:" . $this->regexpTaskTypeToInclude . ")$/", $arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"]) ) { From 2a77c913b4f194f19ae905297d0a53cc056bbf4f Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Fri, 12 Aug 2016 15:30:38 -0400 Subject: [PATCH 18/20] fix in task to task --- .../engine/src/ProcessMaker/Core/RoutingScreen.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index fb9117456..8aa1d93ca 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -80,12 +80,9 @@ class RoutingScreen extends \Derivation } return array_combine(range(1, count($response)), array_values($response)); } - + public function checkElement($element) { - if (empty($element['in'])) { - return true; - } $outElement = $element['out']; foreach ($outElement as $indexO => $outE) { if (!$this->isFirst && in_array($outE, $this->gateway)) { @@ -95,11 +92,14 @@ class RoutingScreen extends \Derivation $this->taskSecJoin[$indexO] = $outE; } } + if (empty($element['in'])) { + return true; + } $this->isFirst = false; $inElement = $element['in']; foreach ($inElement as $indexI => $inE) { - if ($inE == 'SEC-JOIN') { - $this->convergent[$indexI]=$inE; + if ($inE == 'SEC-JOIN' && strpos($indexI, 'itee') !== false) { + $this->convergent[$indexI] = $inE; } $this->checkElement($this->node[$indexI]); } From 2e305448eea5a68f4b7a06a06153960705a01fdc Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Fri, 12 Aug 2016 17:06:53 -0400 Subject: [PATCH 19/20] fix in task --- workflow/engine/src/ProcessMaker/Core/RoutingScreen.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index 8aa1d93ca..687f14a05 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -103,7 +103,7 @@ class RoutingScreen extends \Derivation } $this->checkElement($this->node[$indexI]); } - return count($this->convergent) == 0 || count($this->convergent) == count($this->divergent); + return count($this->convergent) == 0 || count($this->divergent) == 0 || count($this->convergent) == count($this->divergent); } } \ No newline at end of file From 6d62e2ff4e93cd8a41a4f9672ce642d5e9d2af76 Mon Sep 17 00:00:00 2001 From: Ronald Q Date: Sat, 13 Aug 2016 11:35:24 -0400 Subject: [PATCH 20/20] support for mobile --- workflow/engine/src/ProcessMaker/BusinessModel/Light.php | 4 ++-- workflow/engine/src/ProcessMaker/Core/RoutingScreen.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php index 261afc639..454b4b638 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php @@ -394,7 +394,7 @@ class Light * * return array Return an array with Task Case */ - public function GetPrepareInformation($usr_uid, $tas_uid, $app_uid, $del_index = null) + public function getPrepareInformation($usr_uid, $tas_uid, $app_uid, $del_index = null) { try { $oCase = new \Cases(); @@ -418,7 +418,7 @@ class Light $aData['DEL_INDEX'] = $del_index; $aData['USER_UID'] = $usr_uid; $oRoute = new \ProcessMaker\Core\RoutingScreen(); - $derive = $oRoute->prepareInformation($aData); + $derive = $oRoute->prepareRoutingScreen($aData); $response = array(); foreach ($derive as $sKey => &$aValues) { $sPriority = ''; //set priority value diff --git a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php index 687f14a05..ce01bae09 100644 --- a/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php +++ b/workflow/engine/src/ProcessMaker/Core/RoutingScreen.php @@ -45,7 +45,7 @@ class RoutingScreen extends \Derivation public function prepareRoutingScreen($arrayData) { - $information= $this->prepareInformation($arrayData); + $information = $this->prepareInformation($arrayData); $response = array(); $this->taskSecJoin = array(); foreach ($information as $index => $element) { @@ -65,7 +65,7 @@ class RoutingScreen extends \Derivation } } } - if(count($response) > 1){ + if (count($response) > 1) { foreach ($response as $index => $task) { $delete = false; foreach ($this->taskSecJoin as $tj => $type) {