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 8b60300ab..6c7931c4c 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/DraftTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/DraftTest.php @@ -2,6 +2,8 @@ namespace Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases; +use DateInterval; +use Datetime; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\DB; use ProcessMaker\BusinessModel\Cases\Draft; @@ -766,4 +768,116 @@ class DraftTest extends TestCase $this->assertEquals($additionalTables->ADD_TAB_NAME, $res['tableName']); $this->assertEquals(3, $res['total']); } + + /** + * This tests the getCasesRisk() method with on time filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Draft::getCasesRisk() + * @test + */ + public function it_tests_get_cases_risk_on_time() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff1Day = new DateInterval('P1D'); + $diff2Days = new DateInterval('P2D'); + $process = 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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $date->add($diff1Day), + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); + $draft = new Draft(); + $draft->setUserId($user->USR_ID); + $draft->setUserUid($user->USR_ID); + $res = $draft->getCasesRisk($process->PRO_ID); + $this->assertCount(1, $res); + } + + /** + * This tests the getCasesRisk() method with at risk filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Draft::getCasesRisk() + * @test + */ + public function it_tests_get_cases_risk_at_risk() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff2Days = new DateInterval('P2D'); + $process = 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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); + $draft = new Draft(); + $draft->setUserId($user->USR_ID); + $draft->setUserUid($user->USR_ID); + $res = $draft->getCasesRisk($process->PRO_ID, null, null, 'AT_RISK'); + $this->assertCount(1, $res); + } + + /** + * This tests the getCasesRisk() method with overdue filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Draft::getCasesRisk() + * @test + */ + public function it_tests_get_cases_risk_overdue() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff2Days = new DateInterval('P2D'); + $process = 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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->sub($diff2Days) + ]); + $draft = new Draft(); + $draft->setUserId($user->USR_ID); + $draft->setUserUid($user->USR_ID); + $res = $draft->getCasesRisk($process->PRO_ID, null, null, 'OVERDUE'); + $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 84fe7cd68..6cf613c60 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InboxTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InboxTest.php @@ -2,6 +2,8 @@ namespace Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases; +use DateInterval; +use Datetime; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\DB; use ProcessMaker\BusinessModel\Cases\Inbox; @@ -659,4 +661,98 @@ class InboxTest extends TestCase $this->assertEquals($additionalTables->ADD_TAB_NAME, $res['tableName']); $this->assertEquals(3, $res['total']); } + + /** + * This tests the getCasesRisk() method with on time filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCasesRisk() + * @test + */ + public function it_tests_get_cases_risk_on_time() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff1Day = new DateInterval('P1D'); + $diff2Days = new DateInterval('P2D'); + $user = factory(User::class)->create(); + $process = 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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $date->add($diff1Day), + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); + $inbox = new Inbox(); + $inbox->setUserId($user->USR_ID); + $inbox->setUserUid($user->USR_UID); + $res = $inbox->getCasesRisk($process->PRO_ID); + $this->assertCount(1, $res); + } + + /** + * This tests the getCasesRisk() method with at risk filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCasesRisk() + * @test + */ + public function it_tests_get_cases_risk_at_risk() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff2Days = new DateInterval('P2D'); + $user = factory(User::class)->create(); + $process = 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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); + $inbox = new Inbox(); + $inbox->setUserId($user->USR_ID); + $inbox->setUserUid($user->USR_UID); + $res = $inbox->getCasesRisk($process->PRO_ID, null, null, "AT_RISK"); + $this->assertCount(1, $res); + } + + /** + * This tests the getCasesRisk() method with overdue filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCasesRisk() + * @test + */ + public function it_tests_get_cases_risk_overdue() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff2Days = new DateInterval('P2D'); + $user = factory(User::class)->create(); + $process = 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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->sub($diff2Days) + ]); + $inbox = new Inbox(); + $inbox->setUserId($user->USR_ID); + $inbox->setUserUid($user->USR_UID); + $res = $inbox->getCasesRisk($process->PRO_ID, null, null, "OVERDUE"); + $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 65f05310c..80456429e 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/PausedTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/PausedTest.php @@ -2,6 +2,8 @@ namespace Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases; +use DateInterval; +use Datetime; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\DB; use ProcessMaker\BusinessModel\Cases\Paused; @@ -653,4 +655,215 @@ class PausedTest extends TestCase $this->assertEquals($additionalTables->ADD_TAB_NAME, $res['tableName']); $this->assertEquals(3, $res['total']); } + + /** + * It tests the getCasesRisk() method with the ontime filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Paused::getCasesRisk() + * @test + */ + public function it_should_test_get_cases_risk_on_time() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff1Day = new DateInterval('P1D'); + $diff2Days = new DateInterval('P2D'); + $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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $date->add($diff1Day), + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); + $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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $date->add($diff1Day), + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); + + 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->getCasesRisk($process1->PRO_ID); + $this->assertCount(1, $res); + } + + /** + * It tests the getCasesRisk() method with the at risk filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Paused::getCasesRisk() + * @test + */ + public function it_should_test_get_cases_risk_at_risk() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff2Days = new DateInterval('P2D'); + $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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); + $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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); + + 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->getCasesRisk($process1->PRO_ID, null, null, 'AT_RISK'); + $this->assertCount(1, $res); + } + + /** + * It tests the getCasesRisk() method with the overdue filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Paused::getCasesRisk() + * @test + */ + public function it_should_test_get_cases_risk_overdue() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff2Days = new DateInterval('P2D'); + $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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->sub($diff2Days) + ]); + $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, + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->sub($diff2Days) + ]); + + 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->getCasesRisk($process1->PRO_ID, null, null, 'OVERDUE'); + $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 5f940b329..c0475f04e 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/UnassignedTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/Cases/UnassignedTest.php @@ -2,6 +2,8 @@ namespace Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases; +use DateInterval; +use Datetime; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\DB; use ProcessMaker\BusinessModel\Cases\Unassigned; @@ -723,4 +725,149 @@ class UnassignedTest extends TestCase $this->assertEquals($additionalTables->ADD_TAB_NAME, $res['tableName']); $this->assertEquals(0, $res['total']); } + + /** + * It tests the getCasesRisk() method with ontime filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Unassigned::getCasesRisk() + * @test + */ + public function it_should_test_get_cases_risk_on_time() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff1Day = new DateInterval('P1D'); + $diff2Days = new DateInterval('P2D'); + $user = factory(User::class)->create(); + $process1 = factory(Process::class)->create([ + 'CATEGORY_ID' => 2 + ]); + $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' => $currentDate, + 'DEL_RISK_DATE' => $date->add($diff1Day), + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); + $unassigned = new Unassigned(); + $unassigned->setUserId($user->USR_ID); + $unassigned->setUserUid($user->USR_UID); + + $res = $unassigned->getCasesRisk($process1->PRO_ID); + $this->assertCount(1, $res); + } + + /** + * It tests the getCasesRisk() method with at risk filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Unassigned::getCasesRisk() + * @test + */ + public function it_should_test_get_cases_risk_at_risk() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff2Days = new DateInterval('P2D'); + $user = factory(User::class)->create(); + $process1 = factory(Process::class)->create([ + 'CATEGORY_ID' => 2 + ]); + $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' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); + $unassigned = new Unassigned(); + $unassigned->setUserId($user->USR_ID); + $unassigned->setUserUid($user->USR_UID); + + $res = $unassigned->getCasesRisk($process1->PRO_ID, null, null, 'AT_RISK'); + $this->assertCount(1, $res); + } + + /** + * It tests the getCasesRisk() method with overdue filter + * + * @covers \ProcessMaker\BusinessModel\Cases\Unassigned::getCasesRisk() + * @test + */ + public function it_should_test_get_cases_risk_overdue() + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff2Days = new DateInterval('P2D'); + $user = factory(User::class)->create(); + $process1 = factory(Process::class)->create([ + 'CATEGORY_ID' => 2 + ]); + $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' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->sub($diff2Days) + ]); + $unassigned = new Unassigned(); + $unassigned->setUserId($user->USR_ID); + $unassigned->setUserUid($user->USR_UID); + + $res = $unassigned->getCasesRisk($process1->PRO_ID, null, null, 'OVERDUE'); + $this->assertCount(1, $res); + } } diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php index ae8b1edca..9f254318e 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php @@ -2,6 +2,8 @@ namespace Tests\unit\workflow\src\ProcessMaker\Model; +use DateInterval; +use Datetime; use G; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\DB; @@ -446,7 +448,16 @@ class DelegationTest extends TestCase */ public function it_return_scope_at_risk() { - $table = factory(Delegation::class)->states('closed')->create(); + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff2Days = new DateInterval('P2D'); + + $table = factory(Delegation::class)->create([ + 'DEL_THREAD_STATUS' => 'CLOSED', + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->add($diff2Days) + ]); $this->assertCount(1, $table->atRisk($table->DEL_DELEGATE_DATE)->get()); } @@ -458,7 +469,16 @@ class DelegationTest extends TestCase */ public function it_return_scope_overdue() { - $table = factory(Delegation::class)->states('closed')->create(); + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $diff2Days = new DateInterval('P2D'); + + $table = factory(Delegation::class)->create([ + 'DEL_THREAD_STATUS' => 'CLOSED', + 'DEL_DELEGATE_DATE' => $currentDate, + 'DEL_RISK_DATE' => $currentDate, + 'DEL_TASK_DUE_DATE' => $date->sub($diff2Days) + ]); $this->assertCount(1, $table->overdue($table->DEL_DELEGATE_DATE)->get()); } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php index cc9d47f4d..69de97702 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/AbstractCases.php @@ -1583,4 +1583,78 @@ class AbstractCases implements CasesInterface } return $query->get()->values()->toArray(); } + + /** + * Get cases risk by process + * + * @param int $processId + * @param string $dateFrom + * @param string $dateTo + * @param string $riskStatus + * @param int $topCases + * + * @return array + */ + public function getCasesRisk($processId, $dateFrom = null, $dateTo = null, $riskStatus = 'ON_TIME', $topCases = null) + { + $date = new DateTime('now'); + $currentDate = $date->format('Y-m-d H:i:s'); + $query = Delegation::selectRaw(' + APP_DELEGATION.APP_NUMBER as number_case, + APP_DELEGATION.DEL_DELEGATE_DATE as delegated, + APP_DELEGATION.DEL_RISK_DATE as at_risk, + APP_DELEGATION.DEL_TASK_DUE_DATE as due_date, + APP_DELEGATION.APP_UID as app_uid, + APP_DELEGATION.DEL_INDEX as del_index, + APP_DELEGATION.TAS_UID as tas_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(); + $query->processInList([$processId]); + + if (!is_null($dateFrom)) { + $query->where('APP_DELEGATION.DEL_DELEGATE_DATE', '>=', $dateFrom); + } + if (!is_null($dateTo)) { + $query->where('APP_DELEGATION.DEL_DELEGATE_DATE', '<=', $dateTo); + } + if (!is_null($topCases)) { + $query->orderBy('APP_DELEGATION.DEL_DELEGATE_DATE', 'ASC')->limit($topCases); + } + $value = 'due_date'; + switch ($riskStatus) { + case 'ON_TIME': + $query->onTime($currentDate); + $value = 'at_risk'; + break; + case 'AT_RISK': + $query->atRisk($currentDate); + break; + case 'OVERDUE': + $query->overdue($currentDate); + break; + } + $res = $query->get()->values()->toArray(); + foreach ($res as $key => $values) { + $riskDate = new DateTime($values[$value]); + $days = ['days' => $date->diff($riskDate)->days]; + $res[$key] = $days + $res[$key]; + } + return $res; + } } diff --git a/workflow/engine/src/ProcessMaker/Model/Delegation.php b/workflow/engine/src/ProcessMaker/Model/Delegation.php index 95a65027b..d0b44bf10 100644 --- a/workflow/engine/src/ProcessMaker/Model/Delegation.php +++ b/workflow/engine/src/ProcessMaker/Model/Delegation.php @@ -388,7 +388,7 @@ class Delegation extends Model */ public function scopeAtRisk($query, $now) { - return $query->where('DEL_RISK_DATE', '>=', $now)->where('DEL_TASK_DUE_DATE', '>=', $now); + return $query->where('DEL_RISK_DATE', '<=', $now)->where('DEL_TASK_DUE_DATE', '>=', $now); } /** @@ -401,7 +401,7 @@ class Delegation extends Model */ public function scopeOverdue($query, $now) { - return $query->where('DEL_TASK_DUE_DATE', '>', $now); + return $query->where('DEL_TASK_DUE_DATE', '<', $now); } /** diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php b/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php index 8128507d2..ee1acf8e5 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Metrics.php @@ -157,4 +157,46 @@ class Metrics extends Api throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } + + /** + * Get total cases risk + * + * @url GET /cases-risk + * + * @param string $caseList + * @param int $process + * @param string $dateFrom + * @param string $dateTo + * @param string $riskStatus + * @param int $topCases + * + * @return array + * + * @throws RestException + */ + public function getCasesRiskByProcess($caseList = 'inbox', $process, $dateFrom = null, $dateTo = null, $riskStatus = 'ON_TIME', $topCases = null) + { + try { + $usrId = $this->getUserId(); + 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; + } + $list->setUserId($usrId); + $result = $list->getCasesRisk($process, $dateFrom, $dateTo, $riskStatus, $topCases); + return $result; + } catch (Exception $e) { + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + } }