From 20f9143b7767b15da424c7cf7febfb65e3c146ec Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 1 Sep 2025 15:55:04 -0400 Subject: [PATCH] FOUR-26105 --- .../Http/Controllers/CasesController.php | 61 ++++++++++++++++--- .../cases/casesDetail/components/StageBar.vue | 2 +- 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/ProcessMaker/Http/Controllers/CasesController.php b/ProcessMaker/Http/Controllers/CasesController.php index c6a0a94e44..999d383672 100644 --- a/ProcessMaker/Http/Controllers/CasesController.php +++ b/ProcessMaker/Http/Controllers/CasesController.php @@ -85,16 +85,9 @@ public function show($case_number) $request->summary_screen = $request->getSummaryScreen(); } // Stage information - if ($request->status === 'COMPLETED') { - $currentStages = [ - 'stage_name' => __('Completed'), - ]; - $progressStage = 100.0; // 100% completed - } else { - $currentStages = $this->formatCurrentStage($request->last_stage_id, $request->last_stage_name); - $allStages = $this->getStagesByProcessId($request->process_id); - $progressStage = calculateProgressById($request->last_stage_id, $allStages); - } + $stageInfo = $this->getStageInfoByStatus($request); + $currentStages = $stageInfo['currentStages']; + $progressStage = $stageInfo['progressStage']; // Load the screen configured in "Request Detail Screen" $request->request_detail_screen = Screen::find($request->process->request_detail_screen_id); // The user canCancel if has the processPermission and the case has only one request @@ -215,4 +208,52 @@ public static function formatCurrentStage(?int $id, ?string $name): array return $currentStages; } + + /** + * Get stage information based on request status + * + * @param ProcessRequest $request + * @return array + */ + private function getStageInfoByStatus(ProcessRequest $request): array + { + switch ($request->status) { + case 'COMPLETED': + return [ + 'currentStages' => [ + 'stage_name' => __('Completed'), + ], + 'progressStage' => 100.0, // 100% completed + ]; + case 'CANCELED': + return [ + 'currentStages' => [ + 'stage_name' => __('Canceled'), + ], + 'progressStage' => 0.0, // 0% progress when canceled + ]; + case 'ERROR': + return [ + 'currentStages' => [ + 'stage_name' => __('Error'), + ], + 'progressStage' => 0.0, // 0% progress when error + ]; + default: + $currentStages = $this->formatCurrentStage($request->last_stage_id, $request->last_stage_name); + $allStages = $this->getStagesByProcessId($request->process_id); + $progressStage = calculateProgressById($request->last_stage_id, $allStages); + if (empty($currentStages)) { + $currentStages = [ + 'stage_name' => __('In Progress'), + ]; + $progressStage = 50.0; + } + + return [ + 'currentStages' => $currentStages, + 'progressStage' => $progressStage, + ]; + } + } } diff --git a/resources/jscomposition/cases/casesDetail/components/StageBar.vue b/resources/jscomposition/cases/casesDetail/components/StageBar.vue index 340ccf985b..52c9eea1b3 100644 --- a/resources/jscomposition/cases/casesDetail/components/StageBar.vue +++ b/resources/jscomposition/cases/casesDetail/components/StageBar.vue @@ -1,5 +1,5 @@