From fc99538a1fc471a9ab67e6ea23567f0d8d999417 Mon Sep 17 00:00:00 2001 From: "Marco A. Nina Mena" Date: Thu, 12 Feb 2026 16:35:01 -0400 Subject: [PATCH] Implement process request status updates in RollbackProcessRequest class --- ProcessMaker/RollbackProcessRequest.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/ProcessMaker/RollbackProcessRequest.php b/ProcessMaker/RollbackProcessRequest.php index 80ebb76540..25f02da940 100644 --- a/ProcessMaker/RollbackProcessRequest.php +++ b/ProcessMaker/RollbackProcessRequest.php @@ -127,6 +127,7 @@ public function rollback( break; } + // update the process request status to active $processRequest = $this->newTask->processRequest; $processRequest->status = 'ACTIVE'; $process = $processRequest->process; @@ -135,9 +136,12 @@ public function rollback( )->id; $processRequest->saveOrFail(); + // update the current task status to closed $currentTask->status = 'CLOSED'; $currentTask->saveOrFail(); + $this->syncParentProcessStatus($processRequest); + return $this->newTask; } @@ -209,4 +213,25 @@ private function addComment() : void 'case_number' => isset($this->currentTask->case_number) ? $this->currentTask->case_number : null, ]); } + + /** + * When the rolled-back request is a subprocess, reactivate the parent request + * and the parent's call activity tokens that were in error. + */ + private function syncParentProcessStatus(ProcessRequest $processRequest): void + { + $parentRequest = $processRequest->parentRequest; + if (!$parentRequest) { + return; + } + + if (in_array($parentRequest->status, ['ERROR', 'FAILING'])) { + $parentRequest->status = 'ACTIVE'; + $parentRequest->saveOrFail(); + } + + ProcessRequestToken::where('subprocess_request_id', $processRequest->id) + ->whereIn('status', ['ERROR', 'FAILING']) + ->update(['status' => 'ACTIVE']); + } }