diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Task.php b/workflow/engine/src/ProcessMaker/BusinessModel/Task.php index 1dd0e9c11..10bb88b1b 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Task.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Task.php @@ -1894,7 +1894,12 @@ class Task } } - public function getValidateSelfService($data) + /** + * This method verify if an activity has cases + * @param $data + * @return \stdclass + */ + public function hasPendingCases($data) { $paused = false; $data = array_change_key_case($data, CASE_LOWER); diff --git a/workflow/engine/src/ProcessMaker/Exception/ProjectNotFound.php b/workflow/engine/src/ProcessMaker/Exception/ProjectNotFound.php index 5e017eb67..73b4957bd 100644 --- a/workflow/engine/src/ProcessMaker/Exception/ProjectNotFound.php +++ b/workflow/engine/src/ProcessMaker/Exception/ProjectNotFound.php @@ -5,7 +5,7 @@ use ProcessMaker\Project; class ProjectNotFound extends \RuntimeException { - const EXCEPTION_CODE = 20; + const EXCEPTION_CODE = 400; public function __construct(Project\Handler $obj, $uid, $message = "", \Exception $previous = null) { $message = empty($message) ? sprintf("Project \"%s\" with UID: %s, does not exist.", get_class($obj), $uid) : $message; diff --git a/workflow/engine/src/ProcessMaker/Project/Bpmn.php b/workflow/engine/src/ProcessMaker/Project/Bpmn.php index 3db94b13a..3ebb318b1 100644 --- a/workflow/engine/src/ProcessMaker/Project/Bpmn.php +++ b/workflow/engine/src/ProcessMaker/Project/Bpmn.php @@ -1,39 +1,36 @@ delete(); - //TODO if the activity was removed, the related flows to that activity must be removed - + if (isset($activity)) { + $activity->delete(); + Flow::removeAllRelated($actUid); + } else { + throw new Exception(G::LoadTranslation("ID_ACTIVITY_DOES_NOT_EXIST", array("act_uid", $actUid))); + } self::log("Remove Activity Success!"); } catch (\Exception $e) { self::log("Exception: ", $e->getMessage(), "Trace: ", $e->getTraceAsString()); diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php index e55585094..d95f3f47b 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/Activity.php @@ -1,8 +1,11 @@ - * @copyright Colosa - Bolivia * @return array - * + * @access protected + * @class AccessControl {@permission PM_FACTORY} * @url DELETE /:prj_uid/activity/:act_uid */ public function doDeleteProjectActivity($prj_uid, $act_uid) { try { - $task = new \ProcessMaker\BusinessModel\Task(); - $task->deleteTask($prj_uid, $act_uid); - } catch (\Exception $e) { - throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + $task = new Task(); + $task->setFormatFieldNameInUppercase(false); + $task->setArrayParamException(array("taskUid" => "act_uid")); + + $response = $task->hasPendingCases(array("act_uid" => $act_uid, "case_type" => "assigned")); + if ($response->result !== false) { + $project = new BpmnWorkflow(); + $prj = $project->load($prj_uid); + $prj->removeActivity($act_uid); + } else { + throw new RestException(403, $response->message); + } + } catch (Exception $e) { + $resCode = $e->getCode() == 0 ? Api::STAT_APP_EXCEPTION : $e->getCode(); + throw new RestException($resCode, $e->getMessage()); } } @@ -215,7 +228,7 @@ class Activity extends Api $task->setFormatFieldNameInUppercase(false); $task->setArrayParamException(array("taskUid" => "act_uid")); - $response = $task->getValidateSelfService($request_data); + $response = $task->hasPendingCases($request_data); return $response; } catch (\Exception $e) {