diff --git a/workflow/engine/src/BusinessModel/Task.php b/workflow/engine/src/BusinessModel/Task.php index 7b5fbb2d9..55cfd052b 100644 --- a/workflow/engine/src/BusinessModel/Task.php +++ b/workflow/engine/src/BusinessModel/Task.php @@ -1854,6 +1854,99 @@ class Task } } + /** + * Validate Process Uid + * @var string $pro_uid. Uid for Process + * @var string $tas_uid. Uid for Task + * @var string $step_uid. Uid for Step + * @var string $step_uid_rel. Uid Step for relation + * @var string $type. Type relation + * + * @author Brayan Pereyra (Cochalo) + * @copyright Colosa - Bolivia + * + * @return void + */ + public function moveSteps($pro_uid, $tas_uid, $step_uid, $step_uid_rel, $type) { + $pro_uid = $this->validateProUid($pro_uid); + $tas_uid = $this->validateActUid($tas_uid); + + $this->setFormatFieldNameInUppercase(false); + $this->setArrayParamException(array("taskUid" => "act_uid")); + $aSteps = $this->getSteps($tas_uid); + + foreach ($aSteps as $dataStep) { + if ($dataStep['step_uid'] == $step_uid) { + $prStepPos = (int)$dataStep['step_position']; + } elseif ($dataStep['step_uid'] == $step_uid_rel) { + $seStepPos = (int)$dataStep['step_position']; + } + } + + //Principal Step is up + if ($prStepPos < $seStepPos) { + $modPos = 'UP'; + if ($type == 'DOWN') { + $newPos = $seStepPos; + $iniPos = $prStepPos+1; + $finPos = $seStepPos; + } else { + $newPos = $seStepPos-1; + $iniPos = $prStepPos+1; + $finPos = $seStepPos-1; + } + } else { + $modPos = 'DOWN'; + if ($type == 'UP') { + $newPos = $seStepPos; + $iniPos = $seStepPos; + $finPos = $prStepPos-1; + } else { + $newPos = $seStepPos-1; + $iniPos = $seStepPos-1; + $finPos = $prStepPos-1; + } + } + + $range = range($iniPos, $finPos); + foreach ($aSteps as $dataStep) { + if ((in_array($dataStep['step_position'], $range)) && ($dataStep['step_uid'] != $step_uid)) { + $stepChangeIds[] = $dataStep['step_uid']; + $stepChangePos[] = $dataStep['step_position']; + } + } + + foreach ($stepChangeIds as $key => $value) { + if ($modPos == 'UP') { + $tempPos = ((int)$stepChangePos[$key])-1; + $this->changePosStep($value, $tempPos); + } else { + $tempPos = ((int)$stepChangePos[$key])+1; + $this->changePosStep($value, $tempPos); + } + } + $this->changePosStep($step_uid, $newPos); + } + + /** + * Validate Process Uid + * @var string $pro_uid. Uid for process + * + * @author Brayan Pereyra (Cochalo) + * @copyright Colosa - Bolivia + * + * @return string + */ + public function changePosStep ($step_uid, $pos) + { + $data = array( + 'STEP_UID' => $step_uid, + 'STEP_POSITION' => $pos + ); + $oStep = new \Step(); + $oStep->update($data); + } + /** * Validate Process Uid * @var string $pro_uid. Uid for process diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project/Activity.php b/workflow/engine/src/Services/Api/ProcessMaker/Project/Activity.php index 20cc2daed..fcad391f7 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Project/Activity.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project/Activity.php @@ -120,7 +120,6 @@ class Activity extends Api $task->setArrayParamException(array("taskUid" => "act_uid", "stepUid" => "step_uid")); $response = $task->getSteps($act_uid); - return $response; } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); @@ -147,6 +146,31 @@ class Activity extends Api throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } + + /** + * @param string $prj_uid {@min 1} {@max 32} + * @param string $act_uid {@min 1} {@max 32} + * @param string $step_uid {@min 1} {@max 32} + * @param string $step_uid_rel {@min 1} {@max 32} + * @param string $type_change {@choice UP,DOWN} + * + * @access public + * @author Brayan Pereyra (Cochalo) + * @copyright Colosa - Bolivia + * + * @return void + * + * @url PUT /:prj_uid/activity/:act_uid/step-move/:step_uid/:step_uid_rel/:type_change + */ + public function doPutStepsMoves ($prj_uid, $act_uid, $step_uid, $step_uid_rel, $type_change) + { + try { + $task = new \BusinessModel\Task(); + $task->moveSteps($prj_uid, $act_uid, $step_uid, $step_uid_rel, $type_change); + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } }