diff --git a/workflow/engine/methods/cases/open.php b/workflow/engine/methods/cases/open.php index fe6ea043c..0e49ee283 100644 --- a/workflow/engine/methods/cases/open.php +++ b/workflow/engine/methods/cases/open.php @@ -109,12 +109,14 @@ if( isset($_GET['action']) && ($_GET['action'] == 'jump') ) { } if(isset($_GET['actionFromList']) && ($_GET['actionFromList'] === 'to_revise') ){ - $oApp = new Application; - $oApp->Load($appUid); - //If the case is completed can not update the information from supervisor/review - if($oApp->getAppStatus() === 'COMPLETED') { + $oSupervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $caseCanBeReview = $oSupervisor->reviewCaseStatusForSupervisor($appUid, $delIndex); + //Check if the case has the correct status for update the information from supervisor/review + if (!$caseCanBeReview) { + //The supervisor can not edit the information $script = 'cases_Open?'; } else { + //The supervisor can edit the information, the case are in TO_DO $script = 'cases_OpenToRevise?APP_UID=' . $appUid . '&DEL_INDEX=' . $delIndex . '&TAS_UID=' . $tasUid; $oHeadPublisher->assign( 'treeToReviseTitle', G::loadtranslation( 'ID_STEP_LIST' ) ); $casesPanelUrl = 'casesToReviseTreeContent?APP_UID=' . $appUid . '&DEL_INDEX=' . $delIndex; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php index 87503f43d..41d566bb1 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php @@ -1494,4 +1494,36 @@ class ProcessSupervisor } return false; } + + /** + * This function define if the supervisor can be review and edit + * The appStatus can be:TO_DO, DRAFT, COMPLETED, CANCELLED + * The thread status can be: PAUSED + * @param string $appUid + * @param integer $delIndex + * @return array + */ + public function reviewCaseStatusForSupervisor($appUid, $delIndex = 0) + { + $oApp = new \Application(); + $oApp->Load($appUid); + $canEdit = false; + switch ($oApp->getAppStatus()) { + case 'TO_DO': + //Verify if the case is paused because the supervisor can not edit the PAUSED case + $oDelay = new \AppDelay(); + if ($oDelay->isPaused($appUid, $delIndex)) { + $canEdit = false; + } else { + $canEdit = true; + } + break; + case 'COMPLETED': + case 'CANCELLED': + default: + $canEdit = false; + } + + return $canEdit; + } }