PMCORE-1218
This commit is contained in:
@@ -77,6 +77,14 @@ $factory->state(\ProcessMaker\Model\Application::class, 'draft', function (Faker
|
|||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$factory->state(\ProcessMaker\Model\Application::class, 'completed', function (Faker $faker) {
|
||||||
|
return [
|
||||||
|
'APP_NUMBER' => $faker->unique()->numberBetween(1000),
|
||||||
|
'APP_STATUS_ID' => 3,
|
||||||
|
'APP_STATUS' => 'COMPLETED'
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
$factory->state(\ProcessMaker\Model\Application::class, 'draft_minor_case', function (Faker $faker) {
|
$factory->state(\ProcessMaker\Model\Application::class, 'draft_minor_case', function (Faker $faker) {
|
||||||
$caseNumber = $faker->unique()->numberBetween(1, 1000);
|
$caseNumber = $faker->unique()->numberBetween(1, 1000);
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -42,7 +42,11 @@ $factory->define(\ProcessMaker\Model\Delegation::class, function(Faker $faker) {
|
|||||||
$factory->state(\ProcessMaker\Model\Delegation::class, 'foreign_keys', function (Faker $faker) {
|
$factory->state(\ProcessMaker\Model\Delegation::class, 'foreign_keys', function (Faker $faker) {
|
||||||
// Create values in the foreign key relations
|
// Create values in the foreign key relations
|
||||||
$user = factory(\ProcessMaker\Model\User::class)->create();
|
$user = factory(\ProcessMaker\Model\User::class)->create();
|
||||||
$process = factory(\ProcessMaker\Model\Process::class)->create();
|
$category = factory(\ProcessMaker\Model\ProcessCategory::class)->create();
|
||||||
|
$process = factory(\ProcessMaker\Model\Process::class)->create([
|
||||||
|
'PRO_CATEGORY' => $category->CATEGORY_UID,
|
||||||
|
'CATEGORY_ID' => $category->CATEGORY_ID
|
||||||
|
]);
|
||||||
$task = factory(\ProcessMaker\Model\Task::class)->create([
|
$task = factory(\ProcessMaker\Model\Task::class)->create([
|
||||||
'PRO_UID' => $process->PRO_UID,
|
'PRO_UID' => $process->PRO_UID,
|
||||||
'PRO_ID' => $process->PRO_ID
|
'PRO_ID' => $process->PRO_ID
|
||||||
@@ -113,3 +117,10 @@ $factory->state(\ProcessMaker\Model\Delegation::class, 'closed', function (Faker
|
|||||||
'DEL_FINISH_DATE' => $finishDate
|
'DEL_FINISH_DATE' => $finishDate
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Create a last delegation
|
||||||
|
$factory->state(\ProcessMaker\Model\Delegation::class, 'last_thread', function (Faker $faker) {
|
||||||
|
return [
|
||||||
|
'DEL_LAST_INDEX' => 1,
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ use ProcessMaker\Model\ProcessCategory;
|
|||||||
use ProcessMaker\Model\User;
|
use ProcessMaker\Model\User;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @coversDefaultClass \ProcessMaker\BusinessModel\Cases\AbstractCases
|
* @coversDefaultClass \ProcessMaker\BusinessModel\Cases\AbstractCases
|
||||||
*/
|
*/
|
||||||
@@ -105,7 +104,7 @@ class AbstractCasesTest extends TestCase
|
|||||||
$absCases->setInboxStatus($arguments[$index]);
|
$absCases->setInboxStatus($arguments[$index]);
|
||||||
$actual = $absCases->getInboxStatus();
|
$actual = $absCases->getInboxStatus();
|
||||||
if (empty($arguments[$index])) {
|
if (empty($arguments[$index])) {
|
||||||
$this->assertEquals($arguments[$index], 'ALL');
|
$this->assertEquals('ALL', $actual);
|
||||||
} else {
|
} else {
|
||||||
$this->assertEquals($arguments[$index], $actual);
|
$this->assertEquals($arguments[$index], $actual);
|
||||||
}
|
}
|
||||||
@@ -126,7 +125,7 @@ class AbstractCasesTest extends TestCase
|
|||||||
$absCases->setParticipatedStatus($arguments[$index]);
|
$absCases->setParticipatedStatus($arguments[$index]);
|
||||||
$actual = $absCases->getParticipatedStatus();
|
$actual = $absCases->getParticipatedStatus();
|
||||||
if (empty($arguments[$index])) {
|
if (empty($arguments[$index])) {
|
||||||
$this->assertEquals($arguments[$index], 'ALL');
|
$this->assertEquals('ALL', $actual);
|
||||||
} else {
|
} else {
|
||||||
$this->assertEquals($arguments[$index], $actual);
|
$this->assertEquals($arguments[$index], $actual);
|
||||||
}
|
}
|
||||||
@@ -147,7 +146,7 @@ class AbstractCasesTest extends TestCase
|
|||||||
$absCases->setRiskStatus($arguments[$index]);
|
$absCases->setRiskStatus($arguments[$index]);
|
||||||
$actual = $absCases->getRiskStatus();
|
$actual = $absCases->getRiskStatus();
|
||||||
if (empty($arguments[$index])) {
|
if (empty($arguments[$index])) {
|
||||||
$this->assertEquals($arguments[$index], 'ALL');
|
$this->assertEquals('ALL', $actual);
|
||||||
} else {
|
} else {
|
||||||
$this->assertEquals($arguments[$index], $actual);
|
$this->assertEquals($arguments[$index], $actual);
|
||||||
}
|
}
|
||||||
@@ -168,7 +167,7 @@ class AbstractCasesTest extends TestCase
|
|||||||
$absCases->setCaseStatus($arguments[$index]);
|
$absCases->setCaseStatus($arguments[$index]);
|
||||||
$actual = $absCases->getCaseStatus();
|
$actual = $absCases->getCaseStatus();
|
||||||
if (empty($arguments[$index])) {
|
if (empty($arguments[$index])) {
|
||||||
$this->assertEquals($arguments[$index], 'ALL');
|
$this->assertEquals('ALL', $actual);
|
||||||
} else {
|
} else {
|
||||||
$this->assertEquals($arguments[$index], $actual);
|
$this->assertEquals($arguments[$index], $actual);
|
||||||
}
|
}
|
||||||
@@ -311,6 +310,13 @@ class AbstractCasesTest extends TestCase
|
|||||||
'search' => G::generateUniqueID(),
|
'search' => G::generateUniqueID(),
|
||||||
'caseLink' => G::generateUniqueID(),
|
'caseLink' => G::generateUniqueID(),
|
||||||
'appUidCheck' => [G::generateUniqueID()],
|
'appUidCheck' => [G::generateUniqueID()],
|
||||||
|
'newestthan' => date('Y-m-d'),
|
||||||
|
'oldestthan' => date('Y-m-d'),
|
||||||
|
'sort' => 'APP_DELEGATION.APP_NUMBER',
|
||||||
|
'dir' => 'DESC',
|
||||||
|
'paged' => true,
|
||||||
|
'start' => 5,
|
||||||
|
'limit' => 10,
|
||||||
];
|
];
|
||||||
$absCases->setProperties($properties);
|
$absCases->setProperties($properties);
|
||||||
$actual = $absCases->getCategoryUid();
|
$actual = $absCases->getCategoryUid();
|
||||||
@@ -321,5 +327,23 @@ class AbstractCasesTest extends TestCase
|
|||||||
$this->assertEquals($properties['user'], $actual);
|
$this->assertEquals($properties['user'], $actual);
|
||||||
$actual = $absCases->getValueToSearch();
|
$actual = $absCases->getValueToSearch();
|
||||||
$this->assertEquals($properties['search'], $actual);
|
$this->assertEquals($properties['search'], $actual);
|
||||||
|
$actual = $absCases->getCaseUid();
|
||||||
|
$this->assertEquals($properties['caseLink'], $actual);
|
||||||
|
$actual = $absCases->getCasesUids();
|
||||||
|
$this->assertEquals($properties['appUidCheck'], $actual);
|
||||||
|
$actual = $absCases->getNewestThan();
|
||||||
|
$this->assertEquals($properties['newestthan'], $actual);
|
||||||
|
$actual = $absCases->getOldestThan();
|
||||||
|
$this->assertEquals($properties['oldestthan'], $actual);
|
||||||
|
$actual = $absCases->getOrderByColumn();
|
||||||
|
$this->assertEquals($properties['sort'], $actual);
|
||||||
|
$actual = $absCases->getOrderDirection();
|
||||||
|
$this->assertEquals($properties['dir'], $actual);
|
||||||
|
$actual = $absCases->getPaged();
|
||||||
|
$this->assertEquals($properties['paged'], $actual);
|
||||||
|
$actual = $absCases->getOffset();
|
||||||
|
$this->assertEquals($properties['start'], $actual);
|
||||||
|
$actual = $absCases->getLimit();
|
||||||
|
$this->assertEquals($properties['limit'], $actual);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -566,7 +566,7 @@ class InboxTest extends TestCase
|
|||||||
* @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCounter()
|
* @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCounter()
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
public function it_should_test_the_counter_for_list_inbox()
|
public function it_should_test_the_counter_for_inbox()
|
||||||
{
|
{
|
||||||
//Create process
|
//Create process
|
||||||
$process = factory(Process::class)->create();
|
$process = factory(Process::class)->create();
|
||||||
|
|||||||
@@ -0,0 +1,224 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
use ProcessMaker\BusinessModel\Cases\Participated;
|
||||||
|
use ProcessMaker\Model\Application;
|
||||||
|
use ProcessMaker\Model\Delegation;
|
||||||
|
use ProcessMaker\Model\Process;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class InboxTest
|
||||||
|
*
|
||||||
|
* @coversDefaultClass \ProcessMaker\BusinessModel\Cases\Participated
|
||||||
|
*/
|
||||||
|
class ParticipatedTest extends TestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create participated cases factories
|
||||||
|
*
|
||||||
|
* @param string
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function createParticipated()
|
||||||
|
{
|
||||||
|
$delegation = factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'DEL_THREAD_STATUS' => 'CLOSED',
|
||||||
|
'DEL_INDEX' => 1,
|
||||||
|
]);
|
||||||
|
$delegation2 = factory(Delegation::class)->states('last_thread')->create([
|
||||||
|
'TAS_ID' => $delegation->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_UID' => $delegation->USR_UID,
|
||||||
|
'USR_ID' => $delegation->USR_ID,
|
||||||
|
'PRO_ID' => $delegation->PRO_ID,
|
||||||
|
'DEL_INDEX' => 2,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $delegation2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It tests the getData method without filters
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_should_test_get_data_method_without_filters()
|
||||||
|
{
|
||||||
|
// Create factories related to the participated cases
|
||||||
|
$cases = $this->createParticipated();
|
||||||
|
// Create new Participated object
|
||||||
|
$participated = new Participated();
|
||||||
|
// Set the user UID
|
||||||
|
$participated->setUserUid($cases->USR_UID);
|
||||||
|
// Set the user ID
|
||||||
|
$participated->setUserId($cases->USR_ID);
|
||||||
|
// Set OrderBYColumn value
|
||||||
|
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
|
||||||
|
// Call to getData method
|
||||||
|
$res = $participated->getData();
|
||||||
|
// This assert that the expected numbers of results are returned
|
||||||
|
$this->assertEquals(1, count($res));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It tests the getData method with process
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_should_test_get_data_method_with_specific_process()
|
||||||
|
{
|
||||||
|
// Create factories related to the participated cases
|
||||||
|
$cases = $this->createParticipated();
|
||||||
|
// Create new Participated object
|
||||||
|
$participated = new Participated();
|
||||||
|
// Set the user UID
|
||||||
|
$participated->setUserUid($cases->USR_UID);
|
||||||
|
// Set the user ID
|
||||||
|
$participated->setUserId($cases->USR_ID);
|
||||||
|
// Set the process ID
|
||||||
|
$participated->setProcessId($cases->PRO_ID);
|
||||||
|
// Set OrderBYColumn value
|
||||||
|
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
|
||||||
|
// Call to getData method
|
||||||
|
$res = $participated->getData();
|
||||||
|
// This assert that the expected numbers of results are returned
|
||||||
|
$this->assertEquals(1, count($res));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It tests the getData method with process category
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_should_test_get_data_method_with_specific_process_category()
|
||||||
|
{
|
||||||
|
// Create factories related to the participated cases
|
||||||
|
$cases = $this->createParticipated();
|
||||||
|
$process = Process::query()->where('PRO_ID', $cases->PRO_ID)->get()->toArray();
|
||||||
|
$process = head($process);
|
||||||
|
// Create new Participated object
|
||||||
|
$participated = new Participated();
|
||||||
|
// Set the user UID
|
||||||
|
$participated->setUserUid($cases->USR_UID);
|
||||||
|
// Set the user ID
|
||||||
|
$participated->setUserId($cases->USR_ID);
|
||||||
|
// Set the process ID
|
||||||
|
$participated->setProcessId($cases->PRO_ID);
|
||||||
|
// Set the category
|
||||||
|
$participated->setCategoryUid($process['PRO_CATEGORY']);
|
||||||
|
// Set OrderBYColumn value
|
||||||
|
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
|
||||||
|
// Call to getData method
|
||||||
|
$res = $participated->getData();
|
||||||
|
// This assert that the expected numbers of results are returned
|
||||||
|
$this->assertEquals(1, count($res));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It tests the getData method with specific TO_DO status
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_should_test_get_data_method_with_case_to_do()
|
||||||
|
{
|
||||||
|
// Create factories related to the participated cases
|
||||||
|
$cases = $this->createParticipated();
|
||||||
|
// Create new Participated object
|
||||||
|
$participated = new Participated();
|
||||||
|
// Set the user UID
|
||||||
|
$participated->setUserUid($cases->USR_UID);
|
||||||
|
// Set the user ID
|
||||||
|
$participated->setUserId($cases->USR_ID);
|
||||||
|
// Set the case status
|
||||||
|
$participated->setCaseStatus('TO_DO');
|
||||||
|
// Set OrderBYColumn value
|
||||||
|
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
|
||||||
|
// Call to getData method
|
||||||
|
$res = $participated->getData();
|
||||||
|
// This assert that the expected numbers of results are returned
|
||||||
|
$this->assertEquals(1, count($res));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It tests the getData method with specific filter StartedByMe
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_should_test_get_data_method_started_by_me_filter()
|
||||||
|
{
|
||||||
|
// Create factories related to the participated cases
|
||||||
|
$cases = $this->createParticipated();
|
||||||
|
// Create new Participated object
|
||||||
|
$participated = new Participated();
|
||||||
|
// Set the user UID
|
||||||
|
$participated->setUserUid($cases->USR_UID);
|
||||||
|
// Set the user ID
|
||||||
|
$participated->setUserId($cases->USR_ID);
|
||||||
|
// Set the filter STARTED
|
||||||
|
$participated->setParticipatedStatus('STARTED');
|
||||||
|
// Set OrderBYColumn value
|
||||||
|
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
|
||||||
|
// Call to getData method
|
||||||
|
$res = $participated->getData();
|
||||||
|
// This assert that the expected numbers of results are returned
|
||||||
|
$this->assertEquals(0, count($res));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It tests the getData method with specific filter CompletedByMe
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getData()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_should_test_get_data_method_completed_by_me_filter()
|
||||||
|
{
|
||||||
|
// Create factories related to the participated cases
|
||||||
|
$cases = $this->createParticipated();
|
||||||
|
// Create new Participated object
|
||||||
|
$participated = new Participated();
|
||||||
|
// Set the user UID
|
||||||
|
$participated->setUserUid($cases->USR_UID);
|
||||||
|
// Set the user ID
|
||||||
|
$participated->setUserId($cases->USR_ID);
|
||||||
|
// Set the filter COMPLETED
|
||||||
|
$participated->setParticipatedStatus('COMPLETED');
|
||||||
|
// Set OrderBYColumn value
|
||||||
|
$participated->setOrderByColumn('APP_DELEGATION.APP_NUMBER');
|
||||||
|
// Call to getData method
|
||||||
|
$res = $participated->getData();
|
||||||
|
// This assert that the expected numbers of results are returned
|
||||||
|
$this->assertEquals(0, count($res));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It tests the getCounter method
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Participated::getCounter()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_should_test_the_counter_for_participated()
|
||||||
|
{
|
||||||
|
// Create factories related to the participated cases
|
||||||
|
$cases = $this->createParticipated();
|
||||||
|
// Create new Participated object
|
||||||
|
$participated = new Participated();
|
||||||
|
// Set the user UID
|
||||||
|
$participated->setUserUid($cases->USR_UID);
|
||||||
|
// Set the user ID
|
||||||
|
$participated->setUserId($cases->USR_ID);
|
||||||
|
$res = $participated->getCounter();
|
||||||
|
// Assert the result of getCounter method
|
||||||
|
$this->assertEquals(1, $res);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,79 @@
|
|||||||
|
|
||||||
namespace ProcessMaker\BusinessModel\Cases;
|
namespace ProcessMaker\BusinessModel\Cases;
|
||||||
|
|
||||||
|
use ProcessMaker\Model\Application;
|
||||||
|
use ProcessMaker\Model\Delegation;
|
||||||
|
|
||||||
class Participated extends AbstractCases
|
class Participated extends AbstractCases
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Get the data corresponding to Participated
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getData()
|
||||||
|
{
|
||||||
|
// Start the query for get the cases related to the user
|
||||||
|
$query = Delegation::query()->select();
|
||||||
|
// Scope to Participated
|
||||||
|
$query->participated($this->getUserId());
|
||||||
|
|
||||||
|
// Scope to search for an specific process
|
||||||
|
if (!empty($this->getProcessId())) {
|
||||||
|
$query->processId($this->getProcessId());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scope the specific category
|
||||||
|
$category = $this->getCategoryUid();
|
||||||
|
if (!empty($category)) {
|
||||||
|
$query->categoryProcess($category);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scope the specific case status
|
||||||
|
$status = $this->getCaseStatus();
|
||||||
|
if (array_key_exists($status, Application::$app_status_values)) {
|
||||||
|
$statusId = Application::$app_status_values[$status];
|
||||||
|
$query->appStatusId($statusId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add filter
|
||||||
|
$filter = $this->getParticipatedStatus();
|
||||||
|
if (!empty($filter)) {
|
||||||
|
switch ($filter) {
|
||||||
|
case 'STARTED':
|
||||||
|
// Scope that search for the STARTED cases by specific user
|
||||||
|
$query->caseStarted();
|
||||||
|
break;
|
||||||
|
case 'COMPLETED':
|
||||||
|
// Scope that search for the COMPLETED cases by specific user
|
||||||
|
$query->caseCompleted();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The order by clause
|
||||||
|
$query->orderBy($this->getOrderByColumn(), $this->getOrderDirection());
|
||||||
|
|
||||||
|
// The limit by clause
|
||||||
|
$query->offset($this->getOffset())->limit($this->getLimit());
|
||||||
|
|
||||||
|
//Execute the query
|
||||||
|
$result = $query->get();
|
||||||
|
|
||||||
|
//Return the values as an array format
|
||||||
|
return $result->values()->toArray();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get the number of rows corresponding to the Participate
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getCounter()
|
||||||
|
{
|
||||||
|
$query = Delegation::query()->select();
|
||||||
|
// Scope that sets the queries for Participated
|
||||||
|
$query->participated($this->getUserId());
|
||||||
|
// Return the number of rows
|
||||||
|
return $query->count();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ class Application extends Model
|
|||||||
const STATUS_TODO = 2;
|
const STATUS_TODO = 2;
|
||||||
const STATUS_COMPLETED = 3;
|
const STATUS_COMPLETED = 3;
|
||||||
const STATUS_CANCELED = 4;
|
const STATUS_CANCELED = 4;
|
||||||
|
// Status name and status id
|
||||||
|
public static $app_status_values = ['DRAFT' => 1, 'TO_DO' => 2, 'COMPLETED' => 3, 'CANCELLED' => 4];
|
||||||
|
|
||||||
public function delegations()
|
public function delegations()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user