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}