From a17597e5d48196a82b2cbfae22ce748473471cc3 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Tue, 13 Jul 2021 11:26:05 -0400 Subject: [PATCH] PMCORE-3130 --- database/factories/ProcessFactory.php | 9 +- .../BusinessModel/Cases/DraftTest.php | 336 ++++++++++++++++++ .../BusinessModel/Cases/InboxTest.php | 274 +++++++++++++- .../BusinessModel/Cases/PausedTest.php | 120 ++++++- .../BusinessModel/Cases/UnassignedTest.php | 167 ++++++++- .../BusinessModel/Cases/AbstractCases.php | 53 ++- .../BusinessModel/Cases/Paused.php | 6 +- .../src/ProcessMaker/Model/Delegation.php | 43 +++ .../src/ProcessMaker/Services/Api/Metrics.php | 69 ++++ 9 files changed, 1057 insertions(+), 20 deletions(-) create mode 100644 workflow/engine/src/ProcessMaker/Services/Api/Metrics.php diff --git a/database/factories/ProcessFactory.php b/database/factories/ProcessFactory.php index 5f07278fe..bb9d5467f 100644 --- a/database/factories/ProcessFactory.php +++ b/database/factories/ProcessFactory.php @@ -1,10 +1,12 @@ define(\ProcessMaker\Model\Process::class, function(Faker $faker) { +$factory->define(\ProcessMaker\Model\Process::class, function (Faker $faker) { return [ 'PRO_UID' => G::generateUniqueID(), @@ -24,9 +26,10 @@ $factory->define(\ProcessMaker\Model\Process::class, function(Faker $faker) { 'PRO_DYNAFORMS' => serialize([]), 'PRO_ITEE' => 1, 'PRO_ACTION_DONE' => serialize([]), - 'PRO_CATEGORY' => function() { + 'PRO_CATEGORY' => function () { return factory(\ProcessMaker\Model\ProcessCategory::class)->create()->CATEGORY_UID; }, + 'CATEGORY_ID' => 0 ]; }); @@ -53,7 +56,7 @@ $factory->state(\ProcessMaker\Model\Process::class, 'foreign_keys', function (Fa 'PRO_DYNAFORMS' => serialize([]), 'PRO_ITEE' => 1, 'PRO_ACTION_DONE' => serialize([]), - 'PRO_CATEGORY' => function() { + 'PRO_CATEGORY' => function () { return factory(\ProcessMaker\Model\ProcessCategory::class)->create()->CATEGORY_UID; }, ]; diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/DraftTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/DraftTest.php index b8f0eb086..35bedfce8 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/DraftTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/DraftTest.php @@ -7,6 +7,7 @@ use Illuminate\Support\Facades\DB; use ProcessMaker\BusinessModel\Cases\Draft; use ProcessMaker\Model\Application; use ProcessMaker\Model\Delegation; +use ProcessMaker\Model\Process; use ProcessMaker\Model\User; use Tests\TestCase; @@ -305,4 +306,339 @@ class DraftTest extends TestCase $this->assertEquals(1, $res); } + + /** + * It tests the getCountersByProcesses() method without filters + * + * @covers \ProcessMaker\BusinessModel\Cases\Draft::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_no_filter() + { + $process = factory(Process::class)->create(); + $process2 = factory(Process::class)->create(); + $user = factory(User::class)->create(); + $application1 = factory(Application::class)->states('draft')->create([ + 'APP_INIT_USER' => $user->USR_UID, + 'APP_CUR_USER' => $user->USR_UID, + ]); + $application2 = factory(Application::class)->states('draft')->create([ + 'APP_INIT_USER' => $user->USR_UID, + 'APP_CUR_USER' => $user->USR_UID, + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application1->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application1->APP_UID, + 'APP_NUMBER' => $application1->APP_NUMBER, + 'PRO_ID' => $process->PRO_ID, + 'PRO_UID' => $process->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application2->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application2->APP_UID, + 'APP_NUMBER' => $application2->APP_NUMBER, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + $draft = new Draft(); + $draft->setUserId($user->USR_ID); + $draft->setUserUid($user->USR_ID); + $res = $draft->getCountersByProcesses(); + $this->assertCount(2, $res); + } + + /** + * It tests the getCountersByProcesses() method with the category filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Draft::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_category() + { + $process = factory(Process::class)->create([ + 'CATEGORY_ID' => 1 + ]); + $process2 = factory(Process::class)->create([ + 'CATEGORY_ID' => 2 + ]); + $user = factory(User::class)->create(); + $application = factory(Application::class, 5)->states('draft')->create([ + 'APP_INIT_USER' => $user->USR_UID, + 'APP_CUR_USER' => $user->USR_UID, + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[0]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[0]->APP_UID, + 'APP_NUMBER' => $application[0]->APP_NUMBER, + 'PRO_ID' => $process->PRO_ID, + 'PRO_UID' => $process->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[1]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[1]->APP_UID, + 'APP_NUMBER' => $application[1]->APP_NUMBER, + 'PRO_ID' => $process->PRO_ID, + 'PRO_UID' => $process->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[2]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[2]->APP_UID, + 'APP_NUMBER' => $application[2]->APP_NUMBER, + 'PRO_ID' => $process->PRO_ID, + 'PRO_UID' => $process->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[3]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[3]->APP_UID, + 'APP_NUMBER' => $application[3]->APP_NUMBER, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[4]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[4]->APP_UID, + 'APP_NUMBER' => $application[4]->APP_NUMBER, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + $draft = new Draft(); + $draft->setUserId($user->USR_ID); + $draft->setUserUid($user->USR_ID); + $res = $draft->getCountersByProcesses(2); + $this->assertCount(1, $res); + } + + /** + * It tests the getCountersByProcesses() method with the top ten filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Draft::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_top_ten() + { + $process1 = factory(Process::class)->create(); + $process2 = factory(Process::class)->create(); + $process3 = factory(Process::class)->create(); + $process4 = factory(Process::class)->create(); + $process5 = factory(Process::class)->create(); + $process6 = factory(Process::class)->create(); + $process7 = factory(Process::class)->create(); + $process8 = factory(Process::class)->create(); + $process9 = factory(Process::class)->create(); + $process10 = factory(Process::class)->create(); + $process11 = factory(Process::class)->create(); + $user = factory(User::class)->create(); + $application = factory(Application::class, 14)->states('draft')->create([ + 'APP_INIT_USER' => $user->USR_UID, + 'APP_CUR_USER' => $user->USR_UID, + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[0]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[0]->APP_UID, + 'APP_NUMBER' => $application[0]->APP_NUMBER, + 'PRO_ID' => $process1->PRO_ID, + 'PRO_UID' => $process1->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[1]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[1]->APP_UID, + 'APP_NUMBER' => $application[1]->APP_NUMBER, + 'PRO_ID' => $process1->PRO_ID, + 'PRO_UID' => $process1->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[2]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[2]->APP_UID, + 'APP_NUMBER' => $application[2]->APP_NUMBER, + 'PRO_ID' => $process1->PRO_ID, + 'PRO_UID' => $process1->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[3]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[3]->APP_UID, + 'APP_NUMBER' => $application[3]->APP_NUMBER, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[4]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[4]->APP_UID, + 'APP_NUMBER' => $application[4]->APP_NUMBER, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[5]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[5]->APP_UID, + 'APP_NUMBER' => $application[5]->APP_NUMBER, + 'PRO_ID' => $process3->PRO_ID, + 'PRO_UID' => $process3->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[6]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[6]->APP_UID, + 'APP_NUMBER' => $application[6]->APP_NUMBER, + 'PRO_ID' => $process4->PRO_ID, + 'PRO_UID' => $process4->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[7]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[7]->APP_UID, + 'APP_NUMBER' => $application[7]->APP_NUMBER, + 'PRO_ID' => $process5->PRO_ID, + 'PRO_UID' => $process5->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[8]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[8]->APP_UID, + 'APP_NUMBER' => $application[8]->APP_NUMBER, + 'PRO_ID' => $process6->PRO_ID, + 'PRO_UID' => $process6->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[9]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[9]->APP_UID, + 'APP_NUMBER' => $application[9]->APP_NUMBER, + 'PRO_ID' => $process7->PRO_ID, + 'PRO_UID' => $process7->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[10]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[10]->APP_UID, + 'APP_NUMBER' => $application[10]->APP_NUMBER, + 'PRO_ID' => $process8->PRO_ID, + 'PRO_UID' => $process8->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[11]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[11]->APP_UID, + 'APP_NUMBER' => $application[11]->APP_NUMBER, + 'PRO_ID' => $process9->PRO_ID, + 'PRO_UID' => $process9->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[12]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[12]->APP_UID, + 'APP_NUMBER' => $application[12]->APP_NUMBER, + 'PRO_ID' => $process10->PRO_ID, + 'PRO_UID' => $process10->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[13]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[13]->APP_UID, + 'APP_NUMBER' => $application[13]->APP_NUMBER, + 'PRO_ID' => $process11->PRO_ID, + 'PRO_UID' => $process11->PRO_UID + ]); + $draft = new Draft(); + $draft->setUserId($user->USR_ID); + $draft->setUserUid($user->USR_ID); + $res = $draft->getCountersByProcesses(null, true); + $this->assertCount(10, $res); + } + + /** + * It tests the getCountersByProcesses() method with the processes filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Draft::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_processes() + { + $process = factory(Process::class)->create(); + $process2 = factory(Process::class)->create(); + $user = factory(User::class)->create(); + $application = factory(Application::class, 14)->states('draft')->create([ + 'APP_INIT_USER' => $user->USR_UID, + 'APP_CUR_USER' => $user->USR_UID, + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[0]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[0]->APP_UID, + 'APP_NUMBER' => $application[0]->APP_NUMBER, + 'PRO_ID' => $process->PRO_ID, + 'PRO_UID' => $process->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 1, + 'USR_UID' => $application[1]->APP_INIT_USER, + 'USR_ID' => $user->USR_ID, + 'APP_UID' => $application[1]->APP_UID, + 'APP_NUMBER' => $application[1]->APP_NUMBER, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + $draft = new Draft(); + $draft->setUserId($user->USR_ID); + $draft->setUserUid($user->USR_ID); + $res = $draft->getCountersByProcesses(null, false, [$process->PRO_ID]); + $this->assertCount(1, $res); + } } diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InboxTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InboxTest.php index ea7088534..fa108b20b 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InboxTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InboxTest.php @@ -55,7 +55,7 @@ class InboxTest extends TestCase public function createMultipleInbox($cases) { $user = factory(\ProcessMaker\Model\User::class)->create(); - + for ($i = 0; $i < $cases; $i = $i + 1) { factory(Delegation::class)->states('foreign_keys')->create([ 'DEL_THREAD_STATUS' => 'OPEN', @@ -211,7 +211,6 @@ class InboxTest extends TestCase $inbox->setTaskId($cases->TAS_ID); $res = $inbox->getData(); $this->assertNotEmpty($res); - } /** @@ -298,4 +297,273 @@ class InboxTest extends TestCase $res = $inbox->getPagingCounters(); $this->assertEquals(1, $res); } -} \ No newline at end of file + + /** + * It tests the getCountersByProcesses() method without filters + * + * @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_no_filter() + { + $user = factory(User::class)->create(); + $process = factory(Process::class)->create(); + $process2 = factory(Process::class)->create(); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process->PRO_ID, + 'PRO_UID' => $process->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + $inbox = new Inbox(); + $inbox->setUserId($user->USR_ID); + $inbox->setUserUid($user->USR_UID); + $res = $inbox->getCountersByProcesses(); + $this->assertCount(2, $res); + } + + /** + * It tests the getCountersByProcesses() method with the category filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_category() + { + $user = factory(User::class)->create(); + $process = factory(Process::class)->create([ + 'CATEGORY_ID' => 1 + ]); + $process2 = factory(Process::class)->create([ + 'CATEGORY_ID' => 2 + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process->PRO_ID, + 'PRO_UID' => $process->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process->PRO_ID, + 'PRO_UID' => $process->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process->PRO_ID, + 'PRO_UID' => $process->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + $inbox = new Inbox(); + $inbox->setUserId($user->USR_ID); + $inbox->setUserUid($user->USR_UID); + $res = $inbox->getCountersByProcesses(2); + $this->assertCount(1, $res); + } + + /** + * It tests the getCountersByProcesses() method with the top ten filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_top_ten() + { + $user = factory(User::class)->create(); + $process1 = factory(Process::class)->create(); + $process2 = factory(Process::class)->create(); + $process3 = factory(Process::class)->create(); + $process4 = factory(Process::class)->create(); + $process5 = factory(Process::class)->create(); + $process6 = factory(Process::class)->create(); + $process7 = factory(Process::class)->create(); + $process8 = factory(Process::class)->create(); + $process9 = factory(Process::class)->create(); + $process10 = factory(Process::class)->create(); + $process11 = factory(Process::class)->create(); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process1->PRO_ID, + 'PRO_UID' => $process1->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process1->PRO_ID, + 'PRO_UID' => $process1->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process1->PRO_ID, + 'PRO_UID' => $process1->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process3->PRO_ID, + 'PRO_UID' => $process3->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process4->PRO_ID, + 'PRO_UID' => $process4->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process5->PRO_ID, + 'PRO_UID' => $process5->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process6->PRO_ID, + 'PRO_UID' => $process6->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process7->PRO_ID, + 'PRO_UID' => $process7->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process8->PRO_ID, + 'PRO_UID' => $process8->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process9->PRO_ID, + 'PRO_UID' => $process9->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process10->PRO_ID, + 'PRO_UID' => $process10->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process11->PRO_ID, + 'PRO_UID' => $process11->PRO_UID + ]); + $inbox = new Inbox(); + $inbox->setUserId($user->USR_ID); + $inbox->setUserUid($user->USR_UID); + $res = $inbox->getCountersByProcesses(null, true); + $this->assertCount(10, $res); + } + + /** + * It tests the getCountersByProcesses() method with the processes filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_processes() + { + $user = factory(User::class)->create(); + $process = factory(Process::class)->create(); + $process2 = factory(Process::class)->create(); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process->PRO_ID, + 'PRO_UID' => $process->PRO_UID + ]); + factory(Delegation::class)->states('foreign_keys')->create([ + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => 2, + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process2->PRO_ID, + 'PRO_UID' => $process2->PRO_UID + ]); + $inbox = new Inbox(); + $inbox->setUserId($user->USR_ID); + $inbox->setUserUid($user->USR_UID); + $res = $inbox->getCountersByProcesses(null, false, [$process->PRO_ID]); + $this->assertCount(1, $res); + } +} diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/PausedTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/PausedTest.php index 354eb2b3a..81888cdad 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/PausedTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/PausedTest.php @@ -136,13 +136,15 @@ class PausedTest extends TestCase * @param int * @return object */ - public function createMultiplePaused($cases) + public function createMultiplePaused($cases, $category = 1, $user = null) { - $user = factory(\ProcessMaker\Model\User::class)->create(); + if (is_null($user)) { + $user = factory(User::class)->create(); + } for ($i = 0; $i < $cases; $i = $i + 1) { $process1 = factory(Process::class)->create( - ['PRO_CATEGORY' => '1'] + ['PRO_CATEGORY' => 1, 'CATEGORY_ID' => $category] ); $task = factory(Task::class)->create([ @@ -386,4 +388,116 @@ class PausedTest extends TestCase $res = $paused->getPagingCounters(); $this->assertEquals(1, $res); } + + /** + * It tests the getCountersByProcesses() method without filters + * + * @covers \ProcessMaker\BusinessModel\Cases\Paused::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_no_filter() + { + $cases = $this->createMultiplePaused(2); + $paused = new Paused(); + $paused->setUserId($cases->USR_ID); + $paused->setUserUid($cases->USR_ID); + $res = $paused->getCountersByProcesses(); + $this->assertCount(2, $res); + } + + /** + * It tests the getCountersByProcesses() method with the category filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Paused::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_category() + { + $user = factory(User::class)->create(); + $this->createMultiplePaused(3, 2, $user); + $this->createMultiplePaused(2, 3, $user); + $paused = new Paused(); + $paused->setUserId($user->USR_ID); + $paused->setUserUid($user->USR_ID); + $res = $paused->getCountersByProcesses(2); + $this->assertCount(3, $res); + } + + /** + * It tests the getCountersByProcesses() method with the top ten filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Paused::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_top_ten() + { + $user = factory(User::class)->create(); + $this->createMultiplePaused(20, 2, $user); + $paused = new Paused(); + $paused->setUserId($user->USR_ID); + $paused->setUserUid($user->USR_UID); + $res = $paused->getCountersByProcesses(null, true); + $this->assertCount(10, $res); + } + + /** + * It tests the getCountersByProcesses() method with the processes filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Paused::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_processes_filter() + { + $user = factory(User::class)->create(); + $process1 = factory(Process::class)->create(); + + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => '', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process1->PRO_UID, + 'TAS_TYPE' => 'NORMAL' + ]); + + $application1 = factory(Application::class)->create(); + + factory(Delegation::class)->create([ + 'APP_UID' => $application1->APP_UID, + 'APP_NUMBER' => $application1->APP_NUMBER, + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'CLOSED', + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process1->PRO_ID, + 'PRO_UID' => $process1->PRO_UID, + 'DEL_PREVIOUS' => 0, + 'DEL_INDEX' => 1 + ]); + $delegation1 = factory(Delegation::class)->create([ + 'APP_UID' => $application1->APP_UID, + 'APP_NUMBER' => $application1->APP_NUMBER, + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_UID' => $user->USR_UID, + 'USR_ID' => $user->USR_ID, + 'PRO_ID' => $process1->PRO_ID, + 'PRO_UID' => $process1->PRO_UID, + 'DEL_PREVIOUS' => 1, + 'DEL_INDEX' => 2 + ]); + + factory(AppDelay::class)->create([ + 'APP_DELEGATION_USER' => $user->USR_UID, + 'PRO_UID' => $process1->PRO_UID, + 'APP_NUMBER' => $delegation1->APP_NUMBER, + 'APP_DEL_INDEX' => $delegation1->DEL_INDEX, + 'APP_DISABLE_ACTION_USER' => 0, + 'APP_TYPE' => 'PAUSE' + ]); + $this->createMultiplePaused(3, 2, $user); + $paused = new Paused(); + $paused->setUserId($user->USR_ID); + $paused->setUserUid($user->USR_UID); + $res = $paused->getCountersByProcesses(null, false, [$process1->PRO_ID]); + $this->assertCount(1, $res); + } } diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/UnassignedTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/UnassignedTest.php index 3c849e55d..d972307cd 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/UnassignedTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/UnassignedTest.php @@ -88,7 +88,6 @@ class UnassignedTest extends TestCase 'taskUser' => $taskUser, 'delegation' => $delegation ]; - } /** @@ -135,7 +134,7 @@ class UnassignedTest extends TestCase $selfValueGroup = factory(AppAssignSelfServiceValueGroup::class)->create([ 'ID' => $appSelfValueUser->ID, 'GRP_UID' => $user->USR_UID, - 'ASSIGNEE_ID' => ($userAssignee) ? $user->USR_ID: $group->GRP_ID, + 'ASSIGNEE_ID' => ($userAssignee) ? $user->USR_ID : $group->GRP_ID, 'ASSIGNEE_TYPE' => $relation ]); //Create the register in delegation relate to self-service @@ -418,4 +417,166 @@ class UnassignedTest extends TestCase $res = $unassigned->getPagingCounters(); $this->assertNotEmpty($res); } -} \ No newline at end of file + + /** + * It tests the getCountersByProcesses() method without filters + * + * @covers \ProcessMaker\BusinessModel\Cases\Unassigned::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_no_filter() + { + $cases = $this->createMultipleUnassigned(3); + $unassigned = new Unassigned(); + $unassigned->setUserId($cases->USR_ID); + $unassigned->setUserUid($cases->USR_UID); + $res = $unassigned->getCountersByProcesses(); + $this->assertCount(3, $res); + } + + /** + * It tests the getCountersByProcesses() method with the category filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Unassigned::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_category() + { + $user = factory(User::class)->create(); + $process1 = factory(Process::class)->create([ + 'CATEGORY_ID' => 2 + ]); + $process2 = factory(Process::class)->create([ + 'CATEGORY_ID' => 3 + ]); + $application = factory(Application::class)->create([ + 'APP_STATUS_ID' => 2 + ]); + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process1->PRO_UID, + 'PRO_ID' => $process1->PRO_ID, + ]); + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, + 'TU_TYPE' => 1 + ]); + factory(Delegation::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'TAS_ID' => $task->TAS_ID, + 'PRO_ID' => $process1->PRO_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + 'DEL_DELEGATE_DATE' => date('Y-m-d H:m:s', strtotime("-1 year")) + ]); + $task2 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process2->PRO_UID, + 'PRO_ID' => $process2->PRO_ID, + ]); + factory(TaskUser::class)->create([ + 'TAS_UID' => $task2->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, + 'TU_TYPE' => 1 + ]); + factory(Delegation::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'TAS_ID' => $task2->TAS_ID, + 'PRO_ID' => $process2->PRO_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + 'DEL_DELEGATE_DATE' => date('Y-m-d H:m:s', strtotime("-2 year")) + ]); + $unassigned = new Unassigned(); + $unassigned->setUserId($user->USR_ID); + $unassigned->setUserUid($user->USR_UID); + $res = $unassigned->getCountersByProcesses(2); + $this->assertCount(1, $res); + } + + /** + * It tests the getCountersByProcesses() method with the top ten filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Unassigned::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_top_ten() + { + $cases = $this->createMultipleUnassigned(20); + $unassigned = new Unassigned(); + $unassigned->setUserId($cases->USR_ID); + $unassigned->setUserUid($cases->USR_UID); + $res = $unassigned->getCountersByProcesses(null, true); + $this->assertCount(10, $res); + } + + /** + * It tests the getCountersByProcesses() method with the processes filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Unassigned::getCountersByProcesses() + * @test + */ + public function it_should_test_get_counters_by_processes_method_processes() + { + $user = factory(User::class)->create(); + $process1 = factory(Process::class)->create([ + 'CATEGORY_ID' => 2 + ]); + $process2 = factory(Process::class)->create([ + 'CATEGORY_ID' => 3 + ]); + $application = factory(Application::class)->create([ + 'APP_STATUS_ID' => 2 + ]); + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process1->PRO_UID, + 'PRO_ID' => $process1->PRO_ID, + ]); + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, + 'TU_TYPE' => 1 + ]); + factory(Delegation::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'TAS_ID' => $task->TAS_ID, + 'PRO_ID' => $process1->PRO_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + 'DEL_DELEGATE_DATE' => date('Y-m-d H:m:s', strtotime("-1 year")) + ]); + $task2 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process2->PRO_UID, + 'PRO_ID' => $process2->PRO_ID, + ]); + factory(TaskUser::class)->create([ + 'TAS_UID' => $task2->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, + 'TU_TYPE' => 1 + ]); + factory(Delegation::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'TAS_ID' => $task2->TAS_ID, + 'PRO_ID' => $process2->PRO_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + 'DEL_DELEGATE_DATE' => date('Y-m-d H:m:s', strtotime("-2 year")) + ]); + $unassigned = new Unassigned(); + $unassigned->setUserId($user->USR_ID); + $unassigned->setUserUid($user->USR_UID); + $res = $unassigned->getCountersByProcesses(null, false, [$process1->PRO_ID]); + $this->assertCount(1, $res); + } +} diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php index 52afbf0f6..e72b28a61 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php @@ -642,10 +642,10 @@ class AbstractCases implements CasesInterface $specificCases = []; $rangeCases = []; foreach ($rangeOfCases as $cases) { - if(is_numeric($cases)) { - array_push($specificCases,$cases); + if (is_numeric($cases)) { + array_push($specificCases, $cases); } else { - array_push($rangeCases,$cases); + array_push($rangeCases, $cases); } } $this->setCasesNumbers($specificCases); @@ -1161,7 +1161,7 @@ class AbstractCases implements CasesInterface // Review if require other information if ($onlyTask) { // Thread tasks - if($key === 'user_id') { + if ($key === 'user_id') { $threadTasks[$i][$key] = $row; // Get the user tooltip information $threadTasks[$i]['user_tooltip'] = User::getInformation($row); @@ -1184,7 +1184,7 @@ class AbstractCases implements CasesInterface } } } - $i ++; + $i++; } // Define the array responses $result['THREAD_TASKS'] = $threadTasks; @@ -1431,4 +1431,47 @@ class AbstractCases implements CasesInterface { throw new Exception("Method '" . __FUNCTION__ . "' should be implemented in the extended class '" . get_class($this) . "'."); } + + /** + * Count how many cases has each process + * + * @param string $list + * @param int $category + * @param bool $topTen + * @param array $processes + * + * @return array + */ + public function getCountersByProcesses($category = null, $topTen = false, $processes = []) + { + $query = Delegation::selectRaw('count(APP_DELEGATION.DELEGATION_ID) as TOTAL, APP_DELEGATION.PRO_ID, PROCESS.PRO_TITLE') + ->groupBy('APP_DELEGATION.PRO_UID'); + $listArray = explode("\\", get_class($this)); + $list = end($listArray); + switch ($list) { + case 'Inbox': + $query->inbox($this->getUserId()); + break; + case 'Draft': + $query->draft($this->getUserId()); + break; + case 'Paused': + $query->paused($this->getUserId()); + break; + case 'Unassigned': + $query->selfService($this->getUserUid()); + break; + } + $query->joinProcess(); + if (!is_null($category)) { + $query->categoryId($category); + } + if ($topTen) { + $query->topTen('TOTAL', 'DESC'); + } + if (!empty($processes)) { + $query->inProcesses($processes); + } + return $query->get()->values()->toArray(); + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Paused.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Paused.php index e12525fc8..9cdbb0d85 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Paused.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/Paused.php @@ -94,7 +94,7 @@ class Paused extends AbstractCases /** * Gets the data for the paused cases list - * + * * @return array */ public function getData() @@ -126,7 +126,7 @@ class Paused extends AbstractCases // Get task status $item['TAS_STATUS'] = self::TASK_STATUS[$item['TAS_COLOR']]; // Get delay - $item['DELAY'] = getDiffBetweenDates($item['DEL_TASK_DUE_DATE'], date("Y-m-d H:i:s")); + $item['DELAY'] = getDiffBetweenDates($item['DEL_TASK_DUE_DATE'], date("Y-m-d H:i:s")); // Apply the date format defined in environment $item['DEL_TASK_DUE_DATE_LABEL'] = applyMaskDateEnvironment($item['DEL_TASK_DUE_DATE']); $item['DEL_DELEGATE_DATE_LABEL'] = applyMaskDateEnvironment($item['DEL_DELEGATE_DATE']); @@ -146,7 +146,7 @@ class Paused extends AbstractCases /** * Count how many cases the user has in PAUSED, does not apply filters - * + * * @return int */ public function getCounter() diff --git a/workflow/engine/src/ProcessMaker/Model/Delegation.php b/workflow/engine/src/ProcessMaker/Model/Delegation.php index 16cf27c25..eca30abea 100644 --- a/workflow/engine/src/ProcessMaker/Model/Delegation.php +++ b/workflow/engine/src/ProcessMaker/Model/Delegation.php @@ -1015,6 +1015,49 @@ class Delegation extends Model return $query; } + /** + * Scope process category id + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param int $category + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeCategoryId($query, $category) + { + $query->where('PROCESS.CATEGORY_ID', $category); + return $query; + } + + /** + * Scope top ten + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param string $column + * @param string $order + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeTopTen($query, $column, $order) + { + $query->orderBy($column, $order)->limit(10); + return $query; + } + + /** + * Scope where in processes + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param array $processes + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeInProcesses($query, $processes) + { + $query->whereIn('PROCESS.PRO_ID', $processes); + return $query; + } + /** * Get specific cases unassigned that the user can view * diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php b/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php new file mode 100644 index 000000000..aeb39f083 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php @@ -0,0 +1,69 @@ +sSystem = 'PROCESSMAKER'; + $RBAC->initRBAC(); + $RBAC->loadUserRolePermission($RBAC->sSystem, $this->getUserId()); + } + } + + /** + * Get total cases per process + * + * @url /process-total-cases + * + * @param string $caseList + * @param int $category + * @param bool $topTen + * @param array $processes + * + * @return array + * + * @throws RestException + * + * @class AccessControl {@permission TASK_METRICS_VIEW} + */ + public function getProcessTotalCases($caseList, $category = null, $topTen = false, $processes = []) + { + try { + switch ($caseList) { + case 'inbox': + $list = new Inbox(); + break; + case 'draft': + $list = new Draft(); + break; + case 'paused': + $list = new Paused(); + break; + case 'unassigned': + $list = new Unassigned(); + break; + } + $result = $list->getCountersByProcesses($category, $topTen, $processes); + return $result; + } catch (Exception $e) { + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + } +}