function NewCase($params) { G::LoadClass("sessions"); $vsResult = isValidSession($params->sessionId); if ($vsResult->status_code !== 0) { return $vsResult; } if (ifPermission($params->sessionId, "PM_CASES") == 0) { $result = new wsResponse(2, G::LoadTranslation('ID_NOT_PRIVILEGES')); return $result; } $oSession = new Sessions(); $session = $oSession->getSessionUser($params->sessionId); $userId = $session["USR_UID"]; $variables = $params->variables; /* this code is for previous version of ws, and apparently this will work for grids inside the variables.. if (!isset($params->variables) ) { $variables = array(); $field = array(); } else { if ( is_object ($variables) ) { $field[ $variables->name ]= $variables->value ; } if ( is_array ( $variables) ) { foreach ( $variables as $key=>$val ) { $name = $val->name; $value = $val->value; if (!is_object($val->value)) { eval('$field[ ' . $val->name . ' ]= $val->value ;'); } else { if (is_array($val->value->item)) { $i = 1; foreach ($val->value->item as $key1 => $val1) { if (isset($val1->value)) { if (is_array($val1->value->item)) { foreach ($val1->value->item as $key2 => $val2) { $field[$val->name][$i][$val2->key] = $val2->value; } } } $i++; } } } } } } */ $variables = $params->variables; $field = array(); if (is_object($variables)) { $field[$variables->name] = $variables->value; } if (is_array($variables)) { foreach ($variables as $key => $val) { if (!is_object($val->value)) { eval("\$field[" . $val->name . "]= \$val->value;"); } } } $params->variables = $field; $ws = new wsBase(); $res = $ws->newCase($params->processId, $userId, $params->taskId, $params->variables, isset($params->executeTriggers) ? (int) $params->executeTriggers : 0); // we need to register the case id for a stored session variable. like a normal Session. $oSession->registerGlobal("APPLICATION", $res->caseId); return $res; }
function NewCase($params) { G::LoadClass('wsBase'); G::LoadClass('sessions'); G::LoadSystem('inputfilter'); $filter = new InputFilter(); ifSessionExpiredBreakThis($params->sessionId); $x = ifPermission($params->sessionId, 'PM_CASES'); if ($x == 0) { G::LoadClass('wsResponse'); $result = new wsResponse(24, G::LoadTranslation('ID_NOT_PRIVILEGES')); return $result; } $oSessions = new Sessions(); $session = $oSessions->getSessionUser($params->sessionId); $userId = $session['USR_UID']; $variables = $params->variables; if (!isset($params->variables)) { $variables = array(); $Fields = array(); } else { if (is_object($variables)) { /*foreach ( $variables as $key=>$val ) { $name = $val->name; $value = $val->value; $Fields[ $val->name ]= $val->value ; }*/ $Fields[$variables->name] = $variables->value; } if (is_array($variables)) { foreach ($variables as $key => $val) { $name = $val->name; $value = $val->value; if (!is_object($val->value)) { $val->name = $filter->validateInput($val->name); $val->value = $filter->validateInput($val->value); eval('$Fields[ ' . $val->name . ' ]= $val->value ;'); } else { if (is_array($val->value->item)) { $i = 1; foreach ($val->value->item as $key1 => $val1) { if (isset($val1->value)) { if (is_array($val1->value->item)) { foreach ($val1->value->item as $key2 => $val2) { $Fields[$val->name][$i][$val2->key] = $val2->value; } } } $i++; } } } } } } $params->variables = $Fields; //$result = new wsResponse (900, print_r($params->variables,1)); //return $result; $ws = new wsBase(); $res = $ws->newCase($params->processId, $userId, $params->taskId, $params->variables); return $res; }
/** * * @method * * Creates a new case starting with the specified task * * @name PMFNewCase * @label PMF New Case * @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#PMFNewCase.28.29 * * @param string(32) | $processId | Process ID | The unique ID of the process. * @param string(32) | $userId | User ID | The unique ID of the user. * @param string(32) | $taskId | Task ID | The unique ID of the task. * @param array | $variables | Array of variables | An associative array of the variables which will be sent to the case. * @return string | $idNewCase | Case ID | If an error occured, it returns the integer zero. Otherwise, it returns a string with the case UID of the new case. * */ function PMFNewCase($processId, $userId, $taskId, $variables) { G::LoadClass('wsBase'); $ws = new wsBase(); $result = $ws->newCase($processId, $userId, $taskId, $variables); if ($result->status_code == 0) { return $result->caseId; } else { return 0; } }
/** * 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; } }
/** * 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; } }
/** * Add New Case * * @param string $processUid Unique id of Project * @param string $taskUid Unique id of Activity (task) * @param string $userUid Unique id of Case * @param array $variables * * return array Return an array with Task Case */ public function addCase($processUid, $taskUid, $userUid, $variables) { try { \G::LoadClass('wsBase'); $ws = new \wsBase(); if ($variables) { $variables = array_shift($variables); } Validator::proUid($processUid, '$pro_uid'); $oTask = new \Task(); if (!$oTask->taskExists($taskUid)) { throw new \Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('tas_uid'))); } $fields = $ws->newCase($processUid, $userUid, $taskUid, $variables); $array = json_decode(json_encode($fields), true); if ($array["status_code"] != 0) { throw new \Exception($array["message"]); } else { $array['app_uid'] = $array['caseId']; $array['app_number'] = $array['caseNumber']; unset($array['status_code']); unset($array['message']); unset($array['timestamp']); unset($array['caseId']); unset($array['caseNumber']); } $oResponse = json_decode(json_encode($array), false); //Return return $oResponse; } catch (\Exception $e) { throw $e; } }