Esempio n. 1
0
    /**
     * consolidatedUpdate
     *
     * @author Brayan Pereyra (Cochalo) <*****@*****.**>
     * @copyright Colosa - Bolivia
    */
    function consolidatedUpdate($dynaformUid, $dataUpdate, $usr_uid)
    {
        G::LoadClass("case");
        G::LoadClass("pmFunctions");

        $delIndex = 1;
        $oCase = new \Cases();

        $array = array();
        $array["form"] = $dataUpdate;
        $appUid = $array["form"]["APP_UID"];

        $fields = $oCase->loadCase($appUid);
        if (!isset($fields["DEL_INIT_DATE"])) {
            $oCase->setDelInitDate($appUid, $delIndex);
            //$aFields = $oCase->loadCase($appUid, $delIndex);
            $fields = $oCase->loadCase($appUid, $delIndex);
        }

        $auxAppDataApplication = $fields["APP_DATA"]["APPLICATION"];
        $auxAppDataProcess     = $fields["APP_DATA"]["PROCESS"];
        $auxAppDataTask        = $fields["APP_DATA"]["TASK"];
        $auxAppDataIndex       = $fields["APP_DATA"]["INDEX"];

        foreach ($array["form"] as $key => $value) {
            $array["form"][$key] = (string)$array["form"][$key];
            if (isset($fields["APP_DATA"][$key.'_label'])) {
                $array["form"][$key.'_label']   = (string)$array["form"][$key];
            }
        }
        /*
        $_POST['form'] = $array["form"];
        if (!class_exists('Smarty')) {
            require_once(PATH_THIRDPARTY . 'smarty' . PATH_SEP . 'libs' . PATH_SEP . 'Smarty.class.php');  
        }
        $oForm = new \Form( $auxAppDataProcess . "/" . $dynaformUid , PATH_DYNAFORM );
        $oForm->validatePost();
        $array["form"] = $_POST['form'];
        */

        $fields["APP_DATA"] = array_merge($fields["APP_DATA"], G::getSystemConstants());
        $fields["APP_DATA"] = array_merge($fields["APP_DATA"], $array["form"]);

        $fields["APP_DATA"]["APPLICATION"] = $auxAppDataApplication;
        $fields["APP_DATA"]["PROCESS"]     = $auxAppDataProcess;
        $fields["APP_DATA"]["TASK"]        = $auxAppDataTask;
        $fields["APP_DATA"]["INDEX"]       = $auxAppDataIndex;

        $aData = array();
        $aData["APP_NUMBER"]       = $fields["APP_NUMBER"];
        $aData["APP_PROC_STATUS"]  = $fields["APP_PROC_STATUS"];
        $aData["APP_DATA"]         = $fields["APP_DATA"];
        $aData["DEL_INDEX"]        = $delIndex;
        $aData["TAS_UID"]          = $fields["APP_DATA"]["TASK"];
        $aData["CURRENT_DYNAFORM"] = $dynaformUid;
        $aData["USER_UID"]         = $usr_uid;
        $aData["APP_STATUS"]       = $fields["APP_STATUS"];
        $aData["PRO_UID"]          = $fields["APP_DATA"]["PROCESS"];

        $oCase->updateCase($appUid, $aData);
    }
Esempio n. 2
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();

            $messageApplication = new \ProcessMaker\BusinessModel\MessageApplication();
            $messageApplication->setFrontEnd($frontEnd);

            //Get data
            $totalMessageEvent = 0;

            $counterStartMessageEvent = 0;
            $counterIntermediateCatchMessageEvent = 0;
            $counter = 0;

            $flagFirstTime = false;

            $messageApplication->frontEndShow("START");

            do {
                $flagNextRecords = false;

                $arrayMessageApplicationUnread = $messageApplication->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 = $messageApplication->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 = $messageApplication->update($messageApplicationUid, array("MSGAPP_STATUS" => "READ"));
                    }

                    $counter++;

                    //Progress bar
                    $messageApplication->frontEndShow("BAR", "Message-Events (unread): " . $counter . "/" . $totalMessageEvent . " " . $messageApplication->progressBar($totalMessageEvent, $counter));

                    $flagNextRecords = true;
                }
            } while ($flagNextRecords);

            $messageApplication->frontEndShow("TEXT", "Total Message-Events unread: " . $totalMessageEvent);
            $messageApplication->frontEndShow("TEXT", "Total cases started: " . $counterStartMessageEvent);
            $messageApplication->frontEndShow("TEXT", "Total cases continued: " . $counterIntermediateCatchMessageEvent);
            $messageApplication->frontEndShow("TEXT", "Total Message-Events pending: " . ($totalMessageEvent - ($counterStartMessageEvent + $counterIntermediateCatchMessageEvent)));

            $messageApplication->frontEndShow("END");
        } catch (\Exception $e) {
            throw $e;
        }
    }
Esempio n. 3
0
 /**
  * Put execute triggers
  *
  * @access public
  * @param string $app_uid , Uid for case
  * @param int $del_index , Index for case
  * @param string $obj_type , Index for case
  * @param string $obj_uid , Index for case
  *
  * @copyright Colosa - Bolivia
  */
 public function putExecuteTriggers($app_uid, $del_index, $obj_type, $obj_uid)
 {
     Validator::isString($app_uid, '$app_uid');
     Validator::appUid($app_uid, '$app_uid');
     Validator::isInteger($del_index, '$del_index');
     $oCase = new \Cases();
     $aField = $oCase->loadCase($app_uid, $del_index);
     $tas_uid = $aField["TAS_UID"];
     $task = new \Tasks();
     $aField["APP_DATA"] = $oCase->executeTriggers($tas_uid, $obj_type, $obj_uid, "AFTER", $aField["APP_DATA"]);
     $aField = $oCase->updateCase($app_uid, $aField);
 }
Esempio n. 4
0
 /**
  * Return Informaction User for derivate
  * assignment Users
  *
  * return array Return an array with Task Case
  */
 public function GetPrepareInformation($usr_uid, $tas_uid, $app_uid, $del_index = null)
 {
     try {
         $oCase = new \Cases();
         $Fields = $oCase->loadCase($app_uid);
         $_SESSION["APPLICATION"] = $app_uid;
         $_SESSION["PROCESS"] = $Fields['PRO_UID'];
         $_SESSION["TASK"] = $tas_uid;
         $_SESSION["INDEX"] = $del_index;
         $_SESSION["USER_LOGGED"] = $usr_uid;
         $_SESSION["USR_USERNAME"] = isset($Fields['APP_DATA']['USR_USERNAME']) ? $Fields['APP_DATA']['USR_USERNAME'] : '';
         $triggers = $oCase->loadTriggers($tas_uid, 'ASSIGN_TASK', '-1', 'BEFORE');
         if (isset($triggers)) {
             $Fields['APP_DATA'] = array_merge($Fields['APP_DATA'], G::getSystemConstants());
             $Fields['APP_DATA'] = $oCase->ExecuteTriggers($tas_uid, 'DYNAFORM', '-1', 'BEFORE', $Fields['APP_DATA']);
             $oCase->updateCase($app_uid, $Fields);
         }
         $oDerivation = new \Derivation();
         $aData = array();
         $aData['APP_UID'] = $app_uid;
         $aData['DEL_INDEX'] = $del_index;
         $aData['USER_UID'] = $usr_uid;
         $derive = $oDerivation->prepareInformation($aData);
         $response = array();
         foreach ($derive as $sKey => &$aValues) {
             $sPriority = '';
             //set priority value
             if ($derive[$sKey]['NEXT_TASK']['TAS_PRIORITY_VARIABLE'] != '') {
                 //TO DO: review this type of assignment
                 if (isset($aData['APP_DATA'][str_replace('@@', '', $derive[$sKey]['NEXT_TASK']['TAS_PRIORITY_VARIABLE'])])) {
                     $sPriority = $aData['APP_DATA'][str_replace('@@', '', $derive[$sKey]['NEXT_TASK']['TAS_PRIORITY_VARIABLE'])];
                 }
             }
             //set priority value
             $taskType = isset($aValues["NEXT_TASK"]["TAS_TYPE"]) ? $aValues["NEXT_TASK"]["TAS_TYPE"] : false;
             $taskMessage = "";
             switch ($taskType) {
                 case "SCRIPT-TASK":
                     $taskMessage = G::LoadTranslation("ID_ROUTE_TO_TASK_SCRIPT_TASK");
                     break;
                 case "INTERMEDIATE-CATCH-TIMER-EVENT":
                     $taskMessage = G::LoadTranslation("ID_ROUTE_TO_TASK_INTERMEDIATE_CATCH_TIMER_EVENT");
                     break;
             }
             switch ($aValues['NEXT_TASK']['TAS_ASSIGN_TYPE']) {
                 case 'EVALUATE':
                 case 'REPORT_TO':
                 case 'BALANCED':
                 case 'SELF_SERVICE':
                     $taskAss = array();
                     $taskAss['taskId'] = $aValues['NEXT_TASK']['TAS_UID'];
                     $taskAss['taskName'] = $aValues['NEXT_TASK']['TAS_TITLE'];
                     $taskAss['taskAssignType'] = $aValues['NEXT_TASK']['TAS_ASSIGN_TYPE'];
                     $taskAss['taskDefProcCode'] = $aValues['NEXT_TASK']['TAS_DEF_PROC_CODE'];
                     $taskAss['delPriority'] = isset($aValues['NEXT_TASK']['DEL_PRIORITY']) ? $aValues['NEXT_TASK']['DEL_PRIORITY'] : "";
                     $taskAss['taskParent'] = $aValues['NEXT_TASK']['TAS_PARENT'];
                     $taskAss['taskMessage'] = $taskType ? $taskMessage : "";
                     $users = array();
                     $users['userId'] = $derive[$sKey]['NEXT_TASK']['USER_ASSIGNED']['USR_UID'];
                     $users['userFullName'] = strip_tags($derive[$sKey]['NEXT_TASK']['USER_ASSIGNED']['USR_FULLNAME']);
                     $taskAss['users'][] = $users;
                     $response[] = $taskAss;
                     break;
                 case 'MANUAL':
                 case "MULTIPLE_INSTANCE":
                 case "MULTIPLE_INSTANCE_VALUE_BASED":
                     $manual = array();
                     $manual['taskId'] = $aValues['NEXT_TASK']['TAS_UID'];
                     $manual['taskName'] = $aValues['NEXT_TASK']['TAS_TITLE'];
                     $manual['taskAssignType'] = $aValues['NEXT_TASK']['TAS_ASSIGN_TYPE'];
                     $manual['taskDefProcCode'] = $aValues['NEXT_TASK']['TAS_DEF_PROC_CODE'];
                     $manual['delPriority'] = isset($aValues['NEXT_TASK']['DEL_PRIORITY']) ? $aValues['NEXT_TASK']['DEL_PRIORITY'] : "";
                     $manual['taskParent'] = $aValues['NEXT_TASK']['TAS_PARENT'];
                     $manual['taskMessage'] = $taskType ? $taskMessage : "";
                     $Aux = array();
                     foreach ($aValues['NEXT_TASK']['USER_ASSIGNED'] as $aUser) {
                         $Aux[$aUser['USR_UID']] = $aUser['USR_FULLNAME'];
                     }
                     asort($Aux);
                     $users = array();
                     foreach ($Aux as $id => $fullname) {
                         $user['userId'] = $id;
                         $user['userFullName'] = $fullname;
                         $users[] = $user;
                     }
                     $manual['users'] = $users;
                     $response[] = $manual;
                     break;
                 case '':
                     //when this task is the Finish process
                 //when this task is the Finish process
                 case 'nobody':
                     $userFields = $oDerivation->getUsersFullNameFromArray($derive[$sKey]['USER_UID']);
                     $taskAss = array();
                     $taskAss['routeFinishFlag'] = true;
                     $user['userId'] = $derive[$sKey]['USER_UID'];
                     $user['userFullName'] = $userFields['USR_FULLNAME'];
                     $taskAss['users'][] = $user;
                     $response[] = $taskAss;
                     break;
             }
         }
         if (empty($response)) {
             throw new \Exception(G::LoadTranslation("ID_NO_DERIVATION_RULE"));
         }
     } catch (\Exception $e) {
         throw $e;
     }
     return $response;
 }
Esempio n. 5
0
    /**
     * Execute Trigger case
     *
     */
    public function doExecuteTriggerCase($usr_uid, $prj_uid, $act_uid, $cas_uid, $step_uid, $type)
    {
        $userData = $this->getUserData($usr_uid);
        $c = new \Criteria();
        $c->clearSelectColumns();
        $c->addSelectColumn(\StepPeer::STEP_UID);
        $c->addSelectColumn(\StepPeer::STEP_UID_OBJ);
        $c->add(\StepPeer::TAS_UID, $act_uid);
        $c->add(\StepPeer::STEP_TYPE_OBJ, 'DYNAFORM');
        $c->add(\StepPeer::STEP_UID, $step_uid);
        $rs = \StepPeer::doSelectRS($c);
        $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
        $rs->next();
        $row = $rs->getRow();
        $step_uid_obj = $row['STEP_UID_OBJ'];

        $oCase = new \Cases();
        $Fields = $oCase->loadCase( $cas_uid );
        $_SESSION["APPLICATION"] = $cas_uid;
        $_SESSION["PROCESS"] = $prj_uid;
        $_SESSION["TASK"] = $act_uid;
        $_SESSION["USER_LOGGED"] = $usr_uid;
        $_SESSION["USR_USERNAME"] = $userData['firstName'];
        $_SESSION["INDEX"] = $Fields["DEL_INDEX"] = \AppDelegation::getCurrentIndex($cas_uid);
        $Fields['APP_DATA'] = array_merge( $Fields['APP_DATA'], G::getSystemConstants() );
        $triggers = $oCase->loadTriggers( $act_uid, 'DYNAFORM', $step_uid_obj, strtoupper($type) );
        if($triggers){
            $Fields['APP_DATA'] = $oCase->ExecuteTriggers( $act_uid, 'DYNAFORM', $step_uid_obj, strtoupper($type), $Fields['APP_DATA'] );
        }
        $Fields['TAS_UID'] = $act_uid;
        $Fields['CURRENT_DYNAFORM'] = $step_uid_obj;
        $Fields['USER_UID'] = $usr_uid;
        $Fields['PRO_UID'] = $prj_uid;
        $oCase->updateCase( $cas_uid, $Fields );
        $response = array('status' => 'ok');
        return $response;
    }