diff --git a/database/factories/StepSupervisorFactory.php b/database/factories/StepSupervisorFactory.php new file mode 100644 index 000000000..2efaf5f16 --- /dev/null +++ b/database/factories/StepSupervisorFactory.php @@ -0,0 +1,23 @@ + $this->faker->regexify("/[a-zA-Z]{32}/"), + 'PRO_UID' => function () { + return \ProcessMaker\Model\Process::factory()->create()->PRO_UID; + }, + 'STEP_TYPE_OBJ' => 'DYNAFORM', + 'STEP_UID_OBJ' => function () { + return \ProcessMaker\Model\Dynaform::factory()->create()->DYN_UID; + }, + 'STEP_POSITION' => 1 + ]; + } +} diff --git a/tests/unit/workflow/engine/classes/PmDynaformTest.php b/tests/unit/workflow/engine/classes/PmDynaformTest.php index 7aec26425..db54c550a 100644 --- a/tests/unit/workflow/engine/classes/PmDynaformTest.php +++ b/tests/unit/workflow/engine/classes/PmDynaformTest.php @@ -1,8 +1,11 @@ assertTrue(empty($_SESSION['USER_LOGGED'])); } + + /** + * @test + * @covers PmDynaform::navigationBarForStepsToRevise + */ + public function it_should_test_navigationBarForStepsToRevise() + { + //definition data + $dynaform = Dynaform::factory()->create(); + $inputDocument = InputDocument::factory()->create(); + $application = Application::factory()->create([ + 'PRO_UID' => $dynaform->PRO_UID + ]); + StepSupervisor::factory()->create([ + 'PRO_UID' => $application->PRO_UID, + 'STEP_TYPE_OBJ' => 'DYNAFORM', + 'STEP_UID_OBJ' => $dynaform->DYN_UID + ]); + StepSupervisor::factory()->create([ + 'PRO_UID' => $application->PRO_UID, + 'STEP_TYPE_OBJ' => 'DYNAFORM', + 'STEP_UID_OBJ' => $dynaform->DYN_UID + ]); + StepSupervisor::factory()->create([ + 'PRO_UID' => $application->PRO_UID, + 'STEP_TYPE_OBJ' => 'INPUT_DOCUMENT', + 'STEP_UID_OBJ' => $inputDocument->INP_DOC_UID + ]); + + //assertion + $result = PmDynaform::navigationBarForStepsToRevise($application->APP_UID, $dynaform->DYN_UID, 2); + $this->assertNotEmpty($result); + } } // Dummy function used for the coverture diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php index 8067315ff..2b36a3cf6 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php @@ -8,13 +8,16 @@ use Illuminate\Support\Facades\DB; use ProcessMaker\Model\AppDelay; use ProcessMaker\Model\Application; use ProcessMaker\Model\Delegation; +use ProcessMaker\Model\Dynaform; use ProcessMaker\Model\Documents; use ProcessMaker\Model\GroupUser; use ProcessMaker\Model\Groupwf; +use ProcessMaker\Model\InputDocument; use ProcessMaker\Model\ListUnassigned; use ProcessMaker\Model\Process; use ProcessMaker\Model\ProcessUser; use ProcessMaker\Model\Step; +use ProcessMaker\Model\StepSupervisor; use ProcessMaker\Model\Task; use ProcessMaker\Model\Triggers; use ProcessMaker\Model\User; @@ -534,4 +537,59 @@ class CasesTest extends TestCase // Asserts $this->assertCount(3, $result['data']); } + + /** + * This test the method getStepsToRevise. + * @test + * @covers ProcessMaker\BusinessModel\Cases::getStepsToRevise + */ + public function it_should_test_getStepsToRevise() + { + //definition data + $dynaform = Dynaform::factory()->create(); + $application = Application::factory()->create([ + 'PRO_UID' => $dynaform->PRO_UID + ]); + $stepSupervisor = StepSupervisor::factory()->create([ + 'PRO_UID' => $application->PRO_UID, + 'STEP_TYPE_OBJ' => 'DYNAFORM', + 'STEP_UID_OBJ' => $dynaform->DYN_UID + ]); + + //assertion + $cases = new Cases(); + $result = $cases->getStepsToRevise($application->APP_UID, 'DYNAFORM'); + $this->assertEquals($stepSupervisor->PRO_UID, $result[0]['PRO_UID']); + } + + /** + * This test the method getAllUrlStepsToRevise. + * @test + * @covers ProcessMaker\BusinessModel\Cases::getAllUrlStepsToRevise + */ + public function it_should_test_getAllUrlStepsToRevise() + { + //definition data + $dynaform = Dynaform::factory()->create(); + $inputDocument = InputDocument::factory()->create(); + $application = Application::factory()->create([ + 'PRO_UID' => $dynaform->PRO_UID + ]); + $stepSupervisor = StepSupervisor::factory()->create([ + 'PRO_UID' => $application->PRO_UID, + 'STEP_TYPE_OBJ' => 'DYNAFORM', + 'STEP_UID_OBJ' => $dynaform->DYN_UID + ]); + $stepSupervisor = StepSupervisor::factory()->create([ + 'PRO_UID' => $application->PRO_UID, + 'STEP_TYPE_OBJ' => 'INPUT_DOCUMENT', + 'STEP_UID_OBJ' => $inputDocument->INP_DOC_UID + ]); + + //assertion + $cases = new Cases(); + $result = $cases->getAllUrlStepsToRevise($application->APP_UID, 2); + $this->assertEquals($dynaform->DYN_UID, $result[0]['uid']); + $this->assertEquals($inputDocument->INP_DOC_UID, $result[1]['uid']); + } } diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php index aeebed6ce..70b174382 100644 --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -1377,8 +1377,16 @@ class PmDynaform exit(); } - public function printEditSupervisor() + /** + * Print edit supervisor forms. + * @param array $param + */ + public function printEditSupervisor(array $param = []) { + $navbar = ''; + if (isset($param['DEL_INDEX'])) { + $navbar = self::navigationBarForStepsToRevise($this->fields["APP_UID"], $this->fields["CURRENT_DYNAFORM"], $param['DEL_INDEX']); + } ob_clean(); $json = G::json_decode($this->record["DYN_CONTENT"]); $this->jsonr($json); @@ -1405,6 +1413,7 @@ class PmDynaform " . $this->getTheStringVariableForGoogleMaps() . " + {$navbar}
" . $this->getSessionMessageForSupervisor() . "
@@ -2629,4 +2638,46 @@ class PmDynaform } }; } + + /** + * Get html navigation bar for steps to revise. + * @param string $appUid + * @param string $dynUid + * @param int $delIndex + * @return string + */ + public static function navigationBarForStepsToRevise(string $appUid, string $dynUid, int $delIndex): string + { + $navbar = ''; + $cases = new Cases(); + $steps = $cases->getAllUrlStepsToRevise($appUid, $delIndex); + $n = count($steps); + foreach ($steps as $key => $step) { + if ($step['uid'] === $dynUid) { + $previousLabel = ''; + $previousUrl = ''; + $nextLabel = ''; + $nextUrl = ''; + if ($key - 1 >= 0) { + $previousLabel = G::LoadTranslation('ID_PREVIOUS'); + $previousUrl = $steps[$key - 1]['url']; + } + if ($key + 1 < $n) { + $nextLabel = G::LoadTranslation('ID_NEXT'); + $nextUrl = $steps[$key + 1]['url']; + } + $navbar = "
" . + "  " . + " " . + " {$previousLabel}" . + " " . + "  " . + " " . + " {$nextLabel}" . + " " . + "
"; + } + } + return $navbar; + } } diff --git a/workflow/engine/methods/cases/cases_StepToRevise.php b/workflow/engine/methods/cases/cases_StepToRevise.php index 30d9ad870..e68448e40 100644 --- a/workflow/engine/methods/cases/cases_StepToRevise.php +++ b/workflow/engine/methods/cases/cases_StepToRevise.php @@ -1,28 +1,4 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ -// die("first"); -/* Permissions */ $filter = new InputFilter(); $_GET = $filter->xssFilterHard($_GET, "url"); @@ -151,7 +127,7 @@ if ($_GET['DYN_UID'] != '') { $FieldsPmDynaform["CURRENT_DYNAFORM"] = $_GET['DYN_UID']; $a = new PmDynaform($FieldsPmDynaform); if ($a->isResponsive()) { - $a->printEditSupervisor(); + $a->printEditSupervisor(['DEL_INDEX' => $_GET['DEL_INDEX']]); } else { $G_PUBLISH->AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_GET['DYN_UID'], '', $Fields['APP_DATA'], 'cases_SaveDataSupervisor?UID=' . $_GET['DYN_UID'] . '&ex=' . $_GET['ex']); } diff --git a/workflow/engine/methods/cases/cases_StepToReviseInputs.php b/workflow/engine/methods/cases/cases_StepToReviseInputs.php index 077240d2b..c15021e75 100644 --- a/workflow/engine/methods/cases/cases_StepToReviseInputs.php +++ b/workflow/engine/methods/cases/cases_StepToReviseInputs.php @@ -1,28 +1,4 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ -//die("second"); -/* Permissions */ $filter = new InputFilter(); $_GET = $filter->xssFilterHard($_GET, "url"); @@ -119,13 +95,8 @@ if (! isset($_GET['INP_DOC_UID'])) { $Fields['MESSAGE2'] = G::LoadTranslation('ID_PLEASE_SELECT_FILE'); $docName = $Fields['INP_DOC_TITLE']; $oHeadPublisher->addScriptCode('var documentName=\'Reviewing Input Document
' . $docName . '\';'); - // $G_PUBLISH->AddContent('xmlform', 'xmlform', $sXmlForm, '', $Fields, 'cases_SupervisorSaveDocument?UID=' . - //$_GET['INP_DOC_UID'] . '&APP_UID=' . $_GET['APP_UID'] . '&position=' . $_GET['position']); - $G_PUBLISH->AddContent('propeltable', 'cases/paged-table-inputDocumentsToRevise', 'cases/cases_ToReviseInputdocsList', $oCase->getInputDocumentsCriteria($_SESSION['APPLICATION'], $_SESSION['INDEX'], $_GET['INP_DOC_UID']), array_merge(array('DOC_UID' => $_GET['INP_DOC_UID'] - ), $Fields)); - //$aFields - // $G_PUBLISH->AddContent('propeltable', 'cases/paged-table-inputDocuments', 'cases/cases_InputdocsList', - //$oCase->getInputDocumentsCriteria($_SESSION['APPLICATION']));//$aFields + $G_PUBLISH->AddContent('view','cases/paged-table-inputDocumentsToReviseNavBar'); + $G_PUBLISH->AddContent('propeltable', 'cases/paged-table-inputDocumentsToRevise', 'cases/cases_ToReviseInputdocsList', $oCase->getInputDocumentsCriteria($_SESSION['APPLICATION'], $_SESSION['INDEX'], $_GET['INP_DOC_UID']), array_merge(['DOC_UID' => $_GET['INP_DOC_UID']], $Fields)); } G::RenderPage('publish', 'blank'); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index d1e192bf4..117f79adc 100755 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -58,6 +58,7 @@ use ProcessMaker\Model\GroupUser; use ProcessMaker\Model\ListUnassigned; use ProcessMaker\Model\Triggers; use ProcessMaker\Model\ProcessUser; +use ProcessMaker\Model\StepSupervisor; use ProcessMaker\Model\Task; use ProcessMaker\Model\User; use ProcessMaker\Plugins\PluginRegistry; @@ -4453,4 +4454,70 @@ class Cases // Return results return $dynaForms; } + + /** + * Get objects that they have send it. + * @param string $appUid + * @param string $typeObject + * @return array + */ + public function getStepsToRevise(string $appUid, string $typeObject): array + { + $application = ModelApplication::where('APP_UID', '=', $appUid) + ->first(); + $result = StepSupervisor::where('PRO_UID', '=', $application['PRO_UID'])-> + where('STEP_TYPE_OBJ', '=', $typeObject)-> + orderBy('STEP_POSITION', 'ASC')-> + get()-> + toArray(); + return $result; + } + + /** + * Get all url steps to revise. + * @param string $appUid + * @param int $delIndex + * @return array + */ + public function getAllUrlStepsToRevise(string $appUid, int $delIndex): array + { + $result = []; + $dynaformStep = $this->getStepsToRevise($appUid, 'DYNAFORM'); + $i = 0; + foreach ($dynaformStep as $step) { + $url = "cases_StepToRevise?" + . "type=DYNAFORM&" + . "ex={$i}&" + . "PRO_UID={$step["PRO_UID"]}&" + . "DYN_UID={$step['STEP_UID_OBJ']}&" + . "APP_UID={$appUid}&" + . "position={$step['STEP_POSITION']}&" + . "DEL_INDEX={$delIndex}"; + $result[] = [ + 'uid' => $step['STEP_UID_OBJ'], + 'url' => $url + ]; + $i++; + } + + $inputDocumentStep = $this->getStepsToRevise($appUid, 'INPUT_DOCUMENT'); + $i = 0; + foreach ($inputDocumentStep as $step) { + $url = "cases_StepToReviseInputs?" + . "type=INPUT_DOCUMENT&" + . "ex={$i}&" + . "PRO_UID={$step["PRO_UID"]}&" + . "INP_DOC_UID={$step['STEP_UID_OBJ']}&" + . "APP_UID={$appUid}&" + . "position={$step['STEP_POSITION']}&" + . "DEL_INDEX={$delIndex}"; + $result[] = [ + 'uid' => $step['STEP_UID_OBJ'], + 'url' => $url + ]; + $i++; + } + return $result; + } + } diff --git a/workflow/engine/src/ProcessMaker/Model/StepSupervisor.php b/workflow/engine/src/ProcessMaker/Model/StepSupervisor.php new file mode 100644 index 000000000..a40c8d172 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Model/StepSupervisor.php @@ -0,0 +1,17 @@ +' + . '
' + . '
' + . $navbar + . '
' + . '
' + . '
';