$dataPro = array(); $index = 0; $content = new Content(); $tasTitleDefault = G::LoadTranslation('ID_TASK_NOT_RELATED'); while ($result->next()) { $row = $result->getRow(); $row['APP_MSG_FROM'] = htmlentities($row['APP_MSG_FROM'], ENT_QUOTES, "UTF-8"); $row['APP_MSG_STATUS'] = ucfirst($row['APP_MSG_STATUS']); $row['TAS_TITLE'] = $tasTitleDefault; if ($row['DEL_INDEX'] != 0) { $criteria = new Criteria(); $criteria->addSelectColumn(AppDelegationPeer::PRO_UID); $criteria->addSelectColumn(AppDelegationPeer::TAS_UID); $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); $criteria->add(AppDelegationPeer::APP_UID, $row['APP_UID']); $resultDelegation = AppDelegationPeer::doSelectRS($criteria); $resultDelegation->setFetchmode(ResultSet::FETCHMODE_ASSOC); $row['TAS_TITLE'] = '-'; while ($resultDelegation->next()) { $rowDelegation = $resultDelegation->getRow(); if ($row['DEL_INDEX'] == $rowDelegation['DEL_INDEX']) { $row['TAS_TITLE'] = $content->load('TAS_TITLE', '', $rowDelegation['TAS_UID'], SYS_LANG); break; } } } $data[] = $row; } $response = array(); $response['totalCount'] = $totalCount; $response['data'] = $data;
/** * * @url GET /loadActionByEmail */ public function loadActionByEmail($params) { $criteria = new Criteria(); $criteria->addSelectColumn('COUNT(*)'); $criteria->addJoin(AbeConfigurationPeer::ABE_UID, AbeRequestsPeer::ABE_UID); $criteria->addJoin(AppDelegationPeer::APP_UID, AbeRequestsPeer::APP_UID); $criteria->addJoin(AppDelegationPeer::DEL_INDEX, AbeRequestsPeer::DEL_INDEX); $result = AbeConfigurationPeer::doSelectRS($criteria); $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); $result->next(); $totalCount = $result->getRow(); $totalCount = $totalCount['COUNT(*)']; $criteria = new Criteria(); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_UID); $criteria->addSelectColumn(AbeConfigurationPeer::PRO_UID); $criteria->addSelectColumn(AbeConfigurationPeer::TAS_UID); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_UPDATE_DATE); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_TEMPLATE); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::DYN_UID); $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_UID); $criteria->addSelectColumn(AbeRequestsPeer::APP_UID); $criteria->addSelectColumn(AbeRequestsPeer::DEL_INDEX); $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_SENT_TO); $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_STATUS); $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_SUBJECT); $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_ANSWERED); $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_BODY); $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_DATE); $criteria->addSelectColumn(ApplicationPeer::APP_NUMBER); $criteria->addSelectColumn(AppDelegationPeer::DEL_PREVIOUS); $criteria->addJoin(AbeConfigurationPeer::ABE_UID, AbeRequestsPeer::ABE_UID); $criteria->addJoin(ApplicationPeer::APP_UID, AbeRequestsPeer::APP_UID); $criteria->addJoin(AppDelegationPeer::APP_UID, AbeRequestsPeer::APP_UID); $criteria->addJoin(AppDelegationPeer::DEL_INDEX, AbeRequestsPeer::DEL_INDEX); $criteria->addDescendingOrderByColumn(AbeRequestsPeer::ABE_REQ_DATE); $criteria->setLimit($_REQUEST['limit']); $criteria->setOffset($_REQUEST['start']); $result = AbeConfigurationPeer::doSelectRS($criteria); $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); $data = Array(); $arrayPro = Array(); $arrayTAS = Array(); $index = 0; while ($result->next()) { $data[] = $result->getRow(); $criteriaRes = new Criteria(); $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_UID); $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_CLIENT_IP); $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_DATA); $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_STATUS); $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_MESSAGE); $criteriaRes->add(AbeResponsesPeer::ABE_REQ_UID, $data[$index]['ABE_REQ_UID']); $resultRes = AbeResponsesPeer::doSelectRS($criteriaRes); $resultRes->setFetchmode(ResultSet::FETCHMODE_ASSOC); $resultRes->next(); $dataRes = Array(); if ($dataRes = $resultRes->getRow()) { $data[$index]['ABE_RES_UID'] = $dataRes['ABE_RES_UID']; $data[$index]['ABE_RES_CLIENT_IP'] = $dataRes['ABE_RES_CLIENT_IP']; $data[$index]['ABE_RES_DATA'] = $dataRes['ABE_RES_DATA']; $data[$index]['ABE_RES_STATUS'] = $dataRes['ABE_RES_STATUS']; $data[$index]['ABE_RES_MESSAGE'] = $dataRes['ABE_RES_MESSAGE']; } else { $data[$index]['ABE_RES_UID'] = ''; $data[$index]['ABE_RES_CLIENT_IP'] = ''; $data[$index]['ABE_RES_DATA'] = ''; $data[$index]['ABE_RES_STATUS'] = ''; $data[$index]['ABE_RES_MESSAGE'] = ''; } $criteriaRes = new Criteria(); $criteriaRes->addSelectColumn(AppDelegationPeer::USR_UID); $criteriaRes->addSelectColumn(UsersPeer::USR_FIRSTNAME); $criteriaRes->addSelectColumn(UsersPeer::USR_LASTNAME); $criteria->addJoin(AppDelegationPeer::APP_UID, $data[$index]['APP_UID']); $criteria->addJoin(AppDelegationPeer::DEL_INDEX, $data[$index]['DEL_PREVIOUS']); $criteria->addJoin(AppDelegationPeer::USR_UID, UsersPeer::USR_UID); $resultRes = AppDelegationPeer::doSelectRS($criteriaRes); $resultRes->setFetchmode(ResultSet::FETCHMODE_ASSOC); $resultRes->next(); if ($dataRes = $resultRes->getRow()) { $data[$index]['USER'] = $dataRes['USR_FIRSTNAME'] . ' ' . $dataRes['USR_LASTNAME']; } else { $data[$index]['USER'] = ''; } $data[$index]['ABE_REQ_ANSWERED'] = ($data[$index]['ABE_REQ_ANSWERED'] == 1) ? 'YES' : 'NO'; $index++; } $response = array(); $response['totalCount'] = $totalCount; $response['data'] = $data; return $response; }
/** * reassign Case * * @param string sessionId : The session ID (which was obtained during login) * @param string caseId : The case ID (which can be obtained with the caseList() function) * @param string delIndex : The delegation index number of the case (which can be obtained with the caseList() * function). * @param string userIdSource : The user who is currently assigned the case. * @param string userIdTarget : The target user who will be newly assigned to the case. * @return $result will return an object */ public function reassignCase ($sessionId, $caseId, $delIndex, $userIdSource, $userIdTarget) { $g = new G(); try { $g->sessionVarSave(); $_SESSION["APPLICATION"] = $caseId; $_SESSION["INDEX"] = $delIndex; $_SESSION["USER_LOGGED"] = $userIdSource; if ($userIdTarget == $userIdSource) { $result = new wsResponse( 30, G::loadTranslation( 'ID_TARGET_ORIGIN_USER_SAME' ) ); $g->sessionVarRestore(); return $result; } /** * ****************( 1 )***************** */ $oCriteria = new Criteria( 'workflow' ); $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); $oCriteria->add( UsersPeer::USR_UID, $userIdSource ); $oDataset = UsersPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); if (! is_array( $aRow )) { $result = new wsResponse( 31, G::loadTranslation( 'ID_INVALID_ORIGIN_USER' ) ); $g->sessionVarRestore(); return $result; } /** * ****************( 2 )***************** */ $oCase = new Cases(); $rows = $oCase->loadCase( $caseId ); if (! is_array( $aRow )) { $result = new wsResponse( 32, G::loadTranslation( 'ID_CASE_NOT_OPEN' ) ); $g->sessionVarRestore(); return $result; } /** * ****************( 3 )***************** */ $oCriteria = new Criteria( 'workflow' ); $aConditions = array (); // $aConditions[] = array(AppDelegationPeer::USR_UID, TaskUserPeer::USR_UID); // $aConditions[] = array(AppDelegationPeer::TAS_UID, TaskUserPeer::TAS_UID); // $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); //$oCriteria->addJoin(AppDelegationPeer::USR_UID, TaskUserPeer::USR_UID, Criteria::LEFT_JOIN); $oCriteria->add( AppDelegationPeer::APP_UID, $caseId ); $oCriteria->add( AppDelegationPeer::USR_UID, $userIdSource ); $oCriteria->add( AppDelegationPeer::DEL_INDEX, $delIndex ); $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); if (! is_array( $aRow )) { $result = new wsResponse( 33, G::loadTranslation( 'ID_INVALID_CASE_DELEGATION_INDEX' ) ); $g->sessionVarRestore(); return $result; } $tasUid = $aRow['TAS_UID']; $derivation = new Derivation(); $userList = $derivation->getAllUsersFromAnyTask($tasUid, true); if (! in_array( $userIdTarget, $userList )) { $result = new wsResponse( 34, G::loadTranslation( 'ID_TARGET_USER_DOES_NOT_HAVE_RIGHTS' ) ); $g->sessionVarRestore(); return $result; } /** * ****************( 4 )***************** */ $oCriteria = new Criteria( 'workflow' ); $oCriteria->add( UsersPeer::USR_STATUS, 'ACTIVE' ); $oCriteria->add( UsersPeer::USR_UID, $userIdTarget ); $oDataset = UsersPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); if (! is_array( $aRow )) { $result = new wsResponse( 35, G::loadTranslation( 'ID_TARGET_USER_DESTINATION_INVALID' ) ); $g->sessionVarRestore(); return $result; } /** * ****************( 5 )***************** */ $var = $oCase->reassignCase( $caseId, $delIndex, $userIdSource, $userIdTarget ); if (! $var) { $result = new wsResponse( 36, G::loadTranslation( 'ID_CASE_COULD_NOT_REASSIGNED' ) ); $g->sessionVarRestore(); return $result; } $result = new wsResponse( 0, G::loadTranslation( 'ID_COMMAND_EXECUTED_SUCCESSFULLY' ) ); $g->sessionVarRestore(); return $result; } catch (Exception $e) { $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() ); $g->sessionVarRestore(); return $result; } }
$r->totalCount = $totalCount; $r->dataFormat = $dateFormat; echo Bootstrap::json_encode($r); break; case 'showGeneratedDocument': //require_once 'classes/model/AppDocument.php'; //require_once 'classes/model/AppDelegation.php'; $oAppDocument = new AppDocument(); $aFields = $oAppDocument->load($_POST['APP_DOC_UID']); require_once 'classes/model/OutputDocument.php'; $oOutputDocument = new OutputDocument(); $aOD = $oOutputDocument->load($aFields['DOC_UID']); $oCriteria = new Criteria('workflow'); $oCriteria->add(AppDelegationPeer::APP_UID, $aFields['APP_UID']); $oCriteria->add(AppDelegationPeer::DEL_INDEX, $aFields['DEL_INDEX']); $oDataset = AppDelegationPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aRow = $oDataset->getRow(); $oTask = new Task(); $aTask = $oTask->load($aRow['TAS_UID']); $aFields['ORIGIN'] = $aTask['TAS_TITLE']; require_once 'classes/model/Users.php'; $oUser = new Users(); $aUser = $oUser->load($aFields['USR_UID']); $aFields['CREATOR'] = $aUser['USR_FIRSTNAME'] . ' ' . $aUser['USR_LASTNAME']; $aFields['VIEW'] = G::LoadTranslation('ID_OPEN'); $aFields['FILE1'] = 'cases_ShowOutputDocument?a=' . $aFields['APP_DOC_UID'] . '&ext=doc&random=' . rand(); $aFields['FILE2'] = 'cases_ShowOutputDocument?a=' . $aFields['APP_DOC_UID'] . '&ext=pdf&random=' . rand(); $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_ViewAnyOutputDocument', '', G::array_merges($aOD, $aFields), '');
public function getSelfServiceCasesByEvaluate($userUid) { $cases = array(); //check groups assigned to SelfService task G::LoadClass('groups'); $group = new Groups(); $aGroups = $group->getActiveGroupsForAnUser($userUid); $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(); 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->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->LoadCase($row2['APP_UID']); if (isset($caseData['APP_DATA'][$tasGroupVariable])) { if (trim($caseData['APP_DATA'][$tasGroupVariable]) != '') { if (in_array(trim($caseData['APP_DATA'][$tasGroupVariable]), $aGroups)) { $cases[] = $row2['APP_UID']; } } } $rs2->next(); } $rs->next(); } } return $cases; }
$_SESSION['PROCESS'] = $oData->uid; if ($oData->ct) { $sOutput = $oProcessMap->load($oData->uid, true, $_SESSION['APPLICATION'], - 1, $_SESSION['TASK'], $oData->ct); } else { if ($oData->mode) { $sOutput = $oProcessMap->load($oData->uid); } else { if ($_SESSION['TASK'] != - 1) { $taskUid = $_SESSION['TASK']; } else { $c = new Criteria('workflow'); $c->clearSelectColumns(); $c->addSelectColumn(AppDelegationPeer::TAS_UID); $c->add(AppDelegationPeer::APP_UID, $_SESSION['APPLICATION']); $c->add(AppDelegationPeer::DEL_INDEX, $_SESSION['INDEX']); $oDataset = AppDelegationPeer::doSelectRS($c); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aData = $oDataset->getRow(); $taskUid = isset($aData['TAS_UID']) ? $aData['TAS_UID'] : - 1; } $sOutput = $oProcessMap->load($oData->uid, true, $_SESSION['APPLICATION'], $_SESSION['INDEX'], $taskUid); } } break; case 'process_Edit': $oProcessMap->editProcess($oData->pro_uid); break; case 'process_Export': include (PATH_METHODS . 'processes/processes_Export.php'); G::auditLog('ExportProcess','Export process "'.$resultProcess['PRO_TITLE'].'"');
/** * Verify if the current case is already routed. * * @param string $AppUid the uid of the application * @return array $Fields the fields */ public function alreadyRouted ($appUid, $sDelIndex) { $c = new Criteria("workflow"); $c->clearSelectColumns(); $c->addSelectColumn(AppDelegationPeer::APP_UID); $c->add(AppDelegationPeer::APP_UID, $appUid); $c->add(AppDelegationPeer::DEL_INDEX, $sDelIndex); $c->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNOTNULL); $result = AppDelegationPeer::doSelectRS($c); $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); if($result->next()) { return true; } else { return false; } }
public function getUsersParticipatedInCase($sAppUid) { $c = new Criteria('workflow'); $c->addSelectColumn(AppDelegationPeer::APP_UID); $c->addSelectColumn(AppDelegationPeer::USR_UID); $c->addSelectColumn(UsersPeer::USR_USERNAME); $c->addSelectColumn(UsersPeer::USR_EMAIL); $c->add(AppDelegationPeer::APP_UID, $sAppUid, CRITERIA::EQUAL); $c->addJoin(AppDelegationPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); $rs = AppDelegationPeer::doSelectRS($c); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rows = array(); $rs->next(); while ($row = $rs->getRow()) { $rows[$row['USR_UID']] = $row; $rs->next(); } $response['criteria'] = $c; $response['array'] = $rows; return $response; }
public function getAppDelegationInfo($filters, $fieldName) { $criteria = new Criteria(); eval('$criteria->addSelectColumn( AppDelegationPeer::' . $fieldName . ');'); foreach ($filters as $k => $v) { eval('$criteria->add( AppDelegationPeer::' . $k . ',$v, Criteria::EQUAL);'); } $dataset = AppDelegationPeer::doSelectRS($criteria); $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); $aRow = $dataset->getRow(); return isset($aRow[$fieldName]) ? $aRow[$fieldName] : NULL; }
public function getDelegatedTaskData($TAS_UID, $APP_UID, $DEL_INDEX) { require_once 'classes/model/AppDelegation.php'; require_once 'classes/model/Task.php'; $oTask = new Task(); $aFields = $oTask->load($TAS_UID); $oCriteria = new Criteria('workflow'); $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID); $oCriteria->add(AppDelegationPeer::DEL_INDEX, $DEL_INDEX); $oDataset = AppDelegationPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $taskData = $oDataset->getRow(); $iDiff = strtotime($taskData['DEL_FINISH_DATE']) - strtotime($taskData['DEL_INIT_DATE']); $aFields['INIT_DATE'] = $taskData['DEL_INIT_DATE'] != null ? $taskData['DEL_INIT_DATE'] : G::LoadTranslation('ID_CASE_NOT_YET_STARTED'); $aFields['DUE_DATE'] = $taskData['DEL_TASK_DUE_DATE'] != null ? $taskData['DEL_TASK_DUE_DATE'] : G::LoadTranslation('ID_NOT_FINISHED'); $aFields['FINISH'] = $taskData['DEL_FINISH_DATE'] != null ? $taskData['DEL_FINISH_DATE'] : G::LoadTranslation('ID_NOT_FINISHED'); $aFields['DURATION'] = $taskData['DEL_FINISH_DATE'] != null ? (int) ($iDiff / 3600) . ' ' . ((int) ($iDiff / 3600) == 1 ? G::LoadTranslation('ID_HOUR') : G::LoadTranslation('ID_HOURS')) . ' ' . (int) ($iDiff % 3600 / 60) . ' ' . ((int) ($iDiff % 3600 / 60) == 1 ? G::LoadTranslation('ID_MINUTE') : G::LoadTranslation('ID_MINUTES')) . ' ' . (int) ($iDiff % 3600 % 60) . ' ' . ((int) ($iDiff % 3600 % 60) == 1 ? G::LoadTranslation('ID_SECOND') : G::LoadTranslation('ID_SECONDS')) : G::LoadTranslation('ID_NOT_FINISHED'); return $aFields; }
public function history($idProcess, $appUid) { $oCase = new \Cases(); $aFields = $oCase->loadCase($appUid); $oProcess = new \Process(); $aProcessFieds = $oProcess->load($idProcess); $noShowTitle = 0; if (isset($aProcessFieds['PRO_SHOW_MESSAGE'])) { $noShowTitle = $aProcessFieds['PRO_SHOW_MESSAGE']; } if (isset($aFields['TITLE'])) { $aFields['APP_TITLE'] = $aFields['TITLE']; } if ($aFields['APP_PROC_CODE'] != '') { $aFields['APP_NUMBER'] = $aFields['APP_PROC_CODE']; } $aFields['CASE'] = \G::LoadTranslation('ID_CASE'); $aFields['TITLE'] = \G::LoadTranslation('ID_TITLE'); $c = \Cases::getTransferHistoryCriteria($appUid); $dataset = \AppDelegationPeer::doSelectRS($c); $dataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $dataset->next(); $history = array(); while ($row = $dataset->getRow()) { $history[] = $row; $dataset->next(); } $response = $this->parserHistory($history); return $response; }
/** * Get all Tasks of Case * Based in: processmaker/workflow/engine/classes/class.processMap.php * Method: processMap::load() * * @param string $applicationUid Unique id of Case * * return array Return an array with all Tasks of Case */ public function getTasks($applicationUid) { try { $arrayTask = array(); //Verify data $this->throwExceptionIfNotExistsCase($applicationUid, 0, $this->getFieldNameByFormatFieldName("APP_UID")); //Set variables $process = new \Process(); $application = new \Application(); $conf = new \Configurations(); $arrayApplicationData = $application->Load($applicationUid); $processUid = $arrayApplicationData["PRO_UID"]; $confEnvSetting = $conf->getFormats(); $taskUid = ""; //Get data //SQL $delimiter = \DBAdapter::getStringDelimiter(); $criteria = new \Criteria("workflow"); $criteria->addSelectColumn(\TaskPeer::TAS_UID); $criteria->addAsColumn("TAS_TITLE", "CT.CON_VALUE"); $criteria->addAsColumn("TAS_DESCRIPTION", "CD.CON_VALUE"); $criteria->addSelectColumn(\TaskPeer::TAS_START); $criteria->addSelectColumn(\TaskPeer::TAS_TYPE); $criteria->addSelectColumn(\TaskPeer::TAS_DERIVATION); $criteria->addSelectColumn(\TaskPeer::TAS_ASSIGN_TYPE); $criteria->addSelectColumn(\UsersPeer::USR_UID); $criteria->addSelectColumn(\UsersPeer::USR_USERNAME); $criteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME); $criteria->addSelectColumn(\UsersPeer::USR_LASTNAME); $criteria->addAlias("CT", \ContentPeer::TABLE_NAME); $criteria->addAlias("CD", \ContentPeer::TABLE_NAME); $arrayCondition = array(); $arrayCondition[] = array(\TaskPeer::TAS_UID, "CT.CON_ID", \Criteria::EQUAL); $arrayCondition[] = array("CT.CON_CATEGORY", $delimiter . "TAS_TITLE" . $delimiter, \Criteria::EQUAL); $arrayCondition[] = array("CT.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL); $criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); $arrayCondition = array(); $arrayCondition[] = array(\TaskPeer::TAS_UID, "CD.CON_ID", \Criteria::EQUAL); $arrayCondition[] = array("CD.CON_CATEGORY", $delimiter . "TAS_DESCRIPTION" . $delimiter, \Criteria::EQUAL); $arrayCondition[] = array("CD.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL); $criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); $criteria->addJoin(\TaskPeer::TAS_LAST_ASSIGNED, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); $criteria->add(\TaskPeer::PRO_UID, $processUid, \Criteria::EQUAL); $rsCriteria = \TaskPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); //Task if ($row["TAS_TYPE"] == "NORMAL") { if ($row["TAS_TITLE"] . "" == "") { //There is no Label in Current SYS_LANG language so try to find in English - by default $task = new \Task(); $task->setTasUid($row["TAS_UID"]); $row["TAS_TITLE"] = $task->getTasTitle(); } } else { $criteria2 = new \Criteria("workflow"); $criteria2->addSelectColumn(\SubProcessPeer::PRO_UID); $criteria2->addAsColumn("TAS_TITLE", "CT.CON_VALUE"); $criteria2->addAsColumn("TAS_DESCRIPTION", "CD.CON_VALUE"); $criteria2->addAlias("CT", \ContentPeer::TABLE_NAME); $criteria2->addAlias("CD", \ContentPeer::TABLE_NAME); $arrayCondition = array(); $arrayCondition[] = array(\SubProcessPeer::TAS_PARENT, "CT.CON_ID", \Criteria::EQUAL); $arrayCondition[] = array("CT.CON_CATEGORY", $delimiter . "TAS_TITLE" . $delimiter, \Criteria::EQUAL); $arrayCondition[] = array("CT.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL); $criteria2->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); $arrayCondition = array(); $arrayCondition[] = array(\SubProcessPeer::TAS_PARENT, "CD.CON_ID", \Criteria::EQUAL); $arrayCondition[] = array("CD.CON_CATEGORY", $delimiter . "TAS_DESCRIPTION" . $delimiter, \Criteria::EQUAL); $arrayCondition[] = array("CD.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL); $criteria2->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); $criteria2->add(\SubProcessPeer::PRO_PARENT, $processUid); $criteria2->add(\SubProcessPeer::TAS_PARENT, $row["TAS_UID"]); $rsCriteria2 = \SubProcessPeer::doSelectRS($criteria2); $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $rsCriteria2->next(); $row2 = $rsCriteria2->getRow(); if ($process->exists($row2["PRO_UID"])) { $row["TAS_TITLE"] = $row2["TAS_TITLE"]; $row["TAS_DESCRIPTION"] = $row2["TAS_DESCRIPTION"]; } } //Routes $routeType = ""; $arrayRoute = array(); $criteria2 = new \Criteria("workflow"); $criteria2->addAsColumn("ROU_NUMBER", \RoutePeer::ROU_CASE); $criteria2->addSelectColumn(\RoutePeer::ROU_TYPE); $criteria2->addSelectColumn(\RoutePeer::ROU_CONDITION); $criteria2->addAsColumn("TAS_UID", \RoutePeer::ROU_NEXT_TASK); $criteria2->add(\RoutePeer::PRO_UID, $processUid, \Criteria::EQUAL); $criteria2->add(\RoutePeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); $criteria2->addAscendingOrderByColumn("ROU_NUMBER"); $rsCriteria2 = \RoutePeer::doSelectRS($criteria2); $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria2->next()) { $row2 = $rsCriteria2->getRow(); $routeType = $row2["ROU_TYPE"]; $arrayRoute[] = array($this->getFieldNameByFormatFieldName("ROU_NUMBER") => (int) $row2["ROU_NUMBER"], $this->getFieldNameByFormatFieldName("ROU_CONDITION") => $row2["ROU_CONDITION"] . "", $this->getFieldNameByFormatFieldName("TAS_UID") => $row2["TAS_UID"]); } //Delegations $arrayAppDelegation = array(); $criteria2 = new \Criteria("workflow"); $criteria2->addSelectColumn(\AppDelegationPeer::DEL_INDEX); $criteria2->addSelectColumn(\AppDelegationPeer::DEL_INIT_DATE); $criteria2->addSelectColumn(\AppDelegationPeer::DEL_TASK_DUE_DATE); $criteria2->addSelectColumn(\AppDelegationPeer::DEL_FINISH_DATE); $criteria2->addSelectColumn(\UsersPeer::USR_UID); $criteria2->addSelectColumn(\UsersPeer::USR_USERNAME); $criteria2->addSelectColumn(\UsersPeer::USR_FIRSTNAME); $criteria2->addSelectColumn(\UsersPeer::USR_LASTNAME); $criteria2->addJoin(\AppDelegationPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); $criteria2->add(\AppDelegationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); $criteria2->add(\AppDelegationPeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); $criteria2->addAscendingOrderByColumn(\AppDelegationPeer::DEL_INDEX); $rsCriteria2 = \AppDelegationPeer::doSelectRS($criteria2); $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria2->next()) { $row2 = $rsCriteria2->getRow(); $arrayAppDelegationDate = array("DEL_INIT_DATE" => array("date" => $row2["DEL_INIT_DATE"], "dateFormated" => \G::LoadTranslation("ID_CASE_NOT_YET_STARTED")), "DEL_TASK_DUE_DATE" => array("date" => $row2["DEL_TASK_DUE_DATE"], "dateFormated" => \G::LoadTranslation("ID_CASE_NOT_YET_STARTED")), "DEL_FINISH_DATE" => array("date" => $row2["DEL_FINISH_DATE"], "dateFormated" => \G::LoadTranslation("ID_NOT_FINISHED"))); foreach ($arrayAppDelegationDate as $key => $value) { $d = $value; if (!empty($d["date"])) { $dateTime = new \DateTime($d["date"]); $arrayAppDelegationDate[$key]["dateFormated"] = $dateTime->format($confEnvSetting["dateFormat"]); } } $appDelegationDuration = \G::LoadTranslation("ID_NOT_FINISHED"); if (!empty($row2["DEL_FINISH_DATE"]) && !empty($row2["DEL_INIT_DATE"])) { $t = strtotime($row2["DEL_FINISH_DATE"]) - strtotime($row2["DEL_INIT_DATE"]); $h = $t * (1 / 60) * (1 / 60); $m = ($h - (int) $h) * (60 / 1); $s = ($m - (int) $m) * (60 / 1); $h = (int) $h; $m = (int) $m; $appDelegationDuration = $h . " " . ($h == 1 ? \G::LoadTranslation("ID_HOUR") : \G::LoadTranslation("ID_HOURS")); $appDelegationDuration = $appDelegationDuration . " " . $m . " " . ($m == 1 ? \G::LoadTranslation("ID_MINUTE") : \G::LoadTranslation("ID_MINUTES")); $appDelegationDuration = $appDelegationDuration . " " . $s . " " . ($s == 1 ? \G::LoadTranslation("ID_SECOND") : \G::LoadTranslation("ID_SECONDS")); } $arrayAppDelegation[] = array($this->getFieldNameByFormatFieldName("DEL_INDEX") => (int) $row2["DEL_INDEX"], $this->getFieldNameByFormatFieldName("DEL_INIT_DATE") => $arrayAppDelegationDate["DEL_INIT_DATE"]["dateFormated"], $this->getFieldNameByFormatFieldName("DEL_TASK_DUE_DATE") => $arrayAppDelegationDate["DEL_TASK_DUE_DATE"]["dateFormated"], $this->getFieldNameByFormatFieldName("DEL_FINISH_DATE") => $arrayAppDelegationDate["DEL_FINISH_DATE"]["dateFormated"], $this->getFieldNameByFormatFieldName("DEL_DURATION") => $appDelegationDuration, $this->getFieldNameByFormatFieldName("USR_UID") => $row2["USR_UID"], $this->getFieldNameByFormatFieldName("USR_USERNAME") => $row2["USR_USERNAME"] . "", $this->getFieldNameByFormatFieldName("USR_FIRSTNAME") => $row2["USR_FIRSTNAME"] . "", $this->getFieldNameByFormatFieldName("USR_LASTNAME") => $row2["USR_LASTNAME"] . ""); } //Status $status = ""; //$criteria2 $criteria2 = new \Criteria("workflow"); $criteria2->addAsColumn("CANT", "COUNT(" . \AppDelegationPeer::APP_UID . ")"); $criteria2->addAsColumn("FINISH", "MIN(" . \AppDelegationPeer::DEL_FINISH_DATE . ")"); $criteria2->add(\AppDelegationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); $criteria2->add(\AppDelegationPeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); $rsCriteria2 = \AppDelegationPeer::doSelectRS($criteria2); $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $rsCriteria2->next(); $row2 = $rsCriteria2->getRow(); //$criteria3 $criteria3 = new \Criteria("workflow"); $criteria3->addSelectColumn(\AppDelegationPeer::DEL_FINISH_DATE); $criteria3->add(\AppDelegationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); $criteria3->add(\AppDelegationPeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); $criteria3->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); $rsCriteria3 = \AppDelegationPeer::doSelectRS($criteria3); $rsCriteria3->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $rsCriteria3->next(); $row3 = $rsCriteria3->getRow(); if ($row3) { $row2["FINISH"] = ""; } //Status if (empty($row2["FINISH"]) && !is_null($taskUid) && $row["TAS_UID"] == $taskUid) { $status = "TASK_IN_PROGRESS"; //Red } else { if (!empty($row2["FINISH"])) { $status = "TASK_COMPLETED"; //Green } else { if ($routeType != "SEC-JOIN") { if ($row2["CANT"] != 0) { $status = "TASK_IN_PROGRESS"; //Red } else { $status = "TASK_PENDING_NOT_EXECUTED"; //Gray } } else { //$status = "TASK_PARALLEL"; //Yellow if ($row3) { $status = "TASK_IN_PROGRESS"; //Red } else { $status = "TASK_PENDING_NOT_EXECUTED"; //Gray } } } } //Set data $arrayAux = $this->getTaskDataFromRecord($row); $arrayAux[$this->getFieldNameByFormatFieldName("ROUTE")][$this->getFieldNameByFormatFieldName("TYPE")] = $routeType; $arrayAux[$this->getFieldNameByFormatFieldName("ROUTE")][$this->getFieldNameByFormatFieldName("TO")] = $arrayRoute; $arrayAux[$this->getFieldNameByFormatFieldName("DELEGATIONS")] = $arrayAppDelegation; $arrayAux[$this->getFieldNameByFormatFieldName("STATUS")] = $status; $arrayTask[] = $arrayAux; } //Return return $arrayTask; } catch (\Exception $e) { throw $e; } }
/** * Generate Data * * @return object criteria */ public function generateData($appUid, $delPreviusUsrUid) { try { G::LoadClass("case"); //Generate data $case = new Cases(); $criteria = new Criteria("workflow"); $criteria->addSelectColumn(AppDelegationPeer::APP_UID); $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); $criteria->addSelectColumn(ApplicationPeer::APP_DATA); $criteria->addSelectColumn(AppDelegationPeer::PRO_UID); $criteria->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); $criteria->addSelectColumn(TaskPeer::TAS_UID); $criteria->addSelectColumn(TaskPeer::TAS_GROUP_VARIABLE); $criteria->addJoin(AppDelegationPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); $criteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); $criteria->add(TaskPeer::TAS_ASSIGN_TYPE, "SELF_SERVICE", Criteria::EQUAL); //$criteria->add(TaskPeer::TAS_GROUP_VARIABLE, "", Criteria::NOT_EQUAL); $criteria->add(AppDelegationPeer::USR_UID, "", Criteria::EQUAL); $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", Criteria::EQUAL); $criteria->add(AppDelegationPeer::APP_UID, $appUid, Criteria::EQUAL); $rsCriteria = AppDelegationPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $applicationData = $case->unserializeData($row["APP_DATA"]); $taskGroupVariable = trim($row["TAS_GROUP_VARIABLE"], " @#"); $delPreviusUsrUid = ''; $unaUid = $this->newRow($row, $delPreviusUsrUid); //Selfservice by group if ($taskGroupVariable != "" && isset($applicationData[$taskGroupVariable]) && trim($applicationData[$taskGroupVariable]) != "") { $gprUid = trim($applicationData[$taskGroupVariable]); //Define Users by Group $gpr = new GroupUser(); $arrayUsers = $gpr->getAllGroupUser($gprUid); foreach ($arrayUsers as $urow) { $newRow["USR_UID"] = $urow["USR_UID"]; $listUnassignedGpr = new ListUnassignedGroup(); $listUnassignedGpr->newRow($unaUid, $urow["USR_UID"], "GROUP", $gprUid); } } else { //Define all users assigned to Task $task = new TaskUser(); $arrayUsers = $task->getAllUsersTask($row["TAS_UID"]); foreach ($arrayUsers as $urow) { $newRow["USR_UID"] = $urow["USR_UID"]; $listUnassignedGpr = new ListUnassignedGroup(); $listUnassignedGpr->newRow($unaUid, $urow["USR_UID"], "USER", ""); } } } } catch (Exception $e) { throw $e; } }
/** * Get all the application delegation records from database * * @param string $appUID * Application identifier * @return array delegation records */ public function getApplicationDelegationsIndex($appUID) { $delIndexes = array(); $c = new Criteria(); $c->addSelectColumn(AppDelegationPeer::DEL_INDEX); $c->add(AppDelegationPeer::APP_UID, $appUID); $rs = AppDelegationPeer::doSelectRS($c); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->next(); $row = $rs->getRow(); while (is_array($row)) { $delIndexes[] = $row['DEL_INDEX']; $rs->next(); $row = $rs->getRow(); } return $delIndexes; }
/** * Start/Continue case by Timer-Event * * @param string $datetime Datetime (yyyy-mm-dd hh:ii:ss) * @param bool $frontEnd Flag to represent the terminal front-end * * return void */ public function startContinueCaseByTimerEvent($datetime, $frontEnd = false) { try { \G::LoadClass("wsBase"); //Set variables $ws = new \wsBase(); $case = new \Cases(); $common = new \ProcessMaker\Util\Common(); $common->setFrontEnd($frontEnd); list($year, $month, $day, $hour, $minute) = $this->getYearMonthDayHourMinuteSecondByDatetime($datetime); $date = "{$year}-{$month}-{$day}"; $dateIni = "{$year}-{$month}-{$day} 00:00:00"; $dateEnd = "{$year}-{$month}-{$day} 23:59:59"; //Start Timer-Event (start new case) /////////////////////////////////////////////////////////////////////// $common->frontEndShow("START"); $this->log("START-NEW-CASES", "Date \"{$datetime}\": Start new cases"); //Query $criteria = $this->getTimerEventCriteria(); $criteria->addSelectColumn(\BpmnEventPeer::EVN_NAME); $criteria->addSelectColumn(\ElementTaskRelationPeer::TAS_UID); $arrayCondition = array(); $arrayCondition[] = array(\TimerEventPeer::PRJ_UID, \ProcessPeer::PRO_UID, \Criteria::EQUAL); $criteria->addJoinMC($arrayCondition, \Criteria::INNER_JOIN); $criteria->add(\ProcessPeer::PRO_STATUS, "ACTIVE", \Criteria::EQUAL); $arrayCondition = array(); $arrayCondition[] = array(\TimerEventPeer::PRJ_UID, \ElementTaskRelationPeer::PRJ_UID, \Criteria::EQUAL); $arrayCondition[] = array(\TimerEventPeer::EVN_UID, \ElementTaskRelationPeer::ELEMENT_UID, \Criteria::EQUAL); $criteria->addJoinMC($arrayCondition, \Criteria::INNER_JOIN); $criteria->add(\ElementTaskRelationPeer::ELEMENT_TYPE, "bpmnEvent", \Criteria::EQUAL); $arrayCondition = array(); $arrayCondition[] = array(\ElementTaskRelationPeer::PRJ_UID, \TaskPeer::PRO_UID, \Criteria::EQUAL); $arrayCondition[] = array(\ElementTaskRelationPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::EQUAL); $criteria->addJoinMC($arrayCondition, \Criteria::INNER_JOIN); $criteria->add(\TaskPeer::TAS_TYPE, "START-TIMER-EVENT", \Criteria::EQUAL); $arrayCondition = array(); $arrayCondition[] = array(\TimerEventPeer::PRJ_UID, \BpmnEventPeer::PRJ_UID, \Criteria::EQUAL); $arrayCondition[] = array(\TimerEventPeer::EVN_UID, \BpmnEventPeer::EVN_UID, \Criteria::EQUAL); $criteria->addJoinMC($arrayCondition, \Criteria::INNER_JOIN); $criteria->add(\BpmnEventPeer::EVN_TYPE, "START", \Criteria::EQUAL); $criteria->add(\BpmnEventPeer::EVN_MARKER, "TIMER", \Criteria::EQUAL); $criteria->add(\TimerEventPeer::TMREVN_OPTION, array("HOURLY", "DAILY", "MONTHLY", "EVERY", "ONE-DATE-TIME"), \Criteria::IN); $criteria->add(\TimerEventPeer::TMREVN_STATUS, "ACTIVE", \Criteria::EQUAL); $criteria->add($criteria->getNewCriterion(\TimerEventPeer::TMREVN_NEXT_RUN_DATE, $dateIni, \Criteria::GREATER_EQUAL)->addAnd($criteria->getNewCriterion(\TimerEventPeer::TMREVN_NEXT_RUN_DATE, $dateEnd, \Criteria::LESS_EQUAL))->addOr($criteria->getNewCriterion(\TimerEventPeer::TMREVN_NEXT_RUN_DATE, $dateIni, \Criteria::LESS_THAN))); $criteria->add($criteria->getNewCriterion(\TimerEventPeer::TMREVN_END_DATE, $date, \Criteria::GREATER_EQUAL)->addOr($criteria->getNewCriterion(\TimerEventPeer::TMREVN_END_DATE, null, \Criteria::EQUAL))); $rsCriteria = \TimerEventPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $flagRecord = false; while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $row["TMREVN_CONFIGURATION_DATA"] = unserialize($row["TMREVN_CONFIGURATION_DATA"]); //Set variables $arrayTimerEventData = $row; $bpmnEventName = $row["EVN_NAME"]; $taskUid = $row["TAS_UID"]; //Create the new case $timerEventNextRunDate = $arrayTimerEventData["TMREVN_NEXT_RUN_DATE"]; $timerEventNextRunDateNew = ""; $flagCase = false; if (strtotime($timerEventNextRunDate) < strtotime($dateIni)) { $timerEventNextRunDateNew = $this->getNextRunDateByDataAndDatetime($arrayTimerEventData, $datetime); //Generate new date for old TMREVN_NEXT_RUN_DATE $flagCase = true; //Create the old case } else { list(, , , $hourCase, $minuteCase) = $this->getYearMonthDayHourMinuteSecondByDatetime($timerEventNextRunDate); if ((int) ($hour . $minute) <= (int) ($hourCase . $minuteCase)) { $flagCase = $hourCase == $hour && $minuteCase == $minute; } else { $timerEventNextRunDateNew = $this->getNextRunDateByDataAndDatetime($arrayTimerEventData, $datetime); //Generate new date for old TMREVN_NEXT_RUN_DATE $flagCase = true; //Create the old case } } if ($flagCase) { if ($flagRecord) { $common->frontEndShow("TEXT", ""); } if ($bpmnEventName != "") { $common->frontEndShow("TEXT", "> Name Timer-Event: {$bpmnEventName}"); } $common->frontEndShow("TEXT", "> Creating the new case..."); //Start new case $result = $ws->newCase($arrayTimerEventData["PRJ_UID"], "", $taskUid, array()); $arrayResult = json_decode(json_encode($result), true); if ($arrayResult["status_code"] == 0) { $applicationUid = $arrayResult["caseId"]; $applicationNumber = $arrayResult["caseNumber"]; $common->frontEndShow("TEXT", " - OK case #{$applicationNumber} was created"); $common->frontEndShow("TEXT", "> Routing the case #{$applicationNumber}..."); $this->log("CREATED-NEW-CASE", "Case #{$applicationNumber} created, APP_UID: {$applicationUid}, PRO_UID: " . $arrayTimerEventData["PRJ_UID"]); //Derivate new case $result = $ws->derivateCase("", $applicationUid, 1); $arrayResult = json_decode(json_encode($result), true); if ($arrayResult["status_code"] == 0) { $common->frontEndShow("TEXT", " - OK"); $this->log("ROUTED-NEW-CASE", "Case #{$applicationNumber} routed, APP_UID: {$applicationUid}, PRO_UID: " . $arrayTimerEventData["PRJ_UID"]); } else { $common->frontEndShow("TEXT", " - Failed: " . $arrayResult["message"]); $this->log("ROUTED-NEW-CASE", "Failed: " . $arrayResult["message"] . ", Case: #{$applicationNumber}, APP_UID: {$applicationUid}, PRO_UID: " . $arrayTimerEventData["PRJ_UID"]); } } else { $common->frontEndShow("TEXT", " - Failed: " . $arrayResult["message"]); $this->log("CREATED-NEW-CASE", "Failed: " . $arrayResult["message"] . ", PRO_UID: " . $arrayTimerEventData["PRJ_UID"]); } //Update Timer-Event $arrayData = array(); switch ($arrayTimerEventData["TMREVN_OPTION"]) { case "HOURLY": case "DAILY": case "MONTHLY": case "EVERY": if ($timerEventNextRunDateNew == "") { $timerEventNextRunDateNew = $this->getNextRunDateByDataAndDatetime($arrayTimerEventData, $timerEventNextRunDate, false); } if ($arrayTimerEventData["TMREVN_OPTION"] != "EVERY" && $arrayTimerEventData["TMREVN_END_DATE"] . "" != "" && strtotime($timerEventNextRunDateNew) > strtotime($arrayTimerEventData["TMREVN_END_DATE"] . " 23:59:59")) { $arrayData["TMREVN_STATUS"] = "PROCESSED"; } else { $arrayData["TMREVN_NEXT_RUN_DATE"] = $timerEventNextRunDateNew; } break; case "ONE-DATE-TIME": $arrayData["TMREVN_STATUS"] = "PROCESSED"; break; } $arrayData["TMREVN_LAST_RUN_DATE"] = $timerEventNextRunDate; $arrayData["TMREVN_LAST_EXECUTION_DATE"] = date("Y-m-d H:i:s"); $result = $this->singleUpdate($arrayTimerEventData["TMREVN_UID"], $arrayData); $flagRecord = true; } } if (!$flagRecord) { $common->frontEndShow("TEXT", "Not exists any record to start a new case, on date \"{$datetime}\""); $this->log("NO-RECORDS", "Not exists any record to start a new case"); } $common->frontEndShow("END"); $this->log("END-NEW-CASES", "Date \"{$datetime}\": End new cases"); //Intermediate Catch Timer-Event (continue the case) /////////////////////////////////////////////////////// $this->log("START-CONTINUE-CASES", "Date \"{$datetime}\": Start continue the cases"); //Query $criteriaMain = $this->getTimerEventCriteria(); $criteriaMain->addSelectColumn(\AppDelegationPeer::APP_UID); $criteriaMain->addSelectColumn(\AppDelegationPeer::DEL_INDEX); $criteriaMain->addSelectColumn(\AppDelegationPeer::DEL_DELEGATE_DATE); $criteriaMain->addSelectColumn(\BpmnEventPeer::EVN_NAME); $arrayCondition = array(); $arrayCondition[] = array(\AppDelegationPeer::PRO_UID, \ProcessPeer::PRO_UID, \Criteria::EQUAL); $criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN); $criteriaMain->add(\ProcessPeer::PRO_STATUS, "ACTIVE", \Criteria::EQUAL); $arrayCondition = array(); $arrayCondition[] = array(\AppDelegationPeer::APP_UID, \ApplicationPeer::APP_UID, \Criteria::EQUAL); $criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN); $criteriaMain->add(\ApplicationPeer::APP_STATUS, "DRAFT", \Criteria::NOT_EQUAL); $arrayCondition = array(); $arrayCondition[] = array(\AppDelegationPeer::PRO_UID, \TaskPeer::PRO_UID, \Criteria::EQUAL); $arrayCondition[] = array(\AppDelegationPeer::TAS_UID, \TaskPeer::TAS_UID, \Criteria::EQUAL); $criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN); $criteriaMain->add(\TaskPeer::TAS_TYPE, "INTERMEDIATE-CATCH-TIMER-EVENT", \Criteria::EQUAL); $arrayCondition = array(); $arrayCondition[] = array(\TaskPeer::PRO_UID, \ElementTaskRelationPeer::PRJ_UID, \Criteria::EQUAL); $arrayCondition[] = array(\TaskPeer::TAS_UID, \ElementTaskRelationPeer::TAS_UID, \Criteria::EQUAL); $criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN); $criteriaMain->add(\ElementTaskRelationPeer::ELEMENT_TYPE, "bpmnEvent", \Criteria::EQUAL); $arrayCondition = array(); $arrayCondition[] = array(\ElementTaskRelationPeer::PRJ_UID, \TimerEventPeer::PRJ_UID, \Criteria::EQUAL); $arrayCondition[] = array(\ElementTaskRelationPeer::ELEMENT_UID, \TimerEventPeer::EVN_UID, \Criteria::EQUAL); $criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN); $arrayCondition = array(); $arrayCondition[] = array(\TimerEventPeer::PRJ_UID, \BpmnEventPeer::PRJ_UID, \Criteria::EQUAL); $arrayCondition[] = array(\TimerEventPeer::EVN_UID, \BpmnEventPeer::EVN_UID, \Criteria::EQUAL); $criteriaMain->addJoinMC($arrayCondition, \Criteria::INNER_JOIN); $criteriaMain->add(\BpmnEventPeer::EVN_TYPE, "INTERMEDIATE", \Criteria::EQUAL); $criteriaMain->add(\BpmnEventPeer::EVN_MARKER, "TIMER", \Criteria::EQUAL); $criteriaMain->add(\TimerEventPeer::TMREVN_OPTION, array("WAIT-FOR", "WAIT-UNTIL-SPECIFIED-DATE-TIME"), \Criteria::IN); $criteriaMain->add(\TimerEventPeer::TMREVN_STATUS, "ACTIVE", \Criteria::EQUAL); $criteriaMain->add(\AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", \Criteria::EQUAL); $criteriaMain->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); //Number records total $criteriaCount = clone $criteriaMain; $criteriaCount->clearSelectColumns(); $criteriaCount->addSelectColumn("COUNT(" . \AppDelegationPeer::APP_UID . ") AS NUM_REC"); $rsCriteriaCount = \AppDelegationPeer::doSelectRS($criteriaCount); $rsCriteriaCount->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $result = $rsCriteriaCount->next(); $row = $rsCriteriaCount->getRow(); $numRecTotal = $row["NUM_REC"]; //Query $total = $numRecTotal; $counter = 0; $start = 0; $limit = 1000; $flagRecord = false; do { $flagNextRecord = false; $criteria = clone $criteriaMain; $criteria->setOffset($start); $criteria->setLimit($limit); $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { if ($counter + 1 > $total) { $flagNextRecord = false; break; } $row = $rsCriteria->getRow(); $row["TMREVN_CONFIGURATION_DATA"] = unserialize($row["TMREVN_CONFIGURATION_DATA"]); //Set variables $arrayTimerEventData = $row; $arrayApplicationData = $case->loadCase($row["APP_UID"]); $applicationUid = $row["APP_UID"]; $applicationNumber = $arrayApplicationData["APP_NUMBER"]; $delIndex = $row["DEL_INDEX"]; $delDelegateDate = $row["DEL_DELEGATE_DATE"]; $bpmnEventName = $row["EVN_NAME"]; //Continue the case $continueCaseDate = $delDelegateDate; switch ($arrayTimerEventData["TMREVN_OPTION"]) { case "WAIT-FOR": if ($arrayTimerEventData["TMREVN_DAY"] . "" != "") { $continueCaseDate = date("Y-m-d H:i:s", strtotime("{$continueCaseDate} +" . (int) $arrayTimerEventData["TMREVN_DAY"] . " days")); } if ($arrayTimerEventData["TMREVN_HOUR"] . "" != "") { $continueCaseDate = date("Y-m-d H:i:s", strtotime("{$continueCaseDate} +" . (int) $arrayTimerEventData["TMREVN_HOUR"] . " hours")); } if ($arrayTimerEventData["TMREVN_MINUTE"] . "" != "") { $continueCaseDate = date("Y-m-d H:i:s", strtotime("{$continueCaseDate} +" . (int) $arrayTimerEventData["TMREVN_MINUTE"] . " minutes")); } break; case "WAIT-UNTIL-SPECIFIED-DATE-TIME": $continueCaseDate = \G::replaceDataField($arrayTimerEventData["TMREVN_CONFIGURATION_DATA"], $arrayApplicationData["APP_DATA"]); break; } $arrayContinueCaseDateData = $this->getYearMonthDayHourMinuteSecondByDatetime($continueCaseDate); if (!empty($arrayContinueCaseDateData)) { $flagCase = false; if (strtotime($continueCaseDate) < strtotime($dateIni)) { $flagCase = true; //Continue the old case } else { $yearCase = $arrayContinueCaseDateData[0]; $monthCase = $arrayContinueCaseDateData[1]; $dayCase = $arrayContinueCaseDateData[2]; $hourCase = $arrayContinueCaseDateData[3]; $minuteCase = $arrayContinueCaseDateData[4]; if ("{$yearCase}-{$monthCase}-{$dayCase}" == "{$year}-{$month}-{$day}") { if ((int) ($hour . $minute) <= (int) ($hourCase . $minuteCase)) { $flagCase = $hourCase == $hour && $minuteCase == $minute; } else { $flagCase = true; //Continue the old case } } } if ($flagCase) { if ($flagRecord) { $common->frontEndShow("TEXT", ""); } if ($bpmnEventName != "") { $common->frontEndShow("TEXT", "> Name Timer-Event: {$bpmnEventName}"); } $common->frontEndShow("TEXT", "> Continue the case #{$applicationNumber}"); $common->frontEndShow("TEXT", "> Routing the case #{$applicationNumber}..."); //Continue the case //Derivate case $result = $ws->derivateCase("", $applicationUid, $delIndex); $arrayResult = json_decode(json_encode($result), true); if ($arrayResult["status_code"] == 0) { $common->frontEndShow("TEXT", " - OK"); $this->log("CONTINUED-CASE", "Case #{$applicationNumber} continued, APP_UID: {$applicationUid}, PRO_UID: " . $arrayTimerEventData["PRJ_UID"]); } else { $common->frontEndShow("TEXT", " - Failed: " . $arrayResult["message"]); $this->log("CONTINUED-CASE", "Failed: " . $arrayResult["message"] . ", Case: #{$applicationNumber}, APP_UID: {$applicationUid}, PRO_UID: " . $arrayTimerEventData["PRJ_UID"]); } $flagRecord = true; } } else { $this->log("INVALID-CONTINUE-DATE", "Continue date: {$continueCaseDate}, Case: #{$applicationNumber}, APP_UID: {$applicationUid}, PRO_UID: " . $arrayTimerEventData["PRJ_UID"]); } $counter++; $flagNextRecord = true; } $start = $start + $limit; } while ($flagNextRecord); if (!$flagRecord) { $common->frontEndShow("TEXT", "Not exists any record to continue a case, on date \"{$datetime}\""); $this->log("NO-RECORDS", "Not exists any record to continue a case"); } $common->frontEndShow("END"); $this->log("END-CONTINUE-CASES", "Date \"{$datetime}\": End continue the cases"); } catch (\Exception $e) { throw $e; } }
public function load($sProcessUID, $bView = false, $sApplicationUID = '', $iDelegation = 0, $sTask = '', $bCT = false) { try { $oProcess = new Process(); $aRow = $oProcess->load($sProcessUID); $oPM->title->label = strip_tags($aRow['PRO_TITLE']); $oPM->title->position->x = $aRow['PRO_TITLE_X']; $oPM->title->position->y = $aRow['PRO_TITLE_Y']; $oPM->task = array(); $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(TaskPeer::PRO_UID); $oCriteria->addSelectColumn(TaskPeer::TAS_UID); $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); $oCriteria->addSelectColumn(TaskPeer::TAS_START); $oCriteria->addSelectColumn(TaskPeer::TAS_POSX); $oCriteria->addSelectColumn(TaskPeer::TAS_POSY); $oCriteria->addSelectColumn(TaskPeer::TAS_COLOR); $oCriteria->addSelectColumn(TaskPeer::TAS_TYPE); $aConditions = array(); $aConditions[] = array(0 => TaskPeer::TAS_UID, 1 => ContentPeer::CON_ID); $aConditions[] = array(0 => ContentPeer::CON_CATEGORY, 1 => DBAdapter::getStringDelimiter() . 'TAS_TITLE' . DBAdapter::getStringDelimiter()); $aConditions[] = array(0 => ContentPeer::CON_LANG, 1 => DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter()); $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->add(TaskPeer::PRO_UID, $sProcessUID); $oDataset = TaskPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow1 = $oDataset->getRow()) { $oTask = null; $oTask->uid = $aRow1['TAS_UID']; $oTask->task_type = $aRow1['TAS_TYPE']; if ($aRow1['TAS_TYPE'] == 'NORMAL') { if ($aRow1['CON_VALUE'] == "") { //There is no Label in Current SYS_LANG language so try to find in English - by default $oTask1 = new Task(); $aFields1 = $oTask1->load($oTask->uid); $aRow1['CON_VALUE'] = $oTask1->getTasTitle(); } $oTask->label = strip_tags($aRow1['CON_VALUE']); } else { $oCriteria = new Criteria('workflow'); $del = DBAdapter::getStringDelimiter(); $oCriteria->add(SubProcessPeer::PRO_PARENT, $aRow1['PRO_UID']); $oCriteria->add(SubProcessPeer::TAS_PARENT, $aRow1['TAS_UID']); $oCriteria->addAsColumn('TAS_TITLE', 'C1.CON_VALUE'); $oCriteria->addAlias("C1", 'CONTENT'); $tasTitleConds = array(); $tasTitleConds[] = array(SubProcessPeer::TAS_PARENT, 'C1.CON_ID'); $tasTitleConds[] = array('C1.CON_CATEGORY', $del . 'TAS_TITLE' . $del); $tasTitleConds[] = array('C1.CON_LANG', $del . SYS_LANG . $del); $oCriteria->addJoinMC($tasTitleConds, Criteria::LEFT_JOIN); $oDatasetX = SubProcessPeer::doSelectRS($oCriteria); $oDatasetX->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDatasetX->next(); $aRowx = $oDatasetX->getRow(); if ($oProcess->exists($aRowx['PRO_UID'])) { //$aRowy = $oProcess->load($aRowx['PRO_UID']); //$oTask->label = $aRowy['PRO_TITLE']; $oTask->label = $aRowx['TAS_TITLE']; } else { $oTask->label = strip_tags($aRow1['CON_VALUE']); } } $oTask->taskINI = strtolower($aRow1['TAS_START']) == 'true' ? true : false; $oTask->position->x = (int) $aRow1['TAS_POSX']; $oTask->position->y = (int) $aRow1['TAS_POSY']; $oTask->derivation = null; $oTask->derivation->to = array(); $oCriteria = new Criteria('workflow'); $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); $oCriteria->add(RoutePeer::TAS_UID, $aRow1['TAS_UID']); $oDataset2 = RoutePeer::doSelectRS($oCriteria); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); while ($aRow2 = $oDataset2->getRow()) { switch ($aRow2['ROU_TYPE']) { case 'SEQUENTIAL': $aRow2['ROU_TYPE'] = 0; break; case 'SELECT': $aRow2['ROU_TYPE'] = 1; break; case 'EVALUATE': $aRow2['ROU_TYPE'] = 2; break; case 'PARALLEL': $aRow2['ROU_TYPE'] = 3; break; case 'PARALLEL-BY-EVALUATION': $aRow2['ROU_TYPE'] = 4; break; case 'SEC-JOIN': $aRow2['ROU_TYPE'] = 5; break; case 'DISCRIMINATOR': $aRow2['ROU_TYPE'] = 8; break; } $oTo = null; $oTo->task = $aRow2['ROU_NEXT_TASK']; $oTo->condition = $aRow2['ROU_CONDITION']; $oTo->executant = $aRow2['ROU_TO_LAST_USER']; $oTo->optional = $aRow2['ROU_OPTIONAL']; $oTask->derivation->type = $aRow2['ROU_TYPE']; $oTask->derivation->to[] = $oTo; $oDataset2->next(); } if ($bCT) { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn('COUNT(*) AS CANT'); $oCriteria->addSelectColumn('MIN(DEL_FINISH_DATE) AS FINISH'); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1['TAS_UID']); $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn('DEL_FINISH_DATE'); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1['TAS_UID']); $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null); $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow3 = $oDataset2->getRow(); if ($aRow3) { $aRow2['FINISH'] = ''; } /* if (($aRow2['FINISH'] == null) && ($aRow1['TAS_UID'] == $sTask)) { $oTask->color = '#FF0000'; } else { if ($aRow2['CANT'] != 0) { if ($aRow2['FINISH'] == null) { //$oTask->color = '#FF9900'; $oTask->color = '#FF0000'; } else { $oTask->color = '#006633'; } } else { $oTask->color = "#939598"; } } */ if (empty($aRow2["FINISH"]) && $aRow1["TAS_UID"] == $sTask) { $oTask->color = "#FF0000"; //Red } else { if (!empty($aRow2["FINISH"])) { $oTask->color = "#006633"; //Green } else { if ($aRow2["CANT"] == 0 || $oTask->derivation->type != 5) { $oTask->color = "#939598"; //Gray } else { //$oTask->color = "#FF9900"; //Yellow $oTask->color = "#FF0000"; //Red } } } } else { if ($bView && $sApplicationUID != '' && $iDelegation > 0 && $sTask != '') { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn('COUNT(*) AS CANT'); $oCriteria->addSelectColumn('MIN(DEL_FINISH_DATE) AS FINISH'); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1['TAS_UID']); $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn('DEL_FINISH_DATE'); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria->add(AppDelegationPeer::TAS_UID, $aRow1['TAS_UID']); $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null); $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria); $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow3 = $oDataset2->getRow(); if ($aRow3) { $aRow2['FINISH'] = ''; } /* if (($aRow2['FINISH'] == null) && ($aRow1['TAS_UID'] == $sTask)) { $oTask->color = '#FF0000'; } else { if ($aRow2['CANT'] != 0) { if ($aRow2['FINISH'] == null) { $oTask->color = '#FF9900'; } else { $oTask->color = '#006633'; } } else { $oTask->color = '#939598'; } } */ if (empty($aRow2["FINISH"]) && $aRow1["TAS_UID"] == $sTask) { $oTask->color = "#FF0000"; //Red } else { if (!empty($aRow2["FINISH"])) { $oTask->color = "#006633"; //Green } else { if ($aRow2["CANT"] == 0 || $oTask->derivation->type != 5) { $oTask->color = "#939598"; //Gray } else { $oTask->color = "#FF9900"; //Yellow } } } } } $msg = array(); G::LoadClass('derivation'); $Derivation = new Derivation(); $users = $Derivation->getAllUsersFromAnyTask($aRow1['TAS_UID']); $sw_error = false; if (count($users) == 0) { $sw_error = true; $msg[] = G::LoadTranslation('ID_NO_USERS'); } G::LoadClass('ArrayPeer'); $stepsCriteria = $this->getStepsCriteria($aRow1['TAS_UID']); $oDatasetSteps = ArrayBasePeer::doSelectRS($stepsCriteria); $oDatasetSteps->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDatasetSteps->next(); $countDynaform = 0; $countOutput = 0; $countInput = 0; $countExternal = 0; while ($aRowSteps = $oDatasetSteps->getRow()) { switch ($aRowSteps['STEP_TYPE_OBJ']) { case 'DYNAFORM': $countDynaform++; break; case 'INPUT_DOCUMENT': $countInput++; break; case 'OUTPUT_DOCUMENT': $countOutput++; break; case 'EXTERNAL': $countExternal++; break; } $oDatasetSteps->next(); } $totalSteps = $countDynaform + $countInput + $countOutput + $countExternal; if ($totalSteps == 0) { $sw_error = true; $msg[] = G::LoadTranslation('ID_TASK_NO_STEPS'); } if ($sw_error) { $oTask->statusIcons[] = array('label' => implode(",", $msg), 'icon' => '/images/alert.gif', 'message' => implode(", ", $msg), 'url' => ''); } $oPM->task[] = $oTask; $oDataset->next(); } $oPM->executant[] = G::LoadTranslation('ID_RULES_AND_USER_GROUPS'); $oPM->executant[] = G::LoadTranslation('ID_ADD_USER_OF_TASK'); $oPM->tasExtra[0]->label = '-- ' . G::LoadTranslation('ID_END_OF_PROCESS') . ' --'; $oPM->tasExtra[0]->uid = 'end'; $oPM->tasExtra[1]->label = '-- ' . G::LoadTranslation('ID_TAREA_COLGANTE') . ' --'; $oPM->tasExtra[1]->uid = 'leaf'; $oPM->guide = array(); $oPM->text = array(); $oPM->statusIcons = array(); $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(SwimlanesElementsPeer::SWI_UID); // $oCriteria->addSelectColumn ( ContentPeer::CON_VALUE ); $oCriteria->addAsColumn("CON_VALUE", "CASE WHEN CONTENT.CON_VALUE IS NULL THEN (SELECT DISTINCT MAX(A.CON_VALUE) FROM CONTENT A WHERE SWIMLANES_ELEMENTS.SWI_UID=A.CON_ID ) ELSE CONTENT.CON_VALUE END "); $oCriteria->addSelectColumn(SwimlanesElementsPeer::SWI_TYPE); $oCriteria->addSelectColumn(SwimlanesElementsPeer::SWI_X); $oCriteria->addSelectColumn(SwimlanesElementsPeer::SWI_Y); $aConditions = array(); $aConditions[] = array(0 => SwimlanesElementsPeer::SWI_UID, 1 => ContentPeer::CON_ID); $aConditions[] = array(0 => ContentPeer::CON_CATEGORY, 1 => DBAdapter::getStringDelimiter() . 'SWI_TEXT' . DBAdapter::getStringDelimiter()); $aConditions[] = array(0 => ContentPeer::CON_LANG, 1 => DBAdapter::getStringDelimiter() . SYS_LANG . DBAdapter::getStringDelimiter()); $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->add(SwimlanesElementsPeer::PRO_UID, $sProcessUID); $oDataset = SwimlanesElementsPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { switch (strtolower($aRow['SWI_TYPE'])) { case 'line': $oGuide = null; $oGuide->uid = $aRow['SWI_UID']; $oGuide->position = $aRow['SWI_X'] > 0 ? $aRow['SWI_X'] : $aRow['SWI_Y']; $oGuide->direction = $aRow['SWI_X'] > 0 ? 'vertical' : 'horizontal'; $oPM->guide[] = $oGuide; break; case 'text': $oText = null; $oText->uid = $aRow['SWI_UID']; $oText->label = strip_tags($aRow['CON_VALUE'] != '' ? str_replace(chr(92), '\', str_replace('<', '<', $aRow['CON_VALUE'])) : '-'); // $oText->label = '->' . $aRow ['CON_VALUE'] . '<-' ; $oText->position->x = $aRow['SWI_X']; $oText->position->y = $aRow['SWI_Y']; $oPM->text[] = $oText; break; } $oDataset->next(); } $oPM->derivation = array('Sequential', 'Evaluate (manual)', 'Evaluate (auto)', 'Parallel (fork)', 'Parallel by evaluation (fork)', 'Parallel (sequential join)', 'Parallel (sequential main join)'); //Load extended task properties from plugin. By JHL Jan 18, 2011 $oPluginRegistry =& PMPluginRegistry::getSingleton(); $activePluginsForTaskProperties = $oPluginRegistry->getTaskExtendedProperties(); $oPM->taskOptions = array(); foreach ($activePluginsForTaskProperties as $key => $taskPropertiesInfo) { $taskOption['title'] = $taskPropertiesInfo->sName; $taskOption['id'] = $taskPropertiesInfo->sNamespace . "--" . $taskPropertiesInfo->sName; $oPM->taskOptions[] = $taskOption; } //$oJSON = new Services_JSON(); return Bootstrap::json_encode($oPM); //$oJSON->encode( $oPM ); } catch (Exception $oError) { throw $oError; } }
/** * Method to do selects. * * @param Criteria $criteria The Criteria object used to build the SELECT statement. * @param Connection $con * @return array Array of selected Objects * @throws PropelException Any exceptions caught during processing will be * rethrown wrapped into a PropelException. */ public static function doSelect(Criteria $criteria, $con = null) { return AppDelegationPeer::populateObjects(AppDelegationPeer::doSelectRS($criteria, $con)); }
public function getLastDeleration($APP_UID) { $c = new Criteria('workflow'); $c->addSelectColumn(AppDelegationPeer::APP_UID); $c->addSelectColumn(AppDelegationPeer::DEL_INDEX); $c->addSelectColumn(AppDelegationPeer::DEL_DELEGATE_DATE); $c->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); $c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); $c->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); $c->addSelectColumn(AppDelegationPeer::DEL_DURATION); $c->addSelectColumn(AppDelegationPeer::DEL_QUEUE_DURATION); $c->addSelectColumn(AppDelegationPeer::DEL_DELAY_DURATION); $c->addSelectColumn(AppDelegationPeer::DEL_STARTED); $c->addSelectColumn(AppDelegationPeer::DEL_FINISHED); $c->addSelectColumn(AppDelegationPeer::DEL_DELAYED); $c->addSelectColumn(AppDelegationPeer::USR_UID); $c->add(AppDelegationPeer::APP_UID, $APP_UID); $c->addDescendingOrderByColumn(AppDelegationPeer::DEL_INDEX); $rs = AppDelegationPeer::doSelectRS($c); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->next(); return $rs->getRow(); }
/** * Catch Message-Events for the Cases * * @param bool $frontEnd Flag to represent progress bar * * @return void */ public function catchMessageEvent($frontEnd = false) { try { \G::LoadClass("wsBase"); //Set variables $ws = new \wsBase(); $case = new \Cases(); $common = new \ProcessMaker\Util\Common(); $common->setFrontEnd($frontEnd); //Get data $totalMessageEvent = 0; $counterStartMessageEvent = 0; $counterIntermediateCatchMessageEvent = 0; $counter = 0; $flagFirstTime = false; $common->frontEndShow("START"); do { $flagNextRecords = false; $arrayMessageApplicationUnread = $this->getMessageApplications(array("messageApplicationStatus" => "UNREAD"), null, null, 0, 1000); if (!$flagFirstTime) { $totalMessageEvent = $arrayMessageApplicationUnread["total"]; $flagFirstTime = true; } foreach ($arrayMessageApplicationUnread["data"] as $value) { if ($counter + 1 > $totalMessageEvent) { $flagNextRecords = false; break; } $arrayMessageApplicationData = $value; $processUid = $arrayMessageApplicationData["PRJ_UID"]; $taskUid = $arrayMessageApplicationData["TAS_UID"]; $messageApplicationUid = $arrayMessageApplicationData["MSGAPP_UID"]; $messageApplicationCorrelation = $arrayMessageApplicationData["MSGAPP_CORRELATION"]; $messageEventDefinitionUserUid = $arrayMessageApplicationData["MSGED_USR_UID"]; $messageEventDefinitionCorrelation = $arrayMessageApplicationData["MSGED_CORRELATION"]; $arrayVariable = $this->mergeVariables($arrayMessageApplicationData["MSGED_VARIABLES"], $arrayMessageApplicationData["MSGAPP_VARIABLES"]); $flagCatched = false; switch ($arrayMessageApplicationData["EVN_TYPE"]) { case "START": if ($messageEventDefinitionCorrelation == $messageApplicationCorrelation && $messageEventDefinitionUserUid != "") { //Start and derivate new Case $result = $ws->newCase($processUid, $messageEventDefinitionUserUid, $taskUid, $arrayVariable); $arrayResult = json_decode(json_encode($result), true); if ($arrayResult["status_code"] == 0) { $applicationUid = $arrayResult["caseId"]; $result = $ws->derivateCase($messageEventDefinitionUserUid, $applicationUid, 1); $flagCatched = true; //Counter $counterStartMessageEvent++; } } break; case "INTERMEDIATE": $criteria = new \Criteria("workflow"); $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); $criteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); $criteria->addSelectColumn(\AppDelegationPeer::USR_UID); $criteria->add(\AppDelegationPeer::PRO_UID, $processUid, \Criteria::EQUAL); $criteria->add(\AppDelegationPeer::TAS_UID, $taskUid, \Criteria::EQUAL); $criteria->add(\AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", \Criteria::EQUAL); $criteria->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $applicationUid = $row["APP_UID"]; $delIndex = $row["DEL_INDEX"]; $userUid = $row["USR_UID"]; $arrayApplicationData = $case->loadCase($applicationUid); if (\G::replaceDataField($messageEventDefinitionCorrelation, $arrayApplicationData["APP_DATA"]) == $messageApplicationCorrelation) { //"Unpause" and derivate Case $arrayApplicationData["APP_DATA"] = array_merge($arrayApplicationData["APP_DATA"], $arrayVariable); $arrayResult = $case->updateCase($applicationUid, $arrayApplicationData); $result = $ws->derivateCase($userUid, $applicationUid, $delIndex); $flagCatched = true; } } //Counter if ($flagCatched) { $counterIntermediateCatchMessageEvent++; } break; } //Message-Application catch if ($flagCatched) { $result = $this->update($messageApplicationUid, array("MSGAPP_STATUS" => "READ")); } $counter++; //Progress bar $common->frontEndShow("BAR", "Message-Events (unread): " . $counter . "/" . $totalMessageEvent . " " . $common->progressBar($totalMessageEvent, $counter)); $flagNextRecords = true; } } while ($flagNextRecords); $common->frontEndShow("TEXT", "Total Message-Events unread: " . $totalMessageEvent); $common->frontEndShow("TEXT", "Total cases started: " . $counterStartMessageEvent); $common->frontEndShow("TEXT", "Total cases continued: " . $counterIntermediateCatchMessageEvent); $common->frontEndShow("TEXT", "Total Message-Events pending: " . ($totalMessageEvent - ($counterStartMessageEvent + $counterIntermediateCatchMessageEvent))); $common->frontEndShow("END"); } catch (\Exception $e) { throw $e; } }
/** * Patch for reports by The Answer (17-10-2k8) * * * @name reportsPatch * * param * @return void */ function reportsPatch() { require_once 'classes/model/AppDelegation.php'; $oCriteria = new Criteria('workflow'); $del = DBAdapter::getStringDelimiter(); $oCriteria->addSelectColumn(AppDelegationPeer::APP_UID); $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); $oCriteria->addSelectColumn(AppDelegationPeer::DEL_DELEGATE_DATE); $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); $oCriteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); $oCriteria->addSelectColumn(AppDelegationPeer::DEL_DURATION); $oDataset = AppDelegationPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { $oAppDelegation = new AppDelegation(); $aData['APP_UID'] = $aRow['APP_UID']; $aData['DEL_INDEX'] = $aRow['DEL_INDEX']; $aData['DEL_DELEGATE_DATE'] = $aRow['DEL_DELEGATE_DATE']; if ($aRow['DEL_INIT_DATE'] == NULL) { $aData['DEL_INIT_DATE'] = $aRow['DEL_DELEGATE_DATE']; } else { $aData['DEL_INIT_DATE'] = $aRow['DEL_INIT_DATE']; } //$aData['DEL_FINISH_DATE']=$aRow['DEL_FINISH_DATE']; if ($aRow['DEL_DURATION'] != 0) { G::LoadClass('dates'); $oDates = new dates(); $aData['DEL_DURATION'] = $oDates->calculateDuration($aData['DEL_INIT_DATE'], $aRow['DEL_FINISH_DATE'], null, null, $aRow['TAS_UID']); } $oAppDelegation->update($aData); $oDataset->next(); } return; }
/** * Generate data * * return void */ public function generateData() { try { G::LoadClass("case"); AppAssignSelfServiceValuePeer::doDeleteAll(); //Delete all records //Generate data $case = new Cases(); $criteria = new Criteria("workflow"); $criteria->addSelectColumn(AppDelegationPeer::APP_UID); $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); $criteria->addSelectColumn(ApplicationPeer::APP_DATA); $criteria->addSelectColumn(AppDelegationPeer::PRO_UID); $criteria->addSelectColumn(TaskPeer::TAS_UID); $criteria->addSelectColumn(TaskPeer::TAS_GROUP_VARIABLE); $criteria->addJoin(AppDelegationPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); $criteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); $criteria->add(TaskPeer::TAS_ASSIGN_TYPE, "SELF_SERVICE", Criteria::EQUAL); $criteria->add(TaskPeer::TAS_GROUP_VARIABLE, "", Criteria::NOT_EQUAL); $criteria->add(AppDelegationPeer::USR_UID, "", Criteria::EQUAL); $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", Criteria::EQUAL); $rsCriteria = AppDelegationPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $applicationData = $case->unserializeData($row["APP_DATA"]); $taskGroupVariable = trim($row["TAS_GROUP_VARIABLE"], " @#"); if ($taskGroupVariable != "" && isset($applicationData[$taskGroupVariable]) && trim($applicationData[$taskGroupVariable]) != "") { $this->create($row["APP_UID"], $row["DEL_INDEX"], array("PRO_UID" => $row["PRO_UID"], "TAS_UID" => $row["TAS_UID"], "GRP_UID" => trim($applicationData[$taskGroupVariable]))); } } } catch (Exception $e) { throw $e; } }
/** * get the case summary data * * @param string $httpData->appUid * @param string $httpData->delIndex * @return array containg the case summary data */ function getSummary($httpData) { $labels = array(); $form = new Form('cases/cases_Resume', PATH_XMLFORM, SYS_LANG); G::LoadClass('case'); $case = new Cases(); foreach ($form->fields as $fieldName => $field) { $labels[$fieldName] = $field->label; } if (isset($_SESSION['_applicationFields']) && $_SESSION['_processData']) { $applicationFields = $_SESSION['_applicationFields']; unset($_SESSION['_applicationFields']); $processData = $_SESSION['_processData']; unset($_SESSION['_processData']); } else { if ($httpData->action == 'sent') { // Get the last valid delegation for participated list $criteria = new Criteria(); $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); $criteria->add(AppDelegationPeer::APP_UID, $httpData->appUid); $criteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); $criteria->addDescendingOrderByColumn(AppDelegationPeer::DEL_INDEX); if (AppDelegationPeer::doCount($criteria) > 0) { $dataset = AppDelegationPeer::doSelectRS($criteria); $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); $row = $dataset->getRow(); $httpData->delIndex = $row['DEL_INDEX']; } } $applicationFields = $case->loadCase($httpData->appUid, $httpData->delIndex); $process = new Process(); $processData = $process->load($applicationFields['PRO_UID']); } $data = array(); $task = new Task(); $taskData = $task->load($applicationFields['TAS_UID']); $currentUser = $applicationFields['CURRENT_USER'] != '' ? $applicationFields['CURRENT_USER'] : '******' . G::LoadTranslation('ID_UNASSIGNED') . ']'; $data[] = array('label' => $labels['PRO_TITLE'], 'value' => $processData['PRO_TITLE'], 'section' => $labels['TITLE1']); $data[] = array('label' => $labels['TITLE'], 'value' => $applicationFields['TITLE'], 'section' => $labels['TITLE1']); $data[] = array('label' => $labels['APP_NUMBER'], 'value' => $applicationFields['APP_NUMBER'], 'section' => $labels['TITLE1']); $data[] = array('label' => $labels['STATUS'], 'value' => $applicationFields['STATUS'], 'section' => $labels['TITLE1']); $data[] = array('label' => $labels['APP_UID'], 'value' => $applicationFields['APP_UID'], 'section' => $labels['TITLE1']); $data[] = array('label' => $labels['CREATOR'], 'value' => $applicationFields['CREATOR'], 'section' => $labels['TITLE1']); $data[] = array('label' => $labels['CREATE_DATE'], 'value' => $applicationFields['CREATE_DATE'], 'section' => $labels['TITLE1']); $data[] = array('label' => $labels['UPDATE_DATE'], 'value' => $applicationFields['UPDATE_DATE'], 'section' => $labels['TITLE1']); $data[] = array('label' => $labels['DESCRIPTION'], 'value' => $applicationFields['DESCRIPTION'], 'section' => $labels['TITLE1']); // note added by krlos pacha carlos[at]colosa[dot]com //getting this field if it doesn't exist. Related 7994 bug $taskData['TAS_TITLE'] = array_key_exists('TAS_TITLE', $taskData) ? $taskData['TAS_TITLE'] : Content::Load("TAS_TITLE", "", $applicationFields['TAS_UID'], SYS_LANG); $data[] = array('label' => $labels['TAS_TITLE'], 'value' => $taskData['TAS_TITLE'], 'section' => $labels['TITLE2']); $data[] = array('label' => $labels['CURRENT_USER'], 'value' => $currentUser, 'section' => $labels['TITLE2']); $data[] = array('label' => $labels['DEL_DELEGATE_DATE'], 'value' => $applicationFields['DEL_DELEGATE_DATE'], 'section' => $labels['TITLE2']); $data[] = array('label' => $labels['DEL_INIT_DATE'], 'value' => $applicationFields['DEL_INIT_DATE'], 'section' => $labels['TITLE2']); $data[] = array('label' => $labels['DEL_TASK_DUE_DATE'], 'value' => $applicationFields['DEL_TASK_DUE_DATE'], 'section' => $labels['TITLE2']); $data[] = array('label' => $labels['DEL_FINISH_DATE'], 'value' => $applicationFields['DEL_FINISH_DATE'], 'section' => $labels['TITLE2']); //$data[] = array('label'=>$labels['DYN_UID'] , 'value' => $processData['PRO_DYNAFORMS']['PROCESS'];, 'section'=>$labels['DYN_UID']); return $data; }
/** * * @method * * Redirects a case to any step in the current task. In order for the step to * be executed, the specified step much exist and if it contains a condition, * it must evaluate to true. * * @name PMFRedirectToStep * @label PMF Redirect To Step * @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#PMFRedirectToStep.28.29 * * @param string(32) | $sApplicationUID | Case ID | The unique ID for a case, * @param int | $iDelegation | Delegation index | The delegation index of a case. * @param string(32) | $sStepType | Type of Step | The type of step, which can be "DYNAFORM", "INPUT_DOCUMENT" or "OUTPUT_DOCUMENT". * @param string(32) | $sStepUid | Step ID | The unique ID for the step. * @return none | $none | None | None * */ function PMFRedirectToStep($sApplicationUID, $iDelegation, $sStepType, $sStepUid) { $g = new G(); $g->sessionVarSave(); $iDelegation = intval($iDelegation); $_SESSION["APPLICATION"] = $sApplicationUID; $_SESSION["INDEX"] = $iDelegation; require_once 'classes/model/AppDelegation.php'; $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); $oCriteria->add(AppDelegationPeer::DEL_INDEX, $iDelegation); $oDataset = AppDelegationPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); global $oPMScript; $aRow = $oDataset->getRow(); if ($aRow) { require_once 'classes/model/Step.php'; $oStep = new Step(); $oTheStep = $oStep->loadByType($aRow['TAS_UID'], $sStepType, $sStepUid); $bContinue = true; G::LoadClass('case'); $oCase = new Cases(); $aFields = $oCase->loadCase($sApplicationUID); if ($oTheStep->getStepCondition() != '') { G::LoadClass('pmScript'); $pmScript = new PMScript(); $pmScript->setFields($aFields['APP_DATA']); $pmScript->setScript($oTheStep->getStepCondition()); $bContinue = $pmScript->evaluate(); } if ($bContinue) { switch ($oTheStep->getStepTypeObj()) { case 'DYNAFORM': $sAction = 'EDIT'; break; case 'OUTPUT_DOCUMENT': $sAction = 'GENERATE'; break; case 'INPUT_DOCUMENT': $sAction = 'ATTACH'; break; case 'EXTERNAL': $sAction = 'EDIT'; break; case 'MESSAGE': $sAction = ''; break; } // save data if (!is_null($oPMScript)) { $aFields['APP_DATA'] = $oPMScript->aFields; $oCase->updateCase($sApplicationUID, $aFields); } $g->sessionVarRestore(); G::header('Location: ' . 'cases_Step?TYPE=' . $sStepType . '&UID=' . $sStepUid . '&POSITION=' . $oTheStep->getStepPosition() . '&ACTION=' . $sAction); die; } } $g->sessionVarRestore(); }
function getDerivatedCases ($sParentUid, $sDelIndexParent) { $oCriteria = new Criteria( 'workflow' ); $cases = array (); $derivation = array (); //get the child delegations , of parent delIndex $children = array (); $oCriteria->clearSelectColumns(); $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); $oCriteria->add( AppDelegationPeer::APP_UID, $sParentUid ); $oCriteria->add( AppDelegationPeer::DEL_PREVIOUS, $sDelIndexParent ); $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); while (is_array( $aRow )) { $children[] = $aRow['DEL_INDEX']; $oDataset->next(); $aRow = $oDataset->getRow(); } //foreach child , get the info of their derivations and subprocesses foreach ($children as $keyChild => $child) { $oCriteria = new Criteria( 'workflow' ); $oCriteria->clearSelectColumns(); $oCriteria->addSelectColumn( SubApplicationPeer::APP_UID ); $oCriteria->addSelectColumn( AppDelegationPeer::APP_UID ); $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); $oCriteria->addSelectColumn( AppDelegationPeer::PRO_UID ); $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); $oCriteria->addSelectColumn( AppDelegationPeer::USR_UID ); $oCriteria->addSelectColumn( UsersPeer::USR_USERNAME ); $oCriteria->addSelectColumn( UsersPeer::USR_FIRSTNAME ); $oCriteria->addSelectColumn( UsersPeer::USR_LASTNAME ); $oCriteria->add( SubApplicationPeer::APP_PARENT, $sParentUid ); $oCriteria->add( SubApplicationPeer::DEL_INDEX_PARENT, $child ); $oCriteria->addJoin( SubApplicationPeer::APP_UID, AppDelegationPeer::APP_UID ); $oCriteria->addJoin( AppDelegationPeer::USR_UID, UsersPeer::USR_UID ); $oDataset = SubApplicationPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); while (is_array( $aRow )) { $oProcess = new Process(); $proFields = $oProcess->load( $aRow['PRO_UID'] ); $oCase = new Application(); $appFields = $oCase->load( $aRow['APP_UID'] ); $oTask = new Task(); $tasFields = $oTask->load( $aRow['TAS_UID'] ); $derivation[] = array ('processId' => $aRow['PRO_UID'],'processTitle' => $proFields['PRO_TITLE'],'caseId' => $aRow['APP_UID'],'caseNumber' => $appFields['APP_NUMBER'],'taskId' => $aRow['TAS_UID'],'taskTitle' => $tasFields['TAS_TITLE'],'userId' => $aRow['USR_UID'],'userName' => $aRow['USR_USERNAME'],'userFullname' => $aRow['USR_FIRSTNAME'] . ' ' . $aRow['USR_LASTNAME'] ); $oDataset->next(); $aRow = $oDataset->getRow(); } } return $derivation; }
public function isExistNextNotification($app_uid, $del_index) { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(AppDelegationPeer::APP_UID); $oCriteria->add(AppDelegationPeer::APP_UID, $app_uid); $oCriteria->add(AppDelegationPeer::DEL_PREVIOUS, $del_index); $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); $oCriteria->setLimit(1); //execute the query $oDataset = AppDelegationPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); if ($oDataset->next()) { return true; } else { return false; } }
/* Redirect to next step */ unset( $_SESSION['bNoShowSteps'] ); $aNextStep = $oCase->getNextStep( $_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION'] ); $sPage = $aNextStep['PAGE']; G::header( 'location: ' . $sPage ); } else { //when the case have another user or current user doesn't have rights to this self-service, //just view the case Resume // Get DEL_INDEX $criteria = new Criteria('workflow'); $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); $criteria->add(AppDelegationPeer::APP_UID, $sAppUid); $criteria->add(AppDelegationPeer::DEL_LAST_INDEX , 1); $rs = AppDelegationPeer::doSelectRS($criteria); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->next(); $row = $rs->getRow(); $_SESSION['APPLICATION'] = $sAppUid; if($_action=='search'){ $_SESSION['INDEX'] = $iDelIndex; } else { $_SESSION['INDEX'] = $row['DEL_INDEX']; } $_SESSION['PROCESS'] = $aFields['PRO_UID']; $_SESSION['TASK'] = - 1; //$Fields = $oCase->loadCase( $_SESSION['APPLICATION'], $_SESSION['INDEX'] ); if ($_action == 'jump') { $Fields = $oCase->loadCase( $_SESSION['APPLICATION'], $_SESSION['INDEX'], 1);
/** * Get data of Cases OutputDocument * * @param string $applicationUid * @param string $outputDocumentUid * @param string $userUid * * return object Return an object with data of an OutputDocument */ public function addCasesOutputDocument($applicationUid, $outputDocumentUid, $userUid) { try { $sApplication = $applicationUid; $index = \AppDelegation::getCurrentIndex($applicationUid); $sUserLogged = $userUid; $outputID = $outputDocumentUid; $g = new \G(); $g->sessionVarSave(); \G::LoadClass('case'); $oCase = new \Cases(); $oCase->thisIsTheCurrentUser($sApplication, $index, $sUserLogged, '', 'casesListExtJs'); //require_once 'classes/model/OutputDocument.php'; $oOutputDocument = new \OutputDocument(); $aOD = $oOutputDocument->load($outputID); $Fields = $oCase->loadCase($sApplication); $sFilename = preg_replace('[^A-Za-z0-9_]', '_', \G::replaceDataField($aOD['OUT_DOC_FILENAME'], $Fields['APP_DATA'])); require_once PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "AppFolder.php"; require_once PATH_TRUNK . "workflow" . PATH_SEP . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "AppDocument.php"; //Get the Custom Folder ID (create if necessary) $oFolder = new \AppFolder(); $folderId = $oFolder->createFromPath($aOD['OUT_DOC_DESTINATION_PATH'], $sApplication); //Tags $fileTags = $oFolder->parseTags($aOD['OUT_DOC_TAGS'], $sApplication); //Get last Document Version and apply versioning if is enabled $oAppDocument = new \AppDocument(); $lastDocVersion = $oAppDocument->getLastDocVersion($outputID, $sApplication); $oCriteria = new \Criteria('workflow'); $oCriteria->add(\AppDocumentPeer::APP_UID, $sApplication); $oCriteria->add(\AppDocumentPeer::DOC_UID, $outputID); $oCriteria->add(\AppDocumentPeer::DOC_VERSION, $lastDocVersion); $oCriteria->add(\AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'); $oDataset = \AppDocumentPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $oDataset->next(); if ($aOD['OUT_DOC_VERSIONING'] && $lastDocVersion != 0) { //Create new Version of current output $lastDocVersion++; if ($aRow = $oDataset->getRow()) { $aFields = array('APP_DOC_UID' => $aRow['APP_DOC_UID'], 'APP_UID' => $sApplication, 'DEL_INDEX' => $index, 'DOC_UID' => $outputID, 'DOC_VERSION' => $lastDocVersion + 1, 'USR_UID' => $sUserLogged, 'APP_DOC_TYPE' => 'OUTPUT', 'APP_DOC_CREATE_DATE' => date('Y-m-d H:i:s'), 'APP_DOC_FILENAME' => $sFilename, 'FOLDER_UID' => $folderId, 'APP_DOC_TAGS' => $fileTags); $oAppDocument = new \AppDocument(); $oAppDocument->create($aFields); $sDocUID = $aRow['APP_DOC_UID']; } } else { ////No versioning so Update a current Output or Create new if no exist if ($aRow = $oDataset->getRow()) { //Update $aFields = array('APP_DOC_UID' => $aRow['APP_DOC_UID'], 'APP_UID' => $sApplication, 'DEL_INDEX' => $index, 'DOC_UID' => $outputID, 'DOC_VERSION' => $lastDocVersion, 'USR_UID' => $sUserLogged, 'APP_DOC_TYPE' => 'OUTPUT', 'APP_DOC_CREATE_DATE' => date('Y-m-d H:i:s'), 'APP_DOC_FILENAME' => $sFilename, 'FOLDER_UID' => $folderId, 'APP_DOC_TAGS' => $fileTags); $oAppDocument = new \AppDocument(); $oAppDocument->update($aFields); $sDocUID = $aRow['APP_DOC_UID']; } else { //we are creating the appdocument row //create if ($lastDocVersion == 0) { $lastDocVersion++; } $aFields = array('APP_UID' => $sApplication, 'DEL_INDEX' => $index, 'DOC_UID' => $outputID, 'DOC_VERSION' => $lastDocVersion, 'USR_UID' => $sUserLogged, 'APP_DOC_TYPE' => 'OUTPUT', 'APP_DOC_CREATE_DATE' => date('Y-m-d H:i:s'), 'APP_DOC_FILENAME' => $sFilename, 'FOLDER_UID' => $folderId, 'APP_DOC_TAGS' => $fileTags); $oAppDocument = new \AppDocument(); $aFields['APP_DOC_UID'] = $sDocUID = $oAppDocument->create($aFields); } } $sFilename = $aFields['APP_DOC_UID'] . "_" . $lastDocVersion; $pathOutput = PATH_DOCUMENT . \G::getPathFromUID($sApplication) . PATH_SEP . 'outdocs' . PATH_SEP; //G::pr($sFilename);die; \G::mk_dir($pathOutput); $aProperties = array(); if (!isset($aOD['OUT_DOC_MEDIA'])) { $aOD['OUT_DOC_MEDIA'] = 'Letter'; } if (!isset($aOD['OUT_DOC_LEFT_MARGIN'])) { $aOD['OUT_DOC_LEFT_MARGIN'] = '15'; } if (!isset($aOD['OUT_DOC_RIGHT_MARGIN'])) { $aOD['OUT_DOC_RIGHT_MARGIN'] = '15'; } if (!isset($aOD['OUT_DOC_TOP_MARGIN'])) { $aOD['OUT_DOC_TOP_MARGIN'] = '15'; } if (!isset($aOD['OUT_DOC_BOTTOM_MARGIN'])) { $aOD['OUT_DOC_BOTTOM_MARGIN'] = '15'; } $aProperties['media'] = $aOD['OUT_DOC_MEDIA']; $aProperties['margins'] = array('left' => $aOD['OUT_DOC_LEFT_MARGIN'], 'right' => $aOD['OUT_DOC_RIGHT_MARGIN'], 'top' => $aOD['OUT_DOC_TOP_MARGIN'], 'bottom' => $aOD['OUT_DOC_BOTTOM_MARGIN']); if (isset($aOD['OUT_DOC_REPORT_GENERATOR'])) { $aProperties['report_generator'] = $aOD['OUT_DOC_REPORT_GENERATOR']; } $this->generate($outputID, $Fields['APP_DATA'], $pathOutput, $sFilename, $aOD['OUT_DOC_TEMPLATE'], (bool) $aOD['OUT_DOC_LANDSCAPE'], $aOD['OUT_DOC_GENERATE'], $aProperties, $applicationUid); /*----------------------------------********---------------------------------*/ $licensedFeatures =& \PMLicensedFeatures::getSingleton(); if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) { \G::LoadClass("pmDrive"); $pmDrive = new \PMDrive(); if ($pmDrive->getStatusService()) { $app = new \Application(); $user = new \Users(); $dataUser = $user->load($userUid); $pmDrive->setDriveUser($dataUser['USR_EMAIL']); $appData = $app->Load($applicationUid); if ($appData['APP_DRIVE_FOLDER_UID'] == null) { $process = new \Process(); $process->setProUid($appData['PRO_UID']); $result = $pmDrive->createFolder($process->getProTitle() . ' - ' . G::LoadTranslation("ID_CASE") . ' #' . $appData['APP_NUMBER'], $pmDrive->getFolderIdPMDrive($userUid)); $appData['APP_DRIVE_FOLDER_UID'] = $result->id; $app->update($appData); } $fileIdDriveDoc = ''; $fileIdDrivePdf = ''; $sFilenameOriginal = preg_replace('[^A-Za-z0-9_]', '_', \G::replaceDataField($aOD['OUT_DOC_FILENAME'], $Fields['APP_DATA'])); switch ($aOD['OUT_DOC_GENERATE']) { case "BOTH": $result = $pmDrive->uploadFile('application/pdf', $pathOutput . $sFilename . '.pdf', $sFilenameOriginal . '.pdf', $appData['APP_DRIVE_FOLDER_UID']); $oAppDocument->setDriveDownload('OUTPUT_PDF', $result->webContentLink); $fileIdDrivePdf = $result->id; $result = $pmDrive->uploadFile('application/doc', $pathOutput . $sFilename . '.doc', $sFilenameOriginal . '.doc', $appData['APP_DRIVE_FOLDER_UID']); $oAppDocument->setDriveDownload('OUTPUT_DOC', $result->webContentLink); $fileIdDriveDoc = $result->id; break; case "PDF": $result = $pmDrive->uploadFile('application/pdf', $pathOutput . $sFilename . '.pdf', $sFilenameOriginal . '.pdf', $appData['APP_DRIVE_FOLDER_UID']); $oAppDocument->setDriveDownload('OUTPUT_PDF', $result->webContentLink); $fileIdDrivePdf = $result->id; break; case "DOC": $result = $pmDrive->uploadFile('application/doc', $pathOutput . $sFilename . '.doc', $sFilenameOriginal . '.doc', $appData['APP_DRIVE_FOLDER_UID']); $oAppDocument->setDriveDownload('OUTPUT_DOC', $result->webContentLink); $fileIdDriveDoc = $result->id; break; } $aFields['DOC_VERSION'] = $oAppDocument->getDocVersion(); // $docVersion; $aFields['APP_DOC_UID'] = $oAppDocument->getAppDocUid(); //$appDocUid; $appDocUid = $aFields['APP_DOC_UID']; $oAppDocument->update($aFields); //$option = 'pmDrive'; //add permissions $criteria = new \Criteria('workflow'); $criteria->addSelectColumn(\ApplicationPeer::PRO_UID); $criteria->addSelectColumn(\TaskUserPeer::TAS_UID); $criteria->addSelectColumn(\TaskUserPeer::USR_UID); $criteria->addSelectColumn(\TaskUserPeer::TU_RELATION); $criteria->add(\ApplicationPeer::APP_UID, $applicationUid); $criteria->addJoin(\ApplicationPeer::PRO_UID, \TaskPeer::PRO_UID, \Criteria::LEFT_JOIN); $criteria->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN); $dataset = \ApplicationPeer::doSelectRS($criteria); $dataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $userPermission = array(); $case = new \Cases(); while ($dataset->next()) { $row = $dataset->getRow(); if ($row['TU_RELATION'] == 1) { //users $dataUser = $user->load($row['USR_UID']); if (array_search($dataUser['USR_EMAIL'], $userPermission) === false) { $objectPermissions = $case->getAllObjects($row['PRO_UID'], $applicationUid, $row['TAS_UID'], $row['USR_UID']); if (array_search($appDocUid, $objectPermissions['OUTPUT_DOCUMENTS']) !== false) { $userPermission[] = $dataUser['USR_EMAIL']; } } } else { //Groups $criteria = new \Criteria('workflow'); $criteria->addSelectColumn(\UsersPeer::USR_EMAIL); $criteria->addSelectColumn(\UsersPeer::USR_UID); $criteria->add(\GroupUserPeer::GRP_UID, $row['USR_UID']); $criteria->addJoin(\GroupUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); $oDataset = \AppDelegationPeer::doSelectRS($criteria); $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); while ($oDataset->next()) { $aRow = $oDataset->getRow(); if (array_search($aRow['USR_EMAIL'], $userPermission) === false) { $objectPermissions = $case->getAllObjects($row['PRO_UID'], $applicationUid, $row['TAS_UID'], $aRow['USR_UID']); if (array_search($appDocUid, $objectPermissions['OUTPUT_DOCUMENTS']) !== false) { $userPermission[] = $aRow['USR_EMAIL']; } } } } } $userPermission = array_unique($userPermission); foreach ($userPermission as $key => $val) { $pmDrive->setPermission($appData['APP_DRIVE_FOLDER_UID'], $val, 'user', 'writer'); $pmDrive->setPermission($fileIdDrivePdf, $val); $pmDrive->setPermission($fileIdDriveDoc, $val); } } } /*----------------------------------********---------------------------------*/ //Plugin Hook PM_UPLOAD_DOCUMENT for upload document //G::LoadClass('plugin'); $oPluginRegistry =& \PMPluginRegistry::getSingleton(); if ($oPluginRegistry->existsTrigger(PM_UPLOAD_DOCUMENT) && class_exists('uploadDocumentData')) { $triggerDetail = $oPluginRegistry->getTriggerInfo(PM_UPLOAD_DOCUMENT); $aFields['APP_DOC_PLUGIN'] = $triggerDetail->sNamespace; $oAppDocument1 = new \AppDocument(); $oAppDocument1->update($aFields); $sPathName = PATH_DOCUMENT . \G::getPathFromUID($sApplication) . PATH_SEP; $oData['APP_UID'] = $sApplication; $oData['ATTACHMENT_FOLDER'] = true; switch ($aOD['OUT_DOC_GENERATE']) { case "BOTH": $documentData = new \uploadDocumentData($sApplication, $sUserLogged, $pathOutput . $sFilename . '.pdf', $sFilename . '.pdf', $sDocUID, $oAppDocument->getDocVersion()); $documentData->sFileType = "PDF"; $documentData->bUseOutputFolder = true; $uploadReturn = $oPluginRegistry->executeTriggers(PM_UPLOAD_DOCUMENT, $documentData); if ($uploadReturn) { //Only delete if the file was saved correctly unlink($pathOutput . $sFilename . '.pdf'); } $documentData = new \uploadDocumentData($sApplication, $sUserLogged, $pathOutput . $sFilename . '.doc', $sFilename . '.doc', $sDocUID, $oAppDocument->getDocVersion()); $documentData->sFileType = "DOC"; $documentData->bUseOutputFolder = true; $uploadReturn = $oPluginRegistry->executeTriggers(PM_UPLOAD_DOCUMENT, $documentData); if ($uploadReturn) { //Only delete if the file was saved correctly unlink($pathOutput . $sFilename . '.doc'); } break; case "PDF": $documentData = new \uploadDocumentData($sApplication, $sUserLogged, $pathOutput . $sFilename . '.pdf', $sFilename . '.pdf', $sDocUID, $oAppDocument->getDocVersion()); $documentData->sFileType = "PDF"; $documentData->bUseOutputFolder = true; $uploadReturn = $oPluginRegistry->executeTriggers(PM_UPLOAD_DOCUMENT, $documentData); if ($uploadReturn) { //Only delete if the file was saved correctly unlink($pathOutput . $sFilename . '.pdf'); } break; case "DOC": $documentData = new \uploadDocumentData($sApplication, $sUserLogged, $pathOutput . $sFilename . '.doc', $sFilename . '.doc', $sDocUID, $oAppDocument->getDocVersion()); $documentData->sFileType = "DOC"; $documentData->bUseOutputFolder = true; $uploadReturn = $oPluginRegistry->executeTriggers(PM_UPLOAD_DOCUMENT, $documentData); if ($uploadReturn) { //Only delete if the file was saved correctly unlink($pathOutput . $sFilename . '.doc'); } break; } } $g->sessionVarRestore(); $oAppDocument = \AppDocumentPeer::retrieveByPK($aFields['APP_DOC_UID'], $lastDocVersion); if ($oAppDocument->getAppDocStatus() == 'DELETED') { $oAppDocument->setAppDocStatus('ACTIVE'); $oAppDocument->save(); } $response = $this->getCasesOutputDocument($applicationUid, $userUid, $aFields['APP_DOC_UID']); return $response; } catch (\Exception $e) { throw $e; } }