Files
luos/workflow/engine/classes/model/ListUnassigned.php

613 lines
23 KiB
PHP
Raw Normal View History

2014-11-07 17:19:35 -04:00
<?php
require_once 'classes/model/om/BaseListUnassigned.php';
2020-10-13 23:20:30 +00:00
use ProcessMaker\Model\Delegation;
2014-11-07 17:19:35 -04:00
/**
* Skeleton subclass for representing a row from the 'LIST_UNASSIGNED' table.
*
*
2014-11-07 17:19:35 -04:00
*
* You should add additional methods to this class to meet the
* application requirements. This class will only be generated as
* long as it does not already exist in the output directory.
*
* @package classes.model
2020-12-17 10:22:51 -04:00
* @deprecated Class deprecated in Release 3.6.0
2014-11-07 17:19:35 -04:00
*/
// @codingStandardsIgnoreStart
class ListUnassigned extends BaseListUnassigned implements ListInterface
2014-11-07 17:19:35 -04:00
{
use ListBaseTrait;
private $total = 0;
2017-04-21 12:04:57 -04:00
2014-11-07 17:19:35 -04:00
/**
* Create List Unassigned Table
2014-11-07 17:19:35 -04:00
*
* @param type $data
* @return type
*
*/
public function create($data)
{
if (!empty($data['PRO_UID']) && empty($data['PRO_ID'])) {
$p = new Process();
2017-02-20 11:15:23 -04:00
$data['PRO_ID'] = $p->load($data['PRO_UID'])['PRO_ID'];
}
2017-02-20 13:08:08 -04:00
if (!empty($data['TAS_UID'])) {
$t = new Task();
2017-02-20 13:08:08 -04:00
$data['TAS_ID'] = $t->load($data['TAS_UID'])['TAS_ID'];
}
$con = Propel::getConnection(ListUnassignedPeer::DATABASE_NAME);
2014-11-07 17:19:35 -04:00
try {
$this->fromArray($data, BasePeer::TYPE_FIELDNAME);
2014-11-07 17:19:35 -04:00
if ($this->validate()) {
$result = $this->save();
} else {
$e = new Exception("Failed Validation in class " . get_class($this) . ".");
2014-11-07 17:19:35 -04:00
$e->aValidationFailures = $this->getValidationFailures();
throw ($e);
}
$con->commit();
return $result;
} catch (Exception $e) {
2014-11-07 17:19:35 -04:00
$con->rollback();
throw ($e);
}
}
/**
* Update List Unassigned Table
2014-11-07 17:19:35 -04:00
*
* @param type $data
* @return type
* @throws type
*/
public function update($data)
{
2017-02-20 13:08:08 -04:00
if (!empty($data['TAS_UID'])) {
$t = new Task();
2017-02-20 13:08:08 -04:00
$data['TAS_ID'] = $t->load($data['TAS_UID'])['TAS_ID'];
}
$con = Propel::getConnection(ListUnassignedPeer::DATABASE_NAME);
2014-11-07 17:19:35 -04:00
try {
$con->begin();
$this->setNew(false);
$this->fromArray($data, BasePeer::TYPE_FIELDNAME);
2014-11-07 17:19:35 -04:00
if ($this->validate()) {
$result = $this->save();
$con->commit();
return $result;
} else {
$con->rollback();
throw (new Exception("Failed Validation in class " . get_class($this) . "."));
2014-11-07 17:19:35 -04:00
}
} catch (Exception $e) {
$con->rollback();
throw ($e);
}
}
/**
* Remove List Unassigned
2014-11-07 17:19:35 -04:00
*
* @param type $seqName
* @return type
* @throws type
*
*/
public function remove($appUid, $delIndex)
2014-11-07 17:19:35 -04:00
{
$con = Propel::getConnection(ListUnassignedPeer::DATABASE_NAME);
2014-11-07 17:19:35 -04:00
try {
$this->setAppUid($appUid);
$this->setDelIndex($delIndex);
2014-11-07 17:19:35 -04:00
$con->begin();
$this->delete();
$con->commit();
} catch (Exception $e) {
$con->rollback();
throw ($e);
}
}
public function newRow($data, $delPreviusUsrUid)
{
2014-11-07 17:19:35 -04:00
$data['DEL_PREVIOUS_USR_UID'] = $delPreviusUsrUid;
2017-02-21 16:36:51 -04:00
$data['DEL_DUE_DATE'] = isset($data['DEL_TASK_DUE_DATE']) ? $data['DEL_TASK_DUE_DATE'] : '';
2014-11-07 17:19:35 -04:00
$criteria = new Criteria();
$criteria->addSelectColumn(ApplicationPeer::APP_NUMBER);
$criteria->addSelectColumn(ApplicationPeer::APP_UPDATE_DATE);
$criteria->add(ApplicationPeer::APP_UID, $data['APP_UID'], Criteria::EQUAL);
2014-11-07 17:19:35 -04:00
$dataset = ApplicationPeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
$aRow = $dataset->getRow();
$data = array_merge($data, $aRow);
$criteria = new Criteria();
2016-07-18 14:13:01 -04:00
$criteria->addSelectColumn(ProcessPeer::PRO_TITLE);
$criteria->add(ProcessPeer::PRO_UID, $data['PRO_UID'], Criteria::EQUAL);
2016-07-18 14:13:01 -04:00
$dataset = ProcessPeer::doSelectRS($criteria);
2014-11-07 17:19:35 -04:00
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
$aRow = $dataset->getRow();
2016-07-18 14:13:01 -04:00
$data['APP_PRO_TITLE'] = $aRow['PRO_TITLE'];
2014-11-07 17:19:35 -04:00
$criteria = new Criteria();
2016-07-18 14:13:01 -04:00
$criteria->addSelectColumn(TaskPeer::TAS_TITLE);
$criteria->add(TaskPeer::TAS_UID, $data['TAS_UID'], Criteria::EQUAL);
2016-07-18 14:13:01 -04:00
$dataset = TaskPeer::doSelectRS($criteria);
2014-11-07 17:19:35 -04:00
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
$aRow = $dataset->getRow();
2016-07-18 14:13:01 -04:00
$data['APP_TAS_TITLE'] = $aRow['TAS_TITLE'];
2014-11-07 17:19:35 -04:00
$data['APP_PREVIOUS_USER'] = '';
if ($data['DEL_PREVIOUS_USR_UID'] != '') {
$criteria = new Criteria();
$criteria->addSelectColumn(UsersPeer::USR_USERNAME);
$criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME);
$criteria->addSelectColumn(UsersPeer::USR_LASTNAME);
$criteria->add(UsersPeer::USR_UID, $data['DEL_PREVIOUS_USR_UID'], Criteria::EQUAL);
2014-11-07 17:19:35 -04:00
$dataset = UsersPeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
$aRow = $dataset->getRow();
$data['DEL_PREVIOUS_USR_USERNAME'] = $aRow['USR_USERNAME'];
$data['DEL_PREVIOUS_USR_FIRSTNAME'] = $aRow['USR_FIRSTNAME'];
$data['DEL_PREVIOUS_USR_LASTNAME'] = $aRow['USR_LASTNAME'];
2014-11-07 17:19:35 -04:00
}
self::create($data);
return true;
2014-11-07 17:19:35 -04:00
}
2017-04-21 12:04:57 -04:00
/**
* This function add restriction in the query related to the filters
* @param Criteria $criteria, must be contain only select of columns
* @param array $filters
* @param array $additionalColumns information about the new columns related to custom cases list
* @throws PropelException
*/
public function loadFilters(&$criteria, $filters, $additionalColumns = array())
2014-11-07 17:19:35 -04:00
{
$filter = isset($filters['filter']) ? $filters['filter'] : '';
$search = isset($filters['search']) ? $filters['search'] : '';
$caseLink = isset($filters['caseLink']) ? $filters['caseLink'] : '';
$process = isset($filters['process']) ? $filters['process'] : '';
$category = isset($filters['category']) ? $filters['category'] : '';
2018-01-31 15:38:18 -04:00
$newestthan = isset($filters['newestthan']) ? $filters['newestthan'] : '';
$oldestthan = isset($filters['oldestthan']) ? $filters['oldestthan'] : '';
2017-08-23 17:26:00 -04:00
$appUidCheck = isset($filters['appUidCheck']) ? $filters['appUidCheck'] : array();
2014-11-07 17:19:35 -04:00
2017-04-21 12:04:57 -04:00
//Filter Search
2014-11-07 17:19:35 -04:00
if ($search != '') {
//Check if we need to search to the APP_UID
if (!empty($caseLink)) {
$criteria->add(ListUnassignedPeer::APP_UID, $search, Criteria::EQUAL);
} else {
//If we have additional tables configured in the custom cases list, prepare the variables for search
2017-06-02 12:26:03 -04:00
$casesList = new \ProcessMaker\BusinessModel\Cases();
$casesList->getSearchCriteriaListCases($criteria, __CLASS__ . 'Peer', $search, $this->getAdditionalClassName(), $additionalColumns);
2017-04-21 12:04:57 -04:00
}
2014-11-07 17:19:35 -04:00
}
2017-04-21 12:04:57 -04:00
//Filter Process Id
2014-11-07 17:19:35 -04:00
if ($process != '') {
$criteria->add(ListUnassignedPeer::PRO_UID, $process, Criteria::EQUAL);
2014-11-07 17:19:35 -04:00
}
2017-04-21 12:04:57 -04:00
//Filter Category
2014-11-07 17:19:35 -04:00
if ($category != '') {
$criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY);
$aConditions = array();
$aConditions[] = array(ListUnassignedPeer::PRO_UID, ProcessPeer::PRO_UID);
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . G::realEscapeString($category) . "'");
2014-11-07 17:19:35 -04:00
$criteria->addJoinMC($aConditions, Criteria::INNER_JOIN);
}
2017-08-23 17:26:00 -04:00
2018-01-31 15:38:18 -04:00
//Those filters: $newestthan, $oldestthan is used from mobile GET /light/unassigned
if ($newestthan != '') {
$criteria->add(
$criteria->getNewCriterion(ListUnassignedPeer::DEL_DELEGATE_DATE, $newestthan, Criteria::GREATER_THAN)
);
}
if ($oldestthan != '') {
$criteria->add(
$criteria->getNewCriterion(ListUnassignedPeer::DEL_DELEGATE_DATE, $oldestthan, Criteria::LESS_THAN)
);
}
2017-08-23 17:26:00 -04:00
//Review in the specific lot of cases
if (!empty($appUidCheck)) {
$criteria->add(ListUnassignedPeer::APP_UID, $appUidCheck, Criteria::IN);
}
2014-11-07 17:19:35 -04:00
}
2017-04-21 12:04:57 -04:00
/**
* This function get the information in the corresponding cases list
2020-10-13 23:20:30 +00:00
*
* @param string $usrUid, must be show cases related to this user
2017-04-21 12:04:57 -04:00
* @param array $filters for apply in the result
2017-07-21 17:20:18 -04:00
* @param callable $callbackRecord
2017-04-21 12:04:57 -04:00
* @return array $data
*/
2020-10-13 23:20:30 +00:00
public function loadList($usrUid, $filters = [], callable $callbackRecord = null)
2014-11-07 17:19:35 -04:00
{
2020-10-13 23:20:30 +00:00
// Get criteria base and the additional columns
$pmTable = new PmTable();
$criteria = $pmTable->addPMFieldsToList('unassigned');
$this->setAdditionalClassName($pmTable->tableClassName);
2017-06-02 12:29:07 -04:00
$additionalColumns = $criteria->getSelectColumns();
2014-11-07 17:19:35 -04:00
2020-10-13 23:20:30 +00:00
// Check if exists the custom cases list configured for the unassigned list, if NOT exists we're using the new improved query
if (empty($additionalColumns)) {
// Initialize required parameters
$selectedColumns = [
// APP_DELEGATION table
'APP_DELEGATION.APP_NUMBER',
'APP_DELEGATION.DEL_INDEX',
'APP_DELEGATION.APP_UID',
'APP_DELEGATION.TAS_UID',
'APP_DELEGATION.PRO_UID',
'APP_DELEGATION.DEL_DELEGATE_DATE',
'APP_DELEGATION.DEL_TASK_DUE_DATE',
'APP_DELEGATION.DEL_PRIORITY',
'APP_DELEGATION.DEL_PREVIOUS',
2020-12-07 09:21:51 -04:00
'APP_DELEGATION.DEL_TITLE AS APP_TITLE',
2020-10-13 23:20:30 +00:00
// TASK table
'TASK.TAS_TITLE',
// APPLICATION table
'APPLICATION.APP_UPDATE_DATE',
// PROCESS table
'PROCESS.PRO_TITLE'
];
$sortMap = [
'APP_NUMBER' => 'APP_NUMBER',
'DEL_DUE_DATE' => 'DEL_TASK_DUE_DATE',
'DEL_DELEGATE_DATE' => 'DEL_DELEGATE_DATE',
2020-12-07 09:21:51 -04:00
'APP_DELEGATION.DEL_TITLE AS APP_TITLE',
2020-10-13 23:20:30 +00:00
'APP_PRO_TITLE' => 'PRO_TITLE',
'APP_TAS_TITLE' => 'TAS_TITLE',
'DEL_PREVIOUS_USR_UID' => 'USR_ID'
];
$categoryUid = $filters['category'] ?? null;
$processUid = $filters['process'] ?? null;
$textToSearch = $filters['search'] ?? null;
$sort = $sortMap[$filters['sort']] ?? null;
$dir = $filters['dir'] ?? null;
$offset = $filters['start'] ?? null;
$limit = $filters['limit'] ?? null;
// Get data
$data = Delegation::getSelfService($usrUid, $selectedColumns, $categoryUid, $processUid, $textToSearch, $sort, $dir, $offset, $limit);
// Transform and complete the data
foreach ($data as &$row) {
$row = is_null($callbackRecord) ? $row : $callbackRecord($row);
}
} else {
// Use the old Propel query that is compatible with the custom cases list
$data = $this->loadListWithAdditionalColumns($criteria, $usrUid, $filters, $additionalColumns, $callbackRecord);
}
return $data;
}
/**
* Get the data for unassigned list with the information of additional columns
*
* @param object $criteria
* @param string $usr_uid
* @param array $filters
* @param array $additionalColumns
* @param callable $callbackRecord
* @return array
*/
private function loadListWithAdditionalColumns($criteria, $usr_uid, $filters, $additionalColumns, callable $callbackRecord)
{
2014-11-07 17:19:35 -04:00
$criteria->addSelectColumn(ListUnassignedPeer::APP_UID);
$criteria->addSelectColumn(ListUnassignedPeer::DEL_INDEX);
$criteria->addSelectColumn(ListUnassignedPeer::TAS_UID);
$criteria->addSelectColumn(ListUnassignedPeer::PRO_UID);
$criteria->addSelectColumn(ListUnassignedPeer::APP_NUMBER);
$criteria->addSelectColumn(ListUnassignedPeer::APP_TITLE);
$criteria->addSelectColumn(ListUnassignedPeer::APP_PRO_TITLE);
$criteria->addSelectColumn(ListUnassignedPeer::APP_TAS_TITLE);
$criteria->addSelectColumn(ListUnassignedPeer::APP_UPDATE_DATE);
$criteria->addSelectColumn(ListUnassignedPeer::DEL_PREVIOUS_USR_USERNAME);
$criteria->addSelectColumn(ListUnassignedPeer::DEL_PREVIOUS_USR_FIRSTNAME);
$criteria->addSelectColumn(ListUnassignedPeer::DEL_PREVIOUS_USR_LASTNAME);
2014-11-07 17:19:35 -04:00
$criteria->addSelectColumn(ListUnassignedPeer::DEL_PREVIOUS_USR_UID);
$criteria->addSelectColumn(ListUnassignedPeer::DEL_DELEGATE_DATE);
$criteria->addSelectColumn(ListUnassignedPeer::DEL_DUE_DATE);
$criteria->addSelectColumn(ListUnassignedPeer::DEL_PRIORITY);
//Self Service Value Based Assignment
2017-07-24 15:12:11 -04:00
$criteria = $this->getCriteriaWhereSelfService($criteria, $usr_uid);
2014-11-07 17:19:35 -04:00
//Apply some filters
2017-04-21 12:04:57 -04:00
self::loadFilters($criteria, $filters, $additionalColumns);
2017-07-13 14:58:43 -04:00
//We will be defined the sort
$casesList = new \ProcessMaker\BusinessModel\Cases();
$sort = $casesList->getSortColumn(
__CLASS__ . 'Peer',
BasePeer::TYPE_FIELDNAME,
empty($filters['sort']) ? "DEL_DELEGATE_DATE" : $filters['sort'],
2017-07-14 11:57:21 -04:00
"DEL_DELEGATE_DATE",
$this->getAdditionalClassName(),
$additionalColumns,
$this->getUserDisplayFormat()
2017-07-13 14:58:43 -04:00
);
2014-11-07 17:19:35 -04:00
$dir = isset($filters['dir']) ? $filters['dir'] : "ASC";
$start = isset($filters['start']) ? $filters['start'] : "0";
$limit = isset($filters['limit']) ? $filters['limit'] : "25";
$paged = isset($filters['paged']) ? $filters['paged'] : 1;
$count = isset($filters['count']) ? $filters['count'] : 1;
if (is_array($sort) && count($sort) > 0) {
foreach ($sort as $key) {
if ($dir == 'DESC') {
$criteria->addDescendingOrderByColumn($key);
} else {
$criteria->addAscendingOrderByColumn($key);
}
}
2014-11-07 17:19:35 -04:00
} else {
if ($dir == 'DESC') {
$criteria->addDescendingOrderByColumn($sort);
} else {
$criteria->addAscendingOrderByColumn($sort);
}
2014-11-07 17:19:35 -04:00
}
2016-08-24 15:08:08 -04:00
$this->total = ListUnassignedPeer::doCount($criteria);
2014-11-07 17:19:35 -04:00
if ($paged == 1) {
$criteria->setLimit($limit);
$criteria->setOffset($start);
2014-11-07 17:19:35 -04:00
}
$dataset = ListUnassignedPeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$aPriorities = array('1' => 'VL', '2' => 'L', '3' => 'N', '4' => 'H', '5' => 'VH');
$data = array();
2014-11-07 17:19:35 -04:00
while ($dataset->next()) {
$aRow = (is_null($callbackRecord))? $dataset->getRow() : $callbackRecord($dataset->getRow());
$aRow['DEL_PRIORITY'] = (isset($aRow['DEL_PRIORITY']) &&
is_numeric($aRow['DEL_PRIORITY']) &&
$aRow['DEL_PRIORITY'] <= 5 &&
$aRow['DEL_PRIORITY'] > 0) ? $aRow['DEL_PRIORITY'] : 3;
$aRow['DEL_PRIORITY'] = G::LoadTranslation("ID_PRIORITY_{$aPriorities[$aRow['DEL_PRIORITY']]}");
2014-11-07 17:19:35 -04:00
$data[] = $aRow;
}
return $data;
2014-11-07 17:19:35 -04:00
}
/**
2017-07-21 17:20:18 -04:00
* Get SelfService Value Based
*
* @param string $userUid
2018-07-31 08:45:54 -04:00
*
2017-07-21 17:20:18 -04:00
* @return array $arrayAppAssignSelfServiceValueData
* @throws Exception
*/
public function getSelfServiceCasesByEvaluate($userUid)
{
try {
2018-07-31 08:45:54 -04:00
$arrayAppAssignSelfServiceValueData = [];
$criteria = new Criteria("workflow");
2019-04-09 16:26:16 -04:00
$group = new Groups();
//Get the GRP_ID related to the $userUid
$arrayId = $group->getActiveGroupsForAnUserById($userUid);
2018-01-02 12:07:43 +00:00
$sql = "("
2019-04-09 16:26:16 -04:00
. AppAssignSelfServiceValueGroupPeer::ASSIGNEE_ID . " IN (" . implode(",", $arrayId) . ") AND "
. " " . AppAssignSelfServiceValueGroupPeer::ASSIGNEE_TYPE . " = 2 "
. ")";
2018-01-02 12:07:43 +00:00
$criteria->setDistinct();
$criteria->addSelectColumn(AppAssignSelfServiceValuePeer::APP_UID);
2018-07-31 08:45:54 -04:00
$criteria->addSelectColumn(AppAssignSelfServiceValuePeer::APP_NUMBER);
$criteria->addSelectColumn(AppAssignSelfServiceValuePeer::DEL_INDEX);
$criteria->addSelectColumn(AppAssignSelfServiceValuePeer::TAS_UID);
2018-07-31 08:45:54 -04:00
$criteria->addSelectColumn(AppAssignSelfServiceValuePeer::TAS_ID);
2018-01-02 12:07:43 +00:00
$criteria->addJoin(AppAssignSelfServiceValuePeer::ID, AppAssignSelfServiceValueGroupPeer::ID, Criteria::INNER_JOIN);
$criteria->add(AppAssignSelfServiceValueGroupPeer::GRP_UID, $userUid, Criteria::EQUAL);
$criteria->addOr(AppAssignSelfServiceValueGroupPeer::GRP_UID, $sql, Criteria::CUSTOM);
$rsCriteria = AppAssignSelfServiceValuePeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
2018-07-31 08:45:54 -04:00
$arrayAppAssignSelfServiceValueData[] = [
"APP_NUMBER" => $row["APP_NUMBER"],
"DEL_INDEX" => $row["DEL_INDEX"],
2018-07-31 08:45:54 -04:00
"TAS_ID" => $row["TAS_ID"]
];
}
return $arrayAppAssignSelfServiceValueData;
} catch (Exception $e) {
throw $e;
}
}
/**
2017-11-22 07:58:57 -04:00
* Get user's SelfService tasks
*
2017-07-21 17:20:18 -04:00
* @param string $userUid
2017-11-22 07:58:57 -04:00
* @param boolean $adHocUsers
*
2017-07-21 17:20:18 -04:00
* @return array $tasks
*/
2017-11-22 07:58:57 -04:00
public function getSelfServiceTasks($userUid = '', $adHocUsers = false)
{
2017-11-22 07:58:57 -04:00
$rows[] = [];
$tasks = [];
//check self service tasks assigned directly to this user
$c = new Criteria();
$c->clearSelectColumns();
$c->addSelectColumn(TaskPeer::TAS_UID);
2018-07-31 08:45:54 -04:00
$c->addSelectColumn(TaskPeer::TAS_ID);
$c->addSelectColumn(TaskPeer::PRO_UID);
2018-07-31 08:45:54 -04:00
//@todo we need to use the PRO_ID for the left join
$c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
2018-07-31 08:45:54 -04:00
//@todo we need to use the TAS_ID for the left join
$c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
$c->add(ProcessPeer::PRO_STATUS, 'ACTIVE');
$c->add(TaskPeer::TAS_ASSIGN_TYPE, 'SELF_SERVICE');
2019-07-04 14:23:36 -04:00
$c->add(
$c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, '')->addOr(
$c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, null, Criteria::ISNULL))
);
$c->add(TaskUserPeer::USR_UID, $userUid);
2017-11-22 07:58:57 -04:00
//TU_TYPE = 2 is a AdHoc task
if (!$adHocUsers) {
$c->add(TaskUserPeer::TU_TYPE, 1);
}
$rs = TaskPeer::doSelectRS($c);
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rs->next();
$row = $rs->getRow();
while (is_array($row)) {
2018-07-31 08:45:54 -04:00
$tasks[] = $row['TAS_ID'];
$rs->next();
$row = $rs->getRow();
}
$group = new Groups();
2017-11-22 07:58:57 -04:00
$groupsList = $group->getActiveGroupsForAnUser($userUid);
$c = new Criteria();
$c->clearSelectColumns();
$c->addSelectColumn(TaskPeer::TAS_UID);
2018-07-31 08:45:54 -04:00
$c->addSelectColumn(TaskPeer::TAS_ID);
$c->addSelectColumn(TaskPeer::PRO_UID);
2018-07-31 08:45:54 -04:00
//@todo we need to use the PRO_ID for the left join
$c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
2018-07-31 08:45:54 -04:00
//@todo we need to use the TAS_ID for the left join
$c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
$c->add(ProcessPeer::PRO_STATUS, 'ACTIVE');
$c->add(TaskPeer::TAS_ASSIGN_TYPE, 'SELF_SERVICE');
2019-07-04 14:23:36 -04:00
$c->add(
$c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, '')->addOr(
$c->getNewCriterion(TaskPeer::TAS_GROUP_VARIABLE, null, Criteria::ISNULL))
);
2017-11-22 07:58:57 -04:00
$c->add(TaskUserPeer::USR_UID, $groupsList, Criteria::IN);
//TU_TYPE = 2 is a AdHoc task
if (!$adHocUsers) {
$c->add(TaskUserPeer::TU_TYPE, 1);
}
$rs = TaskPeer::doSelectRS($c);
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rs->next();
$row = $rs->getRow();
while (is_array($row)) {
2018-07-31 08:45:54 -04:00
$tasks[] = $row['TAS_ID'];
$rs->next();
$row = $rs->getRow();
}
return $tasks;
}
/**
* Returns the number of cases of a user
2018-07-31 08:45:54 -04:00
*
2020-10-13 23:20:30 +00:00
* @param string $usrUid
2017-02-09 15:17:13 -04:00
* @param array $filters
2018-07-31 08:45:54 -04:00
*
2017-07-21 17:20:18 -04:00
* @return int $total
*/
2020-10-13 23:20:30 +00:00
public function getCountList($usrUid, $filters = [])
{
2020-10-13 23:20:30 +00:00
// Initialize required parameters
$categoryUid = $filters['category'] ?? null;
$processUid = $filters['process'] ?? null;
$textToSearch = $filters['search'] ?? null;
// Get counter
return Delegation::countSelfService($usrUid, $categoryUid, $processUid, $textToSearch);
2017-07-21 17:20:18 -04:00
}
/**
* This function get the where criteria for the SelfService and SelfService value based
*
* @param criteria $criteria
* @param string $userUid
2018-07-31 08:45:54 -04:00
*
2017-07-21 17:20:18 -04:00
* @return criteria $criteria
*/
public function getCriteriaWhereSelfService($criteria, $userUid)
{
$tasks = $this->getSelfServiceTasks($userUid);
2017-07-21 17:20:18 -04:00
$aSelfServiceValueBased = $this->getSelfServiceCasesByEvaluate($userUid);
2017-07-21 17:20:18 -04:00
if (!empty($aSelfServiceValueBased)) {
//Self Service Value Based Assignment
$criterionAux = null;
2017-07-21 17:20:18 -04:00
//Load Self Service Value Based Assignment
$firstRow = current($aSelfServiceValueBased);
2017-07-24 15:12:11 -04:00
$criterionAux = sprintf(
"((
2018-07-31 08:45:54 -04:00
LIST_UNASSIGNED.APP_NUMBER='%s' AND
2017-07-24 15:12:11 -04:00
LIST_UNASSIGNED.DEL_INDEX=%d AND
2018-07-31 08:45:54 -04:00
LIST_UNASSIGNED.TAS_ID='%s'
2017-07-24 15:12:11 -04:00
) ",
2018-07-31 08:45:54 -04:00
$firstRow["APP_NUMBER"],
2017-07-24 15:12:11 -04:00
$firstRow["DEL_INDEX"],
2018-07-31 08:45:54 -04:00
$firstRow["TAS_ID"]
2017-07-24 15:12:11 -04:00
);
2017-07-21 17:20:18 -04:00
foreach (array_slice($aSelfServiceValueBased, 1) as $value) {
2017-07-24 15:12:11 -04:00
$criterionAux .= sprintf(
" OR (
2018-07-31 08:45:54 -04:00
LIST_UNASSIGNED.APP_NUMBER='%s' AND
2017-07-24 15:12:11 -04:00
LIST_UNASSIGNED.DEL_INDEX=%d AND
2018-07-31 08:45:54 -04:00
LIST_UNASSIGNED.TAS_ID='%s'
2017-07-24 15:12:11 -04:00
) ",
2018-07-31 08:45:54 -04:00
$value["APP_NUMBER"],
2017-07-24 15:12:11 -04:00
$value["DEL_INDEX"],
2018-07-31 08:45:54 -04:00
$value["TAS_ID"]
2017-07-24 15:12:11 -04:00
);
}
2017-07-21 17:20:18 -04:00
$criterionAux .= ")";
//And Load SelfService
$criteria->add(
2017-07-24 15:12:11 -04:00
$criteria->getNewCriterion(
2018-07-31 08:45:54 -04:00
ListUnassignedPeer::TAS_ID,
2017-07-24 15:12:11 -04:00
$tasks,
Criteria::IN
)->addOr(
$criteria->getNewCriterion(
2018-07-31 08:45:54 -04:00
ListUnassignedPeer::TAS_ID,
2017-07-24 15:12:11 -04:00
$criterionAux,
Criteria::CUSTOM
)
)
);
} else {
//Self Service
2018-07-31 08:45:54 -04:00
$criteria->add(ListUnassignedPeer::TAS_ID, $tasks, Criteria::IN);
}
2017-07-21 17:20:18 -04:00
return $criteria;
}
2014-11-07 17:19:35 -04:00
}