PM-475 "16052 - Revisar problema de self-service con Value-based de grupos" SOLVED

Issue:
    El CasesList es lento cuando existen casos con tipo de asignacion "Self Service Value Based Assignment"
Cause:
    Para todos los casos se esta verificando si su asignacion es de tipo "Self Service Value Based Assignment"
Solution:
    - Se ha creado una nueva tabla "APP_ASSIGN_SELF_SERVICE_VALUE", en la misma se registraran los casos
      con asignacion "Self Service Value Based Assignment"
    - Se ha agregado la opcion "database-generate-self-service-by-value" al comando "./processmaker", para poder
      generar los registros de la nueva tabla.
          Ej: $ ./processmaker database-generate-self-service-by-value myWorkspace
This commit is contained in:
Victor Saisa Lopez
2014-10-27 11:25:17 -04:00
parent d2ba1e188d
commit 80fd2ecd6c
14 changed files with 1723 additions and 61 deletions

View File

@@ -330,61 +330,47 @@ class AppCacheView extends BaseAppCacheView
public function getSelfServiceCasesByEvaluate($userUid)
{
$cases = array();
try {
G::LoadClass("groups");
//check groups assigned to SelfService task
G::LoadClass('groups');
$group = new Groups();
$aGroups = $group->getActiveGroupsForAnUser($userUid);
$arrayApplicationUid = array();
$c = new Criteria();
$c->clearSelectColumns();
$c->addSelectColumn(TaskPeer::TAS_UID);
$c->addSelectColumn(TaskPeer::PRO_UID);
$c->addSelectColumn(TaskPeer::TAS_GROUP_VARIABLE);
$c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::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');
$c->add(TaskPeer::TAS_GROUP_VARIABLE, '', Criteria::NOT_EQUAL);
$rs = TaskPeer::doSelectRS($c);
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rs->next();
//Get APP_UIDs
$group = new Groups();
if ($rs->getRecordCount() > 0) {
if (!class_exists('Cases')) {
G::loadClass('case');
}
$caseInstance = new Cases();
while ($row = $rs->getRow()) {
$tasGroupVariable = str_replace(array('@', '#'), '', $row['TAS_GROUP_VARIABLE']);
$c2 = new Criteria();
$c2->clearSelectColumns();
$c2->addSelectColumn(AppDelegationPeer::APP_UID);
$c2->addSelectColumn(ApplicationPeer::APP_DATA);
$c2->addJoin(AppDelegationPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN);
$c2->add(AppDelegationPeer::TAS_UID, $row['TAS_UID']);
$c2->add(AppDelegationPeer::USR_UID, '');
$c2->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN');
$rs2 = AppDelegationPeer::doSelectRS($c2);
$rs2->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rs2->next();
while ($row2 = $rs2->getRow()) {
$caseData = $caseInstance->unserializeData($row2['APP_DATA']);
$arrayGroup = $group->getActiveGroupsForAnUser($userUid); //Get Groups of User
if (isset($caseData[$tasGroupVariable])) {
if (trim($caseData[$tasGroupVariable]) != '') {
if (in_array(trim($caseData[$tasGroupVariable]), $aGroups)) {
$cases[] = $row2['APP_UID'];
}
}
}
$rs2->next();
if (count($arrayGroup) > 0) {
$criteria = new Criteria("workflow");
$criteria->setDistinct();
$criteria->addSelectColumn(AppAssignSelfServiceValuePeer::APP_UID);
$arrayCondition = array();
$arrayCondition[] = array(AppAssignSelfServiceValuePeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::EQUAL);
$arrayCondition[] = array(AppAssignSelfServiceValuePeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX, Criteria::EQUAL);
$arrayCondition[] = array(AppAssignSelfServiceValuePeer::TAS_UID, AppDelegationPeer::TAS_UID, Criteria::EQUAL);
$criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN);
$criteria->add(AppDelegationPeer::USR_UID, "", Criteria::EQUAL);
$criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", Criteria::EQUAL);
$criteria->add(AppAssignSelfServiceValuePeer::GRP_UID, $arrayGroup, Criteria::IN);
$rsCriteria = AppAssignSelfServiceValuePeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayApplicationUid[] = $row["APP_UID"];
}
$rs->next();
}
//Return
return $arrayApplicationUid;
} catch (Exception $e) {
throw $e;
}
return $cases;
}
/**
@@ -1210,7 +1196,7 @@ class AppCacheView extends BaseAppCacheView
$rs1 = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
$rs1->next();
$row = $rs1->getRow();
if ($row['PRIVILEGE_TYPE'] == 'SUPER') {
$super = G::LoadTranslation('ID_TRUE'); //true;
}