diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index 490a19ee2..7a00a291a 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -24,38 +24,38 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ -require_once 'classes/model/Content.php'; -require_once 'classes/model/Process.php'; -require_once 'classes/model/Task.php'; -require_once 'classes/model/Route.php'; -require_once 'classes/model/SwimlanesElements.php'; -require_once 'classes/model/InputDocument.php'; -require_once 'classes/model/ObjectPermission.php'; -require_once 'classes/model/OutputDocument.php'; -require_once 'classes/model/Step.php'; -require_once 'classes/model/StepTrigger.php'; -require_once 'classes/model/Dynaform.php'; -require_once 'classes/model/Triggers.php'; -require_once 'classes/model/Groupwf.php'; -require_once 'classes/model/ReportTable.php'; -require_once 'classes/model/ReportVar.php'; -require_once 'classes/model/DbSource.php'; -require_once 'classes/model/StepSupervisor.php'; -require_once 'classes/model/SubProcess.php'; -require_once 'classes/model/CaseTracker.php'; -require_once 'classes/model/CaseTrackerObject.php'; -require_once 'classes/model/Stage.php'; -require_once 'classes/model/TaskUser.php'; -require_once 'classes/model/FieldCondition.php'; -require_once 'classes/model/Event.php'; -require_once 'classes/model/CaseScheduler.php'; -require_once 'classes/model/ProcessCategory.php'; -require_once 'classes/model/Configuration.php'; +//require_once 'classes/model/Content.php'; +//require_once 'classes/model/Process.php'; +//require_once 'classes/model/Task.php'; +//require_once 'classes/model/Route.php'; +//require_once 'classes/model/SwimlanesElements.php'; +//require_once 'classes/model/InputDocument.php'; +//require_once 'classes/model/ObjectPermission.php'; +//require_once 'classes/model/OutputDocument.php'; +//require_once 'classes/model/Step.php'; +//require_once 'classes/model/StepTrigger.php'; +//require_once 'classes/model/Dynaform.php'; +//require_once 'classes/model/Triggers.php'; +//require_once 'classes/model/Groupwf.php'; +//require_once 'classes/model/ReportTable.php'; +//require_once 'classes/model/ReportVar.php'; +//require_once 'classes/model/DbSource.php'; +//require_once 'classes/model/StepSupervisor.php'; +//require_once 'classes/model/SubProcess.php'; +//require_once 'classes/model/CaseTracker.php'; +//require_once 'classes/model/CaseTrackerObject.php'; +//require_once 'classes/model/Stage.php'; +//require_once 'classes/model/TaskUser.php'; +//require_once 'classes/model/FieldCondition.php'; +//require_once 'classes/model/Event.php'; +//require_once 'classes/model/CaseScheduler.php'; +//require_once 'classes/model/ProcessCategory.php'; +//require_once 'classes/model/Configuration.php'; -G::LoadClass( 'tasks' ); -G::LoadClass( 'reportTables' ); -G::LoadClass( 'processMap' ); -G::LoadThirdParty( 'pear/json', 'class.json' ); +//G::LoadClass( 'tasks' ); +//G::LoadClass( 'reportTables' ); +//G::LoadClass( 'processMap' ); +//G::LoadThirdParty( 'pear/json', 'class.json' ); class Processes { diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index 3ef625110..806dbff6e 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -25,43 +25,43 @@ */ //It works with the table CONFIGURATION in a WF dataBase -require_once ("classes/model/Application.php"); -require_once ("classes/model/AppCacheView.php"); -require_once ("classes/model/AppDelegation.php"); -require_once ("classes/model/AppDocument.php"); -require_once ("classes/model/AppDelay.php"); -require_once ("classes/model/AppNotes.php"); -require_once ("classes/model/AppThread.php"); -require_once ("classes/model/Department.php"); -require_once ("classes/model/Dynaform.php"); -require_once ("classes/model/Groupwf.php"); -require_once ("classes/model/InputDocument.php"); -require_once ("classes/model/Language.php"); -require_once ("classes/model/OutputDocument.php"); -require_once ("classes/model/Process.php"); -require_once ("classes/model/ReportTable.php"); -require_once ("classes/model/ReportVar.php"); -require_once ("classes/model/Route.php"); -require_once ("classes/model/Step.php"); -require_once ("classes/model/StepTrigger.php"); -require_once ("classes/model/Task.php"); -require_once ("classes/model/TaskUser.php"); -require_once ("classes/model/Triggers.php"); -require_once ("classes/model/Users.php"); -require_once ("classes/model/Session.php"); -require_once ("classes/model/Content.php"); -G::LoadClass( "ArrayPeer" ); -G::LoadClass( "BasePeer" ); +//require_once ("classes/model/Application.php"); +//require_once ("classes/model/AppCacheView.php"); +//require_once ("classes/model/AppDelegation.php"); +//require_once ("classes/model/AppDocument.php"); +//require_once ("classes/model/AppDelay.php"); +//require_once ("classes/model/AppNotes.php"); +//require_once ("classes/model/AppThread.php"); +//require_once ("classes/model/Department.php"); +//require_once ("classes/model/Dynaform.php"); +//require_once ("classes/model/Groupwf.php"); +//require_once ("classes/model/InputDocument.php"); +//require_once ("classes/model/Language.php"); +//require_once ("classes/model/OutputDocument.php"); +//require_once ("classes/model/Process.php"); +//require_once ("classes/model/ReportTable.php"); +//require_once ("classes/model/ReportVar.php"); +//require_once ("classes/model/Route.php"); +//require_once ("classes/model/Step.php"); +//require_once ("classes/model/StepTrigger.php"); +//require_once ("classes/model/Task.php"); +//require_once ("classes/model/TaskUser.php"); +//require_once ("classes/model/Triggers.php"); +//require_once ("classes/model/Users.php"); +//require_once ("classes/model/Session.php"); +//require_once ("classes/model/Content.php"); +//G::LoadClass( "ArrayPeer" ); +//G::LoadClass( "BasePeer" ); G::LoadClass( 'case' ); -G::LoadClass( 'derivation' ); -G::LoadClass( 'groups' ); -G::LoadClass( 'sessions' ); -G::LoadClass( 'processes' ); -G::LoadClass( 'processMap' ); -G::LoadClass( 'pmScript' ); -G::LoadClass( 'spool' ); -G::LoadClass( 'tasks' ); -G::LoadClass( 'wsResponse' ); +//G::LoadClass( 'derivation' ); +//G::LoadClass( 'groups' ); +//G::LoadClass( 'sessions' ); +//G::LoadClass( 'processes' ); +//G::LoadClass( 'processMap' ); +//G::LoadClass( 'pmScript' ); +//G::LoadClass( 'spool' ); +//G::LoadClass( 'tasks' ); +//G::LoadClass( 'wsResponse' ); /** * Copyright (C) 2009 COLOSA diff --git a/workflow/engine/src/BusinessModel/Cases.php b/workflow/engine/src/BusinessModel/Cases.php index 07ddab69a..db8136c41 100644 --- a/workflow/engine/src/BusinessModel/Cases.php +++ b/workflow/engine/src/BusinessModel/Cases.php @@ -117,5 +117,276 @@ class Cases } return $result; } + + /** + * Get data of a Case + * + * @param string $caseUid Unique id of Case + * @param string $userUid Unique id of User + * + * return array Return an array with data of Case Info + */ + public function getCaseInfo($caseUid, $userUid) + { + try { + $solrEnabled = 0; + if (($solrEnv = \System::solrEnv()) !== false) { + \G::LoadClass("AppSolr"); + $appSolr = new \AppSolr( + $solrEnv["solr_enabled"], + $solrEnv["solr_host"], + $solrEnv["solr_instance"] + ); + if ($appSolr->isSolrEnabled() && $solrEnv["solr_enabled"] == true) { + //Check if there are missing records to reindex and reindex them + $appSolr->synchronizePendingApplications(); + $solrEnabled = 1; + } + } + if ($solrEnabled == 1) { + try { + \G::LoadClass("searchIndex"); + $arrayData = array(); + $delegationIndexes = array(); + $columsToInclude = array("APP_UID"); + $solrSearchText = null; + //Todo + $solrSearchText = $solrSearchText . (($solrSearchText != null)? " OR " : null) . "(APP_STATUS:TO_DO AND APP_ASSIGNED_USERS:" . $userUid . ")"; + $delegationIndexes[] = "APP_ASSIGNED_USER_DEL_INDEX_" . $userUid . "_txt"; + //Draft + $solrSearchText = $solrSearchText . (($solrSearchText != null)? " OR " : null) . "(APP_STATUS:DRAFT AND APP_DRAFT_USER:" . $userUid . ")"; + //Index is allways 1 + $solrSearchText = "($solrSearchText)"; + //Add del_index dynamic fields to list of resulting columns + $columsToIncludeFinal = array_merge($columsToInclude, $delegationIndexes); + $solrRequestData = \Entity_SolrRequestData::createForRequestPagination( + array( + "workspace" => $solrEnv["solr_instance"], + "startAfter" => 0, + "pageSize" => 1000, + "searchText" => $solrSearchText, + "numSortingCols" => 1, + "sortCols" => array("APP_NUMBER"), + "sortDir" => array(strtolower("DESC")), + "includeCols" => $columsToIncludeFinal, + "resultFormat" => "json" + ) + ); + //Use search index to return list of cases + $searchIndex = new \BpmnEngine_Services_SearchIndex($appSolr->isSolrEnabled(), $solrEnv["solr_host"]); + //Execute query + $solrQueryResult = $searchIndex->getDataTablePaginatedList($solrRequestData); + //Get the missing data from database + $arrayApplicationUid = array(); + foreach ($solrQueryResult->aaData as $i => $data) { + $arrayApplicationUid[] = $data["APP_UID"]; + } + $aaappsDBData = $appSolr->getListApplicationDelegationData($arrayApplicationUid); + foreach ($solrQueryResult->aaData as $i => $data) { + //Initialize array + $delIndexes = array(); //Store all the delegation indexes + //Complete empty values + $applicationUid = $data["APP_UID"]; //APP_UID + //Get all the indexes returned by Solr as columns + for($i = count($columsToInclude); $i <= count($data) - 1; $i++) { + if (is_array($data[$columsToIncludeFinal[$i]])) { + foreach ($data[$columsToIncludeFinal[$i]] as $delIndex) { + $delIndexes[] = $delIndex; + } + } + } + //Verify if the delindex is an array + //if is not check different types of repositories + //the delegation index must always be defined. + if (count($delIndexes) == 0) { + $delIndexes[] = 1; // the first default index + } + //Remove duplicated + $delIndexes = array_unique($delIndexes); + //Get records + foreach ($delIndexes as $delIndex) { + $aRow = array(); + //Copy result values to new row from Solr server + $aRow["APP_UID"] = $data["APP_UID"]; + //Get delegation data from DB + //Filter data from db + $indexes = $appSolr->aaSearchRecords($aaappsDBData, array( + "APP_UID" => $applicationUid, + "DEL_INDEX" => $delIndex + )); + foreach ($indexes as $index) { + $row = $aaappsDBData[$index]; + } + if(!isset($row)) + { + continue; + } + $aRow["APP_NUMBER"] = $row["APP_NUMBER"]; + $aRow["APP_STATUS"] = $row["APP_STATUS"]; + $aRow["PRO_UID"] = $row["PRO_UID"]; + $aRow["DEL_INDEX"] = $row["DEL_INDEX"]; + $arrayData[] = array( + "guid" => $aRow["APP_UID"], + "name" => $aRow["APP_NUMBER"], + "status" => $aRow["APP_STATUS"], + "delIndex" => $aRow["DEL_INDEX"], + "processId" => $aRow["PRO_UID"] + ); + } + } + $case = array(); + for ($i = 0; $i<=count($arrayData)-1; $i++) { + if ($arrayData[$i]["guid"] == $caseUid) { + $case = $arrayData[$i]; + } + } + return $case; + } catch (\InvalidIndexSearchTextException $e) { + $arrayData = array(); + $arrayData[] = array ( + "guid" => $e->getMessage(), + "name" => $e->getMessage(), + "status" => $e->getMessage(), + "delIndex" => $e->getMessage(), + "processId" => $e->getMessage() + ); + return $arrayData; + } + } else { + $arrayData = array(); + $criteria = new \Criteria("workflow"); + $criteria->addSelectColumn(\AppCacheViewPeer::APP_UID); + $criteria->addSelectColumn(\AppCacheViewPeer::DEL_INDEX); + $criteria->addSelectColumn(\AppCacheViewPeer::APP_NUMBER); + $criteria->addSelectColumn(\AppCacheViewPeer::APP_STATUS); + $criteria->addSelectColumn(\AppCacheViewPeer::PRO_UID); + $criteria->add(\AppCacheViewPeer::USR_UID, $userUid); + $criteria->add(\AppCacheViewPeer::APP_UID, $caseUid); + $criteria->add( + //ToDo - getToDo() + $criteria->getNewCriterion(\AppCacheViewPeer::APP_STATUS, "TO_DO", \CRITERIA::EQUAL)->addAnd( + $criteria->getNewCriterion(\AppCacheViewPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL))->addAnd( + $criteria->getNewCriterion(\AppCacheViewPeer::APP_THREAD_STATUS, "OPEN"))->addAnd( + $criteria->getNewCriterion(\AppCacheViewPeer::DEL_THREAD_STATUS, "OPEN")) + )->addOr( + //Draft - getDraft() + $criteria->getNewCriterion(\AppCacheViewPeer::APP_STATUS, "DRAFT", \CRITERIA::EQUAL)->addAnd( + $criteria->getNewCriterion(\AppCacheViewPeer::APP_THREAD_STATUS, "OPEN"))->addAnd( + $criteria->getNewCriterion(\AppCacheViewPeer::DEL_THREAD_STATUS, "OPEN")) + ); + $criteria->addDescendingOrderByColumn(\AppCacheViewPeer::APP_NUMBER); + $rsCriteria = \AppCacheViewPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + $arrayData[] = array( + "guid" => $row["APP_UID"], + "name" => $row["APP_NUMBER"], + "status" => $row["APP_STATUS"], + "delIndex" => $row["DEL_INDEX"], + "processId" => $row["PRO_UID"] + ); + } + return $arrayData; + } + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Get data Task Case + * + * @param string $caseUid Unique id of Case + * + * return array Return an array with Task Case + */ + public function getTaskCase($caseUid) + { + try { + \G::LoadClass('wsBase'); + $ws = new \wsBase(); + $fields = $ws->taskCase($caseUid); + //Return + return $fields; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Add New Case + * + * @param string $prjUid Unique id of Project + * @param string $actUid Unique id of Activity + * @param string $caseUid Unique id of Case + * @param array $variables + * + * return array Return an array with Task Case + */ + public function addCase($prjUid, $actUid, $userUid, $variables) + { + try { + \G::LoadClass('wsBase'); + $ws = new \wsBase(); + if ($variables) { + $variables = array_shift($variables); + } + $fields = $ws->newCase($prjUid, $userUid, $actUid, $variables); + //Return + return $fields; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Add New Case Impersonate + * + * @param string $prjUid Unique id of Project + * @param string $usrUid Unique id of User + * @param string $caseUid Unique id of Case + * @param array $variables + * + * return array Return an array with Task Case + */ + public function addCaseImpersonate($prjUid, $usrUid, $caseUid, $variables) + { + try { + \G::LoadClass('wsBase'); + $ws = new \wsBase(); + $fields = $ws->newCaseImpersonate($prjUid, $usrUid, $variables, '1352844695225ff5fe54de2005407079'); + //Return + return $fields; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Reassign Case + * + * @param string $caseUid Unique id of Case + * @param string $userUid Unique id of User + * @param string $delIndex + * @param string $userUidSource Unique id of User Source + * @param string $userUid $userUidTarget id of User Target + * + * return array Return an array with Task Case + */ + + public function updateReassignCase($caseUid, $userUid, $delIndex, $userUidSource, $userUidTarget) + { + try { + \G::LoadClass('wsBase'); + $ws = new \wsBase(); + $fields = $ws->reassignCase($userUid, $caseUid, $delIndex, $userUidSource, $userUidTarget); + //Return + return $fields; + } catch (\Exception $e) { + throw $e; + } + } + } diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Cases.php b/workflow/engine/src/Services/Api/ProcessMaker/Cases.php index 92f9aae48..34f0e83a5 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Cases.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Cases.php @@ -164,5 +164,121 @@ class Cases extends Api throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } + + /** + * @url GET /:cas_uid + * + * @param string $cas_uid {@min 32}{@max 32} + */ + public function doGetCaseInfo($cas_uid) + { + try { + $userUid = $this->getUserId(); + $cases = new \BusinessModel\Cases(); + $arrayData = $cases->getCaseInfo($cas_uid, $userUid); + $response = $arrayData; + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url GET /:cas_uid/current-task + * + * @param string $cas_uid {@min 32}{@max 32} + */ + public function doGetTaskCase($cas_uid) + { + try { + $cases = new \BusinessModel\Cases(); + $arrayData = $cases->getTaskCase($cas_uid); + $response = $arrayData; + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url POST + * + * @param string $prj_uid {@from body} {@min 32}{@max 32} + * @param string $act_uid {@from body} {@min 32}{@max 32} + * @param array $variables {@from body} + * + */ + public function doPostCase($prj_uid, $act_uid, $variables=null) + { + try { + $userUid = $this->getUserId(); + $cases = new \BusinessModel\Cases(); + $arrayData = $cases->addCase($prj_uid, $act_uid, $userUid, $variables); + $response = $arrayData; + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url POST /impersonate + * + * @param string $prj_uid {@from body} {@min 32}{@max 32} + * @param string $usr_uid {@from body} {@min 32}{@max 32} + * @param string $act_uid {@from body} {@min 32}{@max 32} + * @param array $variables {@from body} + */ + public function doPostCaseImpersonate($prj_uid, $usr_uid, $act_uid, $variables) + { + try { + $cases = new \BusinessModel\Cases(); + $arrayData = $cases->addCaseImpersonate($prj_uid, $usr_uid, $act_uid, $variables); + $response = $arrayData; + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url PUT /:cas_uid/reassign-case + * + * @param string $del_index {@from body} + * @param string $usr_uid_source {@from body} {@min 32}{@max 32} + * @param string $usr_uid_target {@from body} {@min 32}{@max 32} + */ + public function doPutReassignCase($cas_uid, $del_index, $usr_uid_source, $usr_uid_target) + { + try { + $userUid = $this->getUserId(); + $cases = new \BusinessModel\Cases(); + $arrayData = $cases->updateReassignCase($cas_uid, $userUid, $del_index, $usr_uid_source, $usr_uid_target); + $response = $arrayData; + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url PUT /:cas_uid/route-case + * + * @param string $del_index {@from body} + * @param string $usr_uid_source {@from body} {@min 32}{@max 32} + * @param string $usr_uid_target {@from body} {@min 32}{@max 32} + */ + public function doPutRouteCase($cas_uid, $del_index, $usr_uid_source, $usr_uid_target) + { + try { + $userUid = $this->getUserId(); + $cases = new \BusinessModel\Cases(); + $arrayData = $cases->updateRouteCase($cas_uid, $userUid, $del_index, $usr_uid_source, $usr_uid_target); + $response = $arrayData; + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } }