diff --git a/workflow/engine/classes/model/ListCanceled.php b/workflow/engine/classes/model/ListCanceled.php index a581c1c1c..44771b420 100644 --- a/workflow/engine/classes/model/ListCanceled.php +++ b/workflow/engine/classes/model/ListCanceled.php @@ -306,5 +306,18 @@ class ListCanceled extends BaseListCanceled { return $data; } + + /** + * Returns the number of cases of a user + * @param $usrUid + * @return int + */ + public function getCountList($usrUid) + { + $criteria = new Criteria(); + $criteria->add(ListCanceledPeer::USR_UID, $usrUid, Criteria::EQUAL); + $total = ListCanceledPeer::doCount($criteria); + return (int)$total; + } } // ListCanceled diff --git a/workflow/engine/classes/model/ListCompleted.php b/workflow/engine/classes/model/ListCompleted.php index 4cf8c2afc..960a12d9b 100644 --- a/workflow/engine/classes/model/ListCompleted.php +++ b/workflow/engine/classes/model/ListCompleted.php @@ -320,5 +320,18 @@ class ListCompleted extends BaseListCompleted return $data; } + + /** + * Returns the number of cases of a user + * @param $usrUid + * @return int + */ + public function getCountList($usrUid) + { + $criteria = new Criteria(); + $criteria->add(ListCompletedPeer::USR_UID, $usrUid, Criteria::EQUAL); + $total = ListCompletedPeer::doCount($criteria); + return (int)$total; + } } // ListCompleted diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index f91f23c94..636b23a53 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -598,5 +598,24 @@ class ListInbox extends BaseListInbox return isset($aRow[$fieldName]) ? $aRow[$fieldName] : NULL; } + /** + * Returns the number of cases of a user + * @param $usrUid + * @param string $appStatus + * @return int + */ + public function getCountList($usrUid, $appStatus = 'DRAFT') + { + $criteria = new Criteria(); + $criteria->add(ListInboxPeer::USR_UID, $usrUid, Criteria::EQUAL); + if ($appStatus == 'TO_DO') { + $criteria->add(ListInboxPeer::APP_STATUS, 'TO_DO', Criteria::EQUAL); + } else { + $criteria->add(ListInboxPeer::APP_STATUS, 'DRAFT', Criteria::EQUAL); + } + $total = ListInboxPeer::doCount($criteria); + return (int)$total; + } + } diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index 067b9c421..276109129 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -405,5 +405,18 @@ class ListParticipatedLast extends BaseListParticipatedLast } BasePeer::doUpdate($criteriaWhere, $criteriaSet, $con); } + + /** + * Returns the number of cases of a user + * @param $usrUid + * @return int + */ + public function getCountList($usrUid) + { + $criteria = new Criteria(); + $criteria->add(ListParticipatedLastPeer::USR_UID, $usrUid, Criteria::EQUAL); + $total = ListParticipatedLastPeer::doCount($criteria); + return (int)$total; + } } diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index d259d48e1..4f8d9bde0 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -328,5 +328,18 @@ class ListPaused extends BaseListPaused { return $data; } + + /** + * Returns the number of cases of a user + * @param $usrUid + * @return int + */ + public function getCountList($usrUid) + { + $criteria = new Criteria(); + $criteria->add(ListPausedPeer::USR_UID, $usrUid, Criteria::EQUAL); + $total = ListPausedPeer::doCount($criteria); + return (int)$total; + } } // ListPaused diff --git a/workflow/engine/classes/model/ListUnassigned.php b/workflow/engine/classes/model/ListUnassigned.php index 2a5f1a06e..912baa31c 100644 --- a/workflow/engine/classes/model/ListUnassigned.php +++ b/workflow/engine/classes/model/ListUnassigned.php @@ -460,5 +460,45 @@ class ListUnassigned extends BaseListUnassigned return $tasks; } + + /** + * Returns the number of cases of a user + * @param $userUid + * @return int + */ + public function getCountList($userUid) + { + $criteria = new Criteria('workflow'); + $tasks = $this->getSelfServiceTasks($userUid); + $arrayAppAssignSelfServiceValueData = $this->getSelfServiceCasesByEvaluate($userUid); + + if (!empty($arrayAppAssignSelfServiceValueData)) { + //Self Service Value Based Assignment + $criterionAux = null; + + foreach ($arrayAppAssignSelfServiceValueData as $value) { + if (is_null($criterionAux)) { + $criterionAux = $criteria->getNewCriterion(ListUnassignedPeer::APP_UID, $value["APP_UID"], Criteria::EQUAL)->addAnd( + $criteria->getNewCriterion(ListUnassignedPeer::DEL_INDEX, $value["DEL_INDEX"], Criteria::EQUAL))->addAnd( + $criteria->getNewCriterion(ListUnassignedPeer::TAS_UID, $value["TAS_UID"], Criteria::EQUAL)); + } else { + $criterionAux = $criteria->getNewCriterion(ListUnassignedPeer::APP_UID, $value["APP_UID"], Criteria::EQUAL)->addAnd( + $criteria->getNewCriterion(ListUnassignedPeer::DEL_INDEX, $value["DEL_INDEX"], Criteria::EQUAL))->addAnd( + $criteria->getNewCriterion(ListUnassignedPeer::TAS_UID, $value["TAS_UID"], Criteria::EQUAL))->addOr( + $criterionAux + ); + } + } + + $criteria->add( + $criterionAux->addOr($criteria->getNewCriterion(ListUnassignedPeer::TAS_UID, $tasks, Criteria::IN)) + ); + } else { + //Self Service + $criteria->add(ListUnassignedPeer::TAS_UID, $tasks, Criteria::IN); + } + $total = ListUnassignedPeer::doCount($criteria); + return (int)$total; + } } diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 96e902bcc..0b6ce8836 100755 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -4251,6 +4251,15 @@ + + + + + + + + + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 4addde059..413da0408 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2393,7 +2393,8 @@ CREATE TABLE `LIST_COMPLETED` `DEL_CURRENT_USR_USERNAME` VARCHAR(100) default '', `DEL_CURRENT_USR_FIRSTNAME` VARCHAR(50) default '', `DEL_CURRENT_USR_LASTNAME` VARCHAR(50) default '', - PRIMARY KEY (`APP_UID`) + PRIMARY KEY (`APP_UID`), + KEY `usrListCompleted`(`USR_UID`) )ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Completed list'; #----------------------------------------------------------------------------- #-- LIST_PAUSED diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php b/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php index 1b2ba2187..0941bc724 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php @@ -1106,4 +1106,20 @@ class Consolidated $oCase->updateCase($appUid, $aData); } + + /** + * @param $usrUid + * @return int + */ + public function getCountList($usrUid) + { + $criteria = new Criteria(); + $criteria->add(\CaseConsolidatedCorePeer::CON_STATUS, 'ACTIVE'); + $criteria->addJoin(\CaseConsolidatedCorePeer::TAS_UID, \AppCacheViewPeer::TAS_UID, Criteria::LEFT_JOIN); + $criteria->add(\AppCacheViewPeer::USR_UID, $usrUid); + $criteria->add(\AppCacheViewPeer::DEL_THREAD_STATUS, 'OPEN'); + $criteria->add(\AppCacheViewPeer::APP_STATUS, 'TO_DO'); + $total = \CaseConsolidatedCorePeer::doCount($criteria); + return (int)$total; + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php b/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php index 1bb26d9dd..88077e2aa 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php @@ -10,6 +10,74 @@ use \UsersPeer; */ class Lists { + /** + * @var array + */ + private $mapList; + /** + * @var \ListInbox + */ + private $ListInbox; + /** + * @var \ListInbox + */ + private $ListDraft; + /** + * @var \ListCanceled + */ + private $ListCanceled; + /** + * @var \ListParticipatedLast + */ + private $ListParticipated; + /** + * @var \ListPaused + */ + private $ListPaused; + /** + * @var \ListCompleted + */ + private $ListCompleted; + /** + * @var Consolidated + */ + private $ListConsolidated; + /** + * @var \ListUnassigned + */ + private $ListSelfService; + + /** + * Lists constructor. + */ + public function __construct() + { + $this->mapList = array( + 'ListInbox' => 'CASES_INBOX', + 'ListDraft' => 'CASES_DRAFT', + 'ListCanceled' => 'CASES_CANCELLED', + 'ListParticipated' => 'CASES_SENT', + 'ListPaused' => 'CASES_PAUSED', + 'ListCompleted' => 'CASES_COMPLETED', + /*----------------------------------********---------------------------------*/ + 'ListConsolidated' => 'CONSOLIDATED_CASES', + /*----------------------------------********---------------------------------*/ + 'ListSelfService' => 'CASES_SELFSERVICE' + ); + + $this->ListInbox = new \ListInbox(); + $this->ListDraft = new \ListInbox(); + $this->ListCanceled = new \ListCanceled(); + $this->ListParticipated = new \ListParticipatedLast(); + $this->ListPaused = new \ListPaused(); + $this->ListCompleted = new \ListCompleted(); + /*----------------------------------********---------------------------------*/ + $this->ListConsolidated = new Consolidated(); + /*----------------------------------********---------------------------------*/ + $this->ListSelfService = new \ListUnassigned(); + } + + /** * Get list for Cases * @@ -190,56 +258,34 @@ class Lists { /** * Get counters for lists - * - * @access public - * @param array $userId, User Uid + * @param $userId * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia */ public function getCounters($userId) { - $criteria = new Criteria(); - $criteria->addSelectColumn(UsersPeer::USR_TOTAL_INBOX); - $criteria->addSelectColumn(UsersPeer::USR_TOTAL_DRAFT); - $criteria->addSelectColumn(UsersPeer::USR_TOTAL_CANCELLED); - $criteria->addSelectColumn(UsersPeer::USR_TOTAL_PARTICIPATED); - $criteria->addSelectColumn(UsersPeer::USR_TOTAL_PAUSED); - $criteria->addSelectColumn(UsersPeer::USR_TOTAL_COMPLETED); - $criteria->add( UsersPeer::USR_UID, $userId, Criteria::EQUAL ); - $dataset = UsersPeer::doSelectRS($criteria); - $dataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - $aRow = $dataset->getRow(); - - $oAppCache = new \AppCacheView(); - $totalUnassigned = $oAppCache->getListCounters('selfservice', $userId, false); - - $response = array( - array('count' => $aRow['USR_TOTAL_INBOX'], 'item' => 'CASES_INBOX'), - array('count' => $aRow['USR_TOTAL_DRAFT'], 'item' => 'CASES_DRAFT'), - array('count' => $aRow['USR_TOTAL_CANCELLED'], 'item' => 'CASES_CANCELLED'), - array('count' => $aRow['USR_TOTAL_PARTICIPATED'], 'item' => 'CASES_SENT'), - array('count' => $aRow['USR_TOTAL_PAUSED'], 'item' => 'CASES_PAUSED'), - array('count' => $aRow['USR_TOTAL_COMPLETED'], 'item' => 'CASES_COMPLETED'), - array('count' => $totalUnassigned, 'item' => 'CASES_SELFSERVICE') - ); - - /*----------------------------------********---------------------------------*/ - $licensedFeatures = & \PMLicensedFeatures::getSingleton(); - if ($licensedFeatures->verifyfeature('7TTeDBQeWRoZTZKYjh4eFpYUlRDUUEyVERPU3FxellWank=')) { - $criteria = new Criteria(); - $criteria->add(\CaseConsolidatedCorePeer::CON_STATUS, 'ACTIVE'); - $criteria->addJoin(\CaseConsolidatedCorePeer::TAS_UID, \AppCacheViewPeer::TAS_UID, Criteria::LEFT_JOIN); - $criteria->add(\AppCacheViewPeer::USR_UID, $userId); - $criteria->add(\AppCacheViewPeer::DEL_THREAD_STATUS, 'OPEN'); - $criteria->add(\AppCacheViewPeer::APP_STATUS, 'TO_DO'); - $total = \CaseConsolidatedCorePeer::doCount( $criteria ); - $response[] = array('count' => $total, 'item' => 'CONSOLIDATED_CASES'); + $list = $this->mapList; + $response = array(); + foreach ($list as $listObject => $item) { + switch ($listObject) { + case 'ListInbox': + $total = $this->$listObject->getCountList($userId, 'TO_DO'); + array_push($response, (array('count' => $total, 'item' => $item))); + break; + /*----------------------------------********---------------------------------*/ + case 'ListConsolidated': + $licensedFeatures = &\PMLicensedFeatures::getSingleton(); + if ($licensedFeatures->verifyfeature('7TTeDBQeWRoZTZKYjh4eFpYUlRDUUEyVERPU3FxellWank=')) { + $total = $this->$listObject->getCountList($userId); + array_push($response, (array('count' => $total, 'item' => $item))); + } + break; + /*----------------------------------********---------------------------------*/ + default: + $totalInbox = $this->$listObject->getCountList($userId); + array_push($response, (array('count' => $totalInbox, 'item' => $item))); + break; + } } - /*----------------------------------********---------------------------------*/ - return $response; } } \ No newline at end of file