PMCORE-940

This commit is contained in:
Julio Cesar Laura Avendaño
2020-08-18 15:08:58 +00:00
parent 96c3a4545c
commit 5f21c1b407
3 changed files with 122 additions and 58 deletions

View File

@@ -7,6 +7,9 @@ use ProcessMaker\Model\Application;
use ProcessMaker\Model\Delegation; use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Process; use ProcessMaker\Model\Process;
use ProcessMaker\Model\Step; use ProcessMaker\Model\Step;
use ProcessMaker\Model\Task;
use ProcessMaker\Model\TaskUser;
use ProcessMaker\Model\User;
use Tests\TestCase; use Tests\TestCase;
class CasesTest extends TestCase class CasesTest extends TestCase
@@ -360,6 +363,49 @@ class CasesTest extends TestCase
$this->assertCount(4, $res); $this->assertCount(4, $res);
} }
/**
* Test the getStartCases method
*
* @covers \Cases::getStartCases()
* @test
*/
public function it_should_test_get_start_cases()
{
// Creating a process with initial tasks
$process = factory(Process::class)->create();
$user = factory(User::class)->create();
$normalTask = factory(Task::class)->create([
'PRO_UID' => $process->PRO_UID,
'PRO_ID' => $process->PRO_ID,
'TAS_START' => 'TRUE'
]);
$webEntryTask = factory(Task::class)->create([
'PRO_UID' => $process->PRO_UID,
'PRO_ID' => $process->PRO_ID,
'TAS_START' => 'TRUE',
'TAS_TYPE' => 'WEBENTRYEVENT'
]);
factory(TaskUser::class)->create([
'TAS_UID' => $normalTask->TAS_UID,
'USR_UID' => $user->USR_UID
]);
factory(TaskUser::class)->create([
'TAS_UID' => $webEntryTask->TAS_UID,
'USR_UID' => $user->USR_UID
]);
// Instance class Cases
$cases = new Cases();
// Get all initial tasks
$startingTasks = $cases->getStartCases($user->USR_UID);
$this->assertCount(3, $startingTasks);
// Get initial tasks without dummy tasks
$startingTasks = $cases->getStartCases($user->USR_UID, true);
$this->assertCount(2, $startingTasks);
}
/** /**
* Call the tearDown method * Call the tearDown method
*/ */

View File

@@ -1,5 +1,6 @@
<?php <?php
use ProcessMaker\BusinessModel\Task as BusinessModelTask;
use ProcessMaker\BusinessModel\User as BusinessModelUser; use ProcessMaker\BusinessModel\User as BusinessModelUser;
use ProcessMaker\BusinessModel\WebEntryEvent; use ProcessMaker\BusinessModel\WebEntryEvent;
use ProcessMaker\Cases\CasesTrait; use ProcessMaker\Cases\CasesTrait;
@@ -109,14 +110,16 @@ class Cases
} }
/** /**
* get user starting tasks * Get user's starting tasks
* @param string $sUIDUser *
* @return $rows * @param string $uidUser
* @param bool $withoutDummyTasks
* @return array
*/ */
public function getStartCases($sUIDUser = '') public function getStartCases($uidUser = '', $withoutDummyTasks = false)
{ {
$rows[] = array('uid' => 'char', 'value' => 'char'); $rows = [['uid' => 'char', 'value' => 'char']];
$tasks = array(); $tasks = [];
$c = new Criteria(); $c = new Criteria();
$c->clearSelectColumns(); $c->clearSelectColumns();
@@ -126,7 +129,7 @@ class Cases
$c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
$c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE');
$c->add(TaskPeer::TAS_START, 'TRUE'); $c->add(TaskPeer::TAS_START, 'TRUE');
$c->add(TaskUserPeer::USR_UID, $sUIDUser); $c->add(TaskUserPeer::USR_UID, $uidUser);
$c->add(TaskUserPeer::TU_TYPE, 1); $c->add(TaskUserPeer::TU_TYPE, 1);
$rs = TaskPeer::doSelectRS($c); $rs = TaskPeer::doSelectRS($c);
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
@@ -141,7 +144,7 @@ class Cases
//check groups //check groups
$group = new Groups(); $group = new Groups();
$aGroups = $group->getActiveGroupsForAnUser($sUIDUser); $groups = $group->getActiveGroupsForAnUser($uidUser);
$c = new Criteria(); $c = new Criteria();
$c->clearSelectColumns(); $c->clearSelectColumns();
@@ -151,7 +154,7 @@ class Cases
$c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
$c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE');
$c->add(TaskPeer::TAS_START, 'TRUE'); $c->add(TaskPeer::TAS_START, 'TRUE');
$c->add(TaskUserPeer::USR_UID, $aGroups, Criteria::IN); $c->add(TaskUserPeer::USR_UID, $groups, Criteria::IN);
$c->add(TaskUserPeer::TU_TYPE, 1); $c->add(TaskUserPeer::TU_TYPE, 1);
$rs = TaskPeer::doSelectRS($c); $rs = TaskPeer::doSelectRS($c);
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
@@ -171,17 +174,21 @@ class Cases
$c->addSelectColumn(ProcessPeer::PRO_TITLE); $c->addSelectColumn(ProcessPeer::PRO_TITLE);
$c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN); $c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
$c->add(TaskPeer::TAS_UID, $tasks, Criteria::IN); $c->add(TaskPeer::TAS_UID, $tasks, Criteria::IN);
// Include or not the dummy tasks
if ($withoutDummyTasks) {
$c->add(TaskPeer::TAS_TYPE, BusinessModelTask::getDummyTypes(), Criteria::NOT_IN);
}
$c->addAscendingOrderByColumn(ProcessPeer::PRO_TITLE); $c->addAscendingOrderByColumn(ProcessPeer::PRO_TITLE);
$c->addAscendingOrderByColumn(TaskPeer::TAS_TITLE); $c->addAscendingOrderByColumn(TaskPeer::TAS_TITLE);
$rs = TaskPeer::doSelectRS($c); $rs = TaskPeer::doSelectRS($c);
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rs->next(); $rs->next();
while ($row = $rs->getRow()) { while ($row = $rs->getRow()) {
$rows[] = array( $rows[] = [
'uid' => $row['TAS_UID'], 'uid' => $row['TAS_UID'],
'value' => $row['PRO_TITLE'] . ' (' . $row['TAS_TITLE'] . ')', 'value' => $row['PRO_TITLE'] . ' (' . $row['TAS_TITLE'] . ')',
'pro_uid' => $row['PRO_UID'] 'pro_uid' => $row['PRO_UID']
); ];
$rs->next(); $rs->next();
$row = $rs->getRow(); $row = $rs->getRow();
} }

View File

@@ -2,8 +2,15 @@
namespace ProcessMaker\BusinessModel; namespace ProcessMaker\BusinessModel;
use \G; use Cases;
use Criteria;
use Exception;
use G;
use GroupUserPeer;
use ProcessMaker\Core\System; use ProcessMaker\Core\System;
use ResultSet;
use TaskPeer;
use TaskUserPeer;
class ProjectUser class ProjectUser
{ {
@@ -90,71 +97,75 @@ class ProjectUser
} }
/** /**
* Return starting task * Return starting tasks
* *
* @param string $sProcessUID {@min 32} {@max 32} * @param string $processUid
* *
* return array * @return array
*
* @throws Exception
* *
* @access public * @access public
*/ */
public function getProjectStartingTasks($sProcessUID) public function getProjectStartingTasks($processUid)
{ {
try { try {
Validator::proUid($sProcessUID, '$prj_uid'); Validator::proUid($processUid, '$prj_uid');
$aUsers = array(); $users = [];
$usersIds = array(); $usersIds = [];
$oCriteria = new \Criteria('workflow'); $criteria = new Criteria('workflow');
$oCriteria->addSelectColumn(\TaskUserPeer::USR_UID); $criteria->addSelectColumn(TaskUserPeer::USR_UID);
$oCriteria->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN); $criteria->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
$oCriteria->add(\TaskPeer::PRO_UID, $sProcessUID); $criteria->add(TaskPeer::PRO_UID, $processUid);
$oCriteria->add(\TaskUserPeer::TU_TYPE, 1); $criteria->add(TaskUserPeer::TU_TYPE, 1);
$oCriteria->add(\TaskUserPeer::TU_RELATION, 1); $criteria->add(TaskUserPeer::TU_RELATION, 1);
$oDataset = \TaskUserPeer::doSelectRS($oCriteria); $dataSet = TaskUserPeer::doSelectRS($criteria);
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
while ($oDataset->next()) { while ($dataSet->next()) {
$aRow = $oDataset->getRow(); $row = $dataSet->getRow();
if (!in_array($aRow['USR_UID'], $usersIds)) { if (!in_array($row['USR_UID'], $usersIds)) {
$usersIds[] = $aRow['USR_UID']; $usersIds[] = $row['USR_UID'];
} }
} }
$oCriteria = new \Criteria('workflow'); $criteria = new Criteria('workflow');
$oCriteria->addSelectColumn(\GroupUserPeer::USR_UID); $criteria->addSelectColumn(GroupUserPeer::USR_UID);
$oCriteria->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN); $criteria->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
$oCriteria->addJoin(\TaskUserPeer::USR_UID, \GroupUserPeer::GRP_UID, \Criteria::LEFT_JOIN); $criteria->addJoin(TaskUserPeer::USR_UID, GroupUserPeer::GRP_UID, Criteria::LEFT_JOIN);
$oCriteria->add(\TaskPeer::PRO_UID, $sProcessUID); $criteria->add(TaskPeer::PRO_UID, $processUid);
$oCriteria->add(\TaskUserPeer::TU_TYPE, 1); $criteria->add(TaskUserPeer::TU_TYPE, 1);
$oCriteria->add(\TaskUserPeer::TU_RELATION, 2); $criteria->add(TaskUserPeer::TU_RELATION, 2);
$oDataset = \TaskUserPeer::doSelectRS($oCriteria); $dataSet = TaskUserPeer::doSelectRS($criteria);
$oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC);
while ($oDataset->next()) { while ($dataSet->next()) {
$aRow = $oDataset->getRow(); $row = $dataSet->getRow();
if (!in_array($aRow['USR_UID'], $usersIds)) { if (!in_array($row['USR_UID'], $usersIds)) {
$usersIds[] = $aRow['USR_UID']; $usersIds[] = $row['USR_UID'];
} }
} }
foreach($usersIds as $value) { foreach($usersIds as $value) {
$oCase = new \Cases(); $cases = new Cases();
$startTasks = $oCase->getStartCases( $value ); $startTasks = $cases->getStartCases($value, true);
foreach ($startTasks as $task) { foreach ($startTasks as $task) {
if ((isset( $task['pro_uid'] )) && ($task['pro_uid'] == $sProcessUID) ) { if ((isset($task['pro_uid'])) && ($task['pro_uid'] == $processUid)) {
$taskValue = explode( '(', $task['value'] ); $taskValue = explode('(', $task['value']);
$tasksLastIndex = count( $taskValue ) - 1; $tasksLastIndex = count($taskValue) - 1;
$taskValue = explode( ')', $taskValue[$tasksLastIndex] ); $taskValue = explode(')', $taskValue[$tasksLastIndex]);
$aUsers[] = array('act_name' => $taskValue[0], $users[] = [
'act_uid' => $task['uid']); 'act_name' => $taskValue[0],
'act_uid' => $task['uid']
];
} }
} }
} }
$new = array(); $new = [];
$exclude = array(""); $exclude = [""];
for ($i = 0; $i<=count($aUsers)-1; $i++) { for ($i = 0; $i <= count($users) - 1; $i++) {
if (!in_array(trim($aUsers[$i]["act_uid"]) ,$exclude)) { if (!in_array(trim($users[$i]["act_uid"]) ,$exclude)) {
$new[] = $aUsers[$i]; $new[] = $users[$i];
$exclude[] = trim($aUsers[$i]["act_uid"]); $exclude[] = trim($users[$i]["act_uid"]);
} }
} }
return $new; return $new;