Example #1
0
    public function getTimerEvents($processUid)

    {

        try {

            $arrayTimerEvent = array();



            $timerEvent = new \ProcessMaker\BusinessModel\TimerEvent();



            //Get data

            $criteria = $timerEvent->getTimerEventCriteria();



            $criteria->add(\TimerEventPeer::PRJ_UID, $processUid, \Criteria::EQUAL);



            $rsCriteria = \TimerEventPeer::doSelectRS($criteria);

            $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);



            while ($rsCriteria->next()) {

                $row = $rsCriteria->getRow();



                $arrayTimerEvent[] = $row;

            }



            //Return

            return $arrayTimerEvent;

        } catch (Exception $e) {

            throw $e;

        }

    }
Example #2
0
 /**
  * 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;
     }
 }
 /**
  * Retrieve multiple objects by pkey.
  *
  * @param      array $pks List of primary keys
  * @param      Connection $con the connection to use
  * @throws     PropelException Any exceptions caught during processing will be
  *       rethrown wrapped into a PropelException.
  */
 public static function retrieveByPKs($pks, $con = null)
 {
     if ($con === null) {
         $con = Propel::getConnection(self::DATABASE_NAME);
     }
     $objs = null;
     if (empty($pks)) {
         $objs = array();
     } else {
         $criteria = new Criteria();
         $criteria->add(TimerEventPeer::TMREVN_UID, $pks, Criteria::IN);
         $objs = TimerEventPeer::doSelect($criteria, $con);
     }
     return $objs;
 }
 /**
  * Populates the object using an array.
  *
  * This is particularly useful when populating an object from one of the
  * request arrays (e.g. $_POST).  This method goes through the column
  * names, checking to see whether a matching key exists in populated
  * array. If so the setByName() method is called for that column.
  *
  * You can specify the key type of the array by additionally passing one
  * of the class type constants TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME,
  * TYPE_NUM. The default key type is the column's phpname (e.g. 'authorId')
  *
  * @param      array  $arr     An array to populate the object from.
  * @param      string $keyType The type of keys the array uses.
  * @return     void
  */
 public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
 {
     $keys = TimerEventPeer::getFieldNames($keyType);
     if (array_key_exists($keys[0], $arr)) {
         $this->setTmrevnUid($arr[$keys[0]]);
     }
     if (array_key_exists($keys[1], $arr)) {
         $this->setPrjUid($arr[$keys[1]]);
     }
     if (array_key_exists($keys[2], $arr)) {
         $this->setEvnUid($arr[$keys[2]]);
     }
     if (array_key_exists($keys[3], $arr)) {
         $this->setTmrevnOption($arr[$keys[3]]);
     }
     if (array_key_exists($keys[4], $arr)) {
         $this->setTmrevnStartDate($arr[$keys[4]]);
     }
     if (array_key_exists($keys[5], $arr)) {
         $this->setTmrevnEndDate($arr[$keys[5]]);
     }
     if (array_key_exists($keys[6], $arr)) {
         $this->setTmrevnDay($arr[$keys[6]]);
     }
     if (array_key_exists($keys[7], $arr)) {
         $this->setTmrevnHour($arr[$keys[7]]);
     }
     if (array_key_exists($keys[8], $arr)) {
         $this->setTmrevnMinute($arr[$keys[8]]);
     }
     if (array_key_exists($keys[9], $arr)) {
         $this->setTmrevnConfigurationData($arr[$keys[9]]);
     }
     if (array_key_exists($keys[10], $arr)) {
         $this->setTmrevnNextRunDate($arr[$keys[10]]);
     }
     if (array_key_exists($keys[11], $arr)) {
         $this->setTmrevnLastRunDate($arr[$keys[11]]);
     }
     if (array_key_exists($keys[12], $arr)) {
         $this->setTmrevnLastExecutionDate($arr[$keys[12]]);
     }
     if (array_key_exists($keys[13], $arr)) {
         $this->setTmrevnStatus($arr[$keys[13]]);
     }
 }