diff --git a/workflow/engine/src/BusinessModel/CaseTracker.php b/workflow/engine/src/BusinessModel/CaseTracker.php new file mode 100644 index 000000000..3b888168d --- /dev/null +++ b/workflow/engine/src/BusinessModel/CaseTracker.php @@ -0,0 +1,466 @@ + $value) { + $arrayData[$key] = $value; + } + + return $arrayData; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Update Case Tracker data of a Process + * + * @param string $processUid Unique id of Process + * @param array $arrayData Data + * + * return array Return data of the Case Tracker updated + */ + public function update($processUid, $arrayData) + { + try { + $arrayDataIni = $arrayData; + + //Verify data + $process = new \Process(); + + if (!$process->exists($processUid)) { + throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid, "PROCESS"), "The UID \"{0}\" doesn't exist in table {1}"))); + } + + //Update + $caseTracker = new \CaseTracker(); + + $arrayData = array("PRO_UID" => $processUid); + + if (isset($arrayDataIni["map_type"])) { + $arrayData["CT_MAP_TYPE"] = $arrayDataIni["map_type"]; + } + + if (isset($arrayDataIni["routing_history"])) { + $arrayData["CT_DERIVATION_HISTORY"] = ($arrayDataIni["routing_history"])? 1 : 0; + } + + if (isset($arrayDataIni["message_history"])) { + $arrayData["CT_MESSAGE_HISTORY"] = ($arrayDataIni["message_history"])? 1 : 0; + } + + $result = $caseTracker->update($arrayData); + + $arrayData = $arrayDataIni; + + //Return + return $arrayData; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Get Case Tracker data of a Process + * + * @param string $processUid Unique id of Process + * + * return array Return an array with data of Case Tracker of a Process + */ + public function getCaseTracker($processUid) + { + try { + $arrayCaseTracker = array(); + + //Verify data + $process = new \Process(); + + if (!$process->exists($processUid)) { + throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid, "PROCESS"), "The UID \"{0}\" doesn't exist in table {1}"))); + } + + //Get data + $criteria = new \Criteria(); + + $criteria->add(\CaseTrackerPeer::PRO_UID, $processUid, \Criteria::EQUAL); + + $rsCriteria = \CaseTrackerPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $arrayCaseTracker = $row; + } else { + $caseTracker = new \CaseTracker(); + + $arrayCaseTracker = array( + "PRO_UID" => $processUid, + "CT_MAP_TYPE" => "PROCESSMAP", + "CT_DERIVATION_HISTORY" => 1, + "CT_MESSAGE_HISTORY" => 1 + ); + + $caseTracker->create($arrayCaseTracker); + } + + return array( + "map_type" => $arrayCaseTracker["CT_MAP_TYPE"], + "routing_history" => ($arrayCaseTracker["CT_DERIVATION_HISTORY"] == 1)? true : false, + "message_history" => ($arrayCaseTracker["CT_MESSAGE_HISTORY"] == 1)? true : false + ); + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Get available Case Tracker Objects of a Process + * + * @param string $processUid Unique id of Process + * + * return array Return an array with the Case Tracker Objects available of a Process + */ + public function getAvailableCaseTrackerObjects($processUid) + { + try { + $arrayAvailableCaseTrackerObject = array(); + + //Verify data + $process = new \Process(); + + if (!$process->exists($processUid)) { + throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid, "PROCESS"), "The UID \"{0}\" doesn't exist in table {1}"))); + } + + //Get Uids + $arrayDynaFormUid = array(); + $arrayInputDocumentUid = array(); + $arrayOutputDocumentUid = array(); + + $criteria = new \Criteria("workflow"); + + $criteria->add(\CaseTrackerObjectPeer::PRO_UID, $processUid, \Criteria::EQUAL); + + $rsCriteria = \CaseTrackerObjectPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + switch ($row["CTO_TYPE_OBJ"]) { + case "DYNAFORM": + $arrayDynaFormUid[] = $row["CTO_UID_OBJ"]; + break; + case "INPUT_DOCUMENT": + $arrayInputDocumentUid[] = $row["CTO_UID_OBJ"]; + break; + case "OUTPUT_DOCUMENT": + $arrayOutputDocumentUid[] = $row["CTO_UID_OBJ"]; + break; + } + } + + //Array DB + $arrayCaseTrackerObject = array(); + + $arrayCaseTrackerObject[] = array( + "obj_uid" => "char", + "obj_title" => "char", + "obj_description" => "char", + "obj_type" => "char" + ); + + $delimiter = \DBAdapter::getStringDelimiter(); + + //DynaForms + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\DynaformPeer::DYN_UID); + $criteria->addAsColumn("DYN_TITLE", "CT.CON_VALUE"); + $criteria->addAsColumn("DYN_DESCRIPTION", "CD.CON_VALUE"); + + $criteria->addAlias("CT", \ContentPeer::TABLE_NAME); + $criteria->addAlias("CD", \ContentPeer::TABLE_NAME); + + $arrayCondition = array(); + $arrayCondition[] = array(\DynaformPeer::DYN_UID, "CT.CON_ID", \Criteria::EQUAL); + $arrayCondition[] = array("CT.CON_CATEGORY", $delimiter . "DYN_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(\DynaformPeer::DYN_UID, "CD.CON_ID", \Criteria::EQUAL); + $arrayCondition[] = array("CD.CON_CATEGORY", $delimiter . "DYN_DESCRIPTION" . $delimiter, \Criteria::EQUAL); + $arrayCondition[] = array("CD.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL); + $criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); + + $criteria->add(\DynaformPeer::PRO_UID, $processUid, \Criteria::EQUAL); + $criteria->add(\DynaformPeer::DYN_UID, $arrayDynaFormUid, \Criteria::NOT_IN); + $criteria->add(\DynaformPeer::DYN_TYPE, "xmlform", \Criteria::EQUAL); + + $rsCriteria = \DynaformPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + if ($row["DYN_TITLE"] . "" == "") { + //There is no transaltion for this Document name, try to get/regenerate the label + $row["DYN_TITLE"] = \Content::Load("DYN_TITLE", "", $row["DYN_UID"], SYS_LANG); + } + + $arrayCaseTrackerObject[] = array( + "obj_uid" => $row["DYN_UID"], + "obj_title" => $row["DYN_TITLE"], + "obj_description" => $row["DYN_DESCRIPTION"], + "obj_type" => "DYNAFORM" + ); + } + + //InputDocuments + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\InputDocumentPeer::INP_DOC_UID); + $criteria->addAsColumn("INP_DOC_TITLE", "CT.CON_VALUE"); + $criteria->addAsColumn("INP_DOC_DESCRIPTION", "CD.CON_VALUE"); + + $criteria->addAlias("CT", \ContentPeer::TABLE_NAME); + $criteria->addAlias("CD", \ContentPeer::TABLE_NAME); + + $arrayCondition = array(); + $arrayCondition[] = array(\InputDocumentPeer::INP_DOC_UID, "CT.CON_ID", \Criteria::EQUAL); + $arrayCondition[] = array("CT.CON_CATEGORY", $delimiter . "INP_DOC_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(\InputDocumentPeer::INP_DOC_UID, "CD.CON_ID", \Criteria::EQUAL); + $arrayCondition[] = array("CD.CON_CATEGORY", $delimiter . "INP_DOC_DESCRIPTION" . $delimiter, \Criteria::EQUAL); + $arrayCondition[] = array("CD.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL); + $criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); + + $criteria->add(\InputDocumentPeer::PRO_UID, $processUid, \Criteria::EQUAL); + $criteria->add(\InputDocumentPeer::INP_DOC_UID, $arrayInputDocumentUid, \Criteria::NOT_IN); + + $rsCriteria = \InputDocumentPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + if ($row["INP_DOC_TITLE"] . "" == "") { + //There is no transaltion for this Document name, try to get/regenerate the label + $row["INP_DOC_TITLE"] = \Content::Load("INP_DOC_TITLE", "", $row["INP_DOC_UID"], SYS_LANG); + } + + $arrayCaseTrackerObject[] = array( + "obj_uid" => $row["INP_DOC_UID"], + "obj_title" => $row["INP_DOC_TITLE"], + "obj_description" => $row["INP_DOC_DESCRIPTION"], + "obj_type" => "INPUT_DOCUMENT" + ); + } + + //OutputDocuments + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\OutputDocumentPeer::OUT_DOC_UID); + $criteria->addAsColumn("OUT_DOC_TITLE", "CT.CON_VALUE"); + $criteria->addAsColumn("OUT_DOC_DESCRIPTION", "CD.CON_VALUE"); + + $criteria->addAlias("CT", \ContentPeer::TABLE_NAME); + $criteria->addAlias("CD", \ContentPeer::TABLE_NAME); + + $arrayCondition = array(); + $arrayCondition[] = array(\OutputDocumentPeer::OUT_DOC_UID, "CT.CON_ID", \Criteria::EQUAL); + $arrayCondition[] = array("CT.CON_CATEGORY", $delimiter . "OUT_DOC_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(\OutputDocumentPeer::OUT_DOC_UID, "CD.CON_ID", \Criteria::EQUAL); + $arrayCondition[] = array("CD.CON_CATEGORY", $delimiter . "OUT_DOC_DESCRIPTION" . $delimiter, \Criteria::EQUAL); + $arrayCondition[] = array("CD.CON_LANG", $delimiter . SYS_LANG . $delimiter, \Criteria::EQUAL); + $criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); + + $criteria->add(\OutputDocumentPeer::PRO_UID, $processUid, \Criteria::EQUAL); + $criteria->add(\OutputDocumentPeer::OUT_DOC_UID, $arrayOutputDocumentUid, \Criteria::NOT_IN); + + $rsCriteria = \OutputDocumentPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + if ($row["OUT_DOC_TITLE"] . "" == "") { + //There is no transaltion for this Document name, try to get/regenerate the label + $row["OUT_DOC_TITLE"] = \Content::Load("OUT_DOC_TITLE", "", $row["OUT_DOC_UID"], SYS_LANG); + } + + $arrayCaseTrackerObject[] = array( + "obj_uid" => $row["OUT_DOC_UID"], + "obj_title" => $row["OUT_DOC_TITLE"], + "obj_description" => $row["OUT_DOC_DESCRIPTION"], + "obj_type" => "OUTPUT_DOCUMENT" + ); + } + + //Set data + \G::LoadClass("ArrayPeer"); + + global $_DBArray; + + $_DBArray = (isset($_SESSION["_DBArray"]))? $_SESSION["_DBArray"] : ""; + $_DBArray["CASE_TRACKER_OBJECT"] = $arrayCaseTrackerObject; + + $_SESSION["_DBArray"] = $_DBArray; + + $criteria = new \Criteria("dbarray"); + + $criteria->setDBArrayTable("CASE_TRACKER_OBJECT"); + $criteria->addAscendingOrderByColumn("obj_type"); + $criteria->addAscendingOrderByColumn("obj_title"); + + $rsCriteria = \ArrayBasePeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $arrayAvailableCaseTrackerObject[] = $row; + } + + return $arrayAvailableCaseTrackerObject; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Get all Case Tracker Objects of a Process + * + * @param string $processUid Unique id of Process + * + * return array Return an array with all Case Tracker Objects of a Process + */ + public function getCaseTrackerObjects($processUid) + { + try { + $arrayCaseTrackerObject = array(); + + //Verify data + $process = new \Process(); + + if (!$process->exists($processUid)) { + throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid, "PROCESS"), "The UID \"{0}\" doesn't exist in table {1}"))); + } + + $dynaform = new \Dynaform(); + $inputDocument = new \InputDocument(); + $outputDocument = new \OutputDocument(); + + //Array DB + $arraydbCaseTrackerObject = array(); + + $arraydbCaseTrackerObject[] = array( + "cto_uid" => "char", + "cto_type_obj" => "char", + "cto_uid_obj" => "char", + "cto_condition" => "char", + "cto_position" => "integer", + "obj_title" => "char", + "obj_description" => "char" + ); + + $criteria = new \Criteria("workflow"); + + $criteria->add(\CaseTrackerObjectPeer::PRO_UID, $processUid, \Criteria::EQUAL); + + $rsCriteria = \CaseTrackerObjectPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $titleObj = ""; + $descriptionObj = ""; + + switch ($row["CTO_TYPE_OBJ"]) { + case "DYNAFORM": + $arrayData = $dynaform->load($row["CTO_UID_OBJ"]); + + $titleObj = $arrayData["DYN_TITLE"]; + $descriptionObj = $arrayData["DYN_DESCRIPTION"]; + break; + case "INPUT_DOCUMENT": + $arrayData = $inputDocument->getByUid($row["CTO_UID_OBJ"]); + + $titleObj = $arrayData["INP_DOC_TITLE"]; + $descriptionObj = $arrayData["INP_DOC_DESCRIPTION"]; + break; + case "OUTPUT_DOCUMENT": + $arrayData = $outputDocument->getByUid($row["CTO_UID_OBJ"]); + + $titleObj = $arrayData["OUT_DOC_TITLE"]; + $descriptionObj = $arrayData["OUT_DOC_DESCRIPTION"]; + break; + } + + $arraydbCaseTrackerObject[] = array( + "cto_uid" => $row["CTO_UID"], + "cto_type_obj" => $row["CTO_TYPE_OBJ"], + "cto_uid_obj" => $row["CTO_UID_OBJ"], + "cto_condition" => $row["CTO_CONDITION"], + "cto_position" => (int)($row["CTO_POSITION"]), + "obj_title" => $titleObj, + "obj_description" => $descriptionObj + ); + } + + //Set data + \G::LoadClass("ArrayPeer"); + + global $_DBArray; + + $_DBArray = (isset($_SESSION["_DBArray"]))? $_SESSION["_DBArray"] : ""; + $_DBArray["CASE_TRACKER_OBJECT"] = $arraydbCaseTrackerObject; + + $_SESSION["_DBArray"] = $_DBArray; + + $criteria = new \Criteria("dbarray"); + + $criteria->setDBArrayTable("CASE_TRACKER_OBJECT"); + $criteria->addAscendingOrderByColumn("cto_position"); + + $rsCriteria = \ArrayBasePeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $arrayCaseTrackerObject[] = $row; + } + + return $arrayCaseTrackerObject; + } catch (\Exception $e) { + throw $e; + } + } +} + diff --git a/workflow/engine/src/BusinessModel/CaseTrackerObject.php b/workflow/engine/src/BusinessModel/CaseTrackerObject.php new file mode 100644 index 000000000..2ed1d4b73 --- /dev/null +++ b/workflow/engine/src/BusinessModel/CaseTrackerObject.php @@ -0,0 +1,333 @@ +addSelectColumn(\DynaformPeer::PRO_UID); + // $criteria->add(\DynaformPeer::DYN_UID, $caseTrackerObjectUid, \Criteria::EQUAL); + // + // $rsCriteria = \DynaformPeer::doSelectRS($criteria); + // $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + // + // if ($rsCriteria->next()) { + // return $rsCriteria->getRow(); + // } else { + // throw (new \Exception(str_replace(array("{0}", "{1}"), array($caseTrackerObjectUid, "DYNAFORM"), "The UID \"{0}\" doesn't exist in table {1}"))); + // } + // } catch (\Exception $e) { + // throw $e; + // } + //} + + /** + * Get data from a request data + * + * @param object $requestData Request data + * + * return array Return an array with data of request data + */ + public function getArrayDataFromRequestData($requestData) + { + try { + $arrayData = array(); + + $requestData = (array)($requestData); + + foreach ($requestData as $key => $value) { + $arrayData[$key] = $value; + } + + return $arrayData; + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Verify if exists the record in table CASE_TRACKER_OBJECT + * + * @param string $processUid Unique id of Process + * @param string $type Type of Step (DYNAFORM, INPUT_DOCUMENT, OUTPUT_DOCUMENT) + * @param string $objectUid Unique id of Object + * @param int $position Position + * @param string $caseTrackerObjectUidExclude Unique id of Case Tracker Object to exclude + * + * return bool Return true if exists the record in table CASE_TRACKER_OBJECT, false otherwise + */ + public function existsRecord($processUid, $type, $objectUid, $position = 0, $caseTrackerObjectUidExclude = "") + { + try { + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\CaseTrackerObjectPeer::CTO_UID); + $criteria->add(\CaseTrackerObjectPeer::PRO_UID, $processUid, \Criteria::EQUAL); + + if ($caseTrackerObjectUidExclude != "") { + $criteria->add(\CaseTrackerObjectPeer::CTO_UID, $caseTrackerObjectUidExclude, \Criteria::NOT_EQUAL); + } + + if ($type != "") { + $criteria->add(\CaseTrackerObjectPeer::CTO_TYPE_OBJ, $type, \Criteria::EQUAL); + } + + if ($objectUid != "") { + $criteria->add(\CaseTrackerObjectPeer::CTO_UID_OBJ, $objectUid, \Criteria::EQUAL); + } + + if ($position > 0) { + $criteria->add(\CaseTrackerObjectPeer::CTO_POSITION, $position, \Criteria::EQUAL); + } + + $rsCriteria = \CaseTrackerObjectPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteria->next()) { + return true; + } else { + return false; + } + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Create Case Tracker Object for a Process + * + * @param string $processUid Unique id of Process + * @param array $arrayData Data + * + * return array Return data of the new Case Tracker Object created + */ + public function create($processUid, $arrayData) + { + try { + $arrayData = array_change_key_case($arrayData, CASE_UPPER); + + unset($arrayData["CTO_UID"]); + + //Verify data + $process = new \Process(); + + if (!$process->exists($processUid)) { + throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid, "PROCESS"), "The UID \"{0}\" doesn't exist in table {1}"))); + } + + if (!isset($arrayData["CTO_TYPE_OBJ"])) { + throw (new \Exception(str_replace(array("{0}"), array("CTO_TYPE_OBJ"), "The \"{0}\" attribute is not defined"))); + } + + if (!isset($arrayData["CTO_UID_OBJ"])) { + throw (new \Exception(str_replace(array("{0}"), array("CTO_UID_OBJ"), "The \"{0}\" attribute is not defined"))); + } + + $step = new \BusinessModel\Step(); + + $msg = $step->existsObjectUid($arrayData["CTO_TYPE_OBJ"], $arrayData["CTO_UID_OBJ"]); + + if ($msg != "") { + throw (new \Exception($msg)); + } + + if ($this->existsRecord($processUid, $arrayData["CTO_TYPE_OBJ"], $arrayData["CTO_UID_OBJ"])) { + throw (new \Exception(str_replace(array("{0}", "{1}"), array($processUid . ", " . $arrayData["CTO_TYPE_OBJ"] . ", " . $arrayData["CTO_UID_OBJ"], "CASE_TRACKER_OBJECT"), "The record \"{0}\", exists in table {1}"))); + } + + if (isset($arrayData["CTO_POSITION"]) && $this->existsRecord($processUid, "", "", $arrayData["CTO_POSITION"])) { + throw (new \Exception(str_replace(array("{0}", "{1}", "{2}"), array($arrayData["CTO_POSITION"], $processUid . ", " . $arrayData["CTO_POSITION"], "CASE_TRACKER_OBJECT"), "The \"{0}\" position for the record \"{1}\", exists in table {2}"))); + } + + //Create + $caseTrackerObject = new \CaseTrackerObject(); + + $arrayData["PRO_UID"] = $processUid; + + if (!isset($arrayData["CTO_POSITION"])) { + $criteria = new \Criteria("workflow"); + + $criteria->add(\CaseTrackerObjectPeer::PRO_UID, $processUid); + + $arrayData["CTO_POSITION"] = \CaseTrackerObjectPeer::doCount($criteria) + 1; + } + + $caseTrackerObjectUid = $caseTrackerObject->create($arrayData); + + //Return + unset($arrayData["PRO_UID"]); + + $arrayData = array_change_key_case($arrayData, CASE_LOWER); + + unset($arrayData["cto_uid"]); + + return array_merge(array("cto_uid" => $caseTrackerObjectUid), $arrayData); + } catch (\Exception $e) { + throw $e; + } + } + + ///** + // * Update DynaForm + // * + // * @param string $caseTrackerObjectUid Unique id of Case Tracker Object + // * @param array $arrayData Data + // * + // * return array Return data of the DynaForm updated + // */ + //public function update($caseTrackerObjectUid, $arrayData) + //{ + // try { + // $arrayData = array_change_key_case($arrayData, CASE_UPPER); + // + // //Verify data + // $dynaForm = new \Dynaform(); + // + // if (!$dynaForm->dynaformExists($caseTrackerObjectUid)) { + // throw (new \Exception(str_replace(array("{0}", "{1}"), array($caseTrackerObjectUid, "DYNAFORM"), "The UID \"{0}\" doesn't exist in table {1}"))); + // } + // + // //Uids + // $arrayDataUid = $this->getDataUids($caseTrackerObjectUid); + // + // $processUid = $arrayDataUid["PRO_UID"]; + // + // //Verify data + // if (isset($arrayData["DYN_TITLE"]) && $this->titleExists($processUid, $arrayData["DYN_TITLE"], $caseTrackerObjectUid)) { + // throw (new \Exception(\G::LoadTranslation("ID_EXIST_DYNAFORM"))); + // } + // + // //Update + // $arrayData["DYN_UID"] = $caseTrackerObjectUid; + // + // $result = $dynaForm->update($arrayData); + // + // //Return + // unset($arrayData["DYN_UID"]); + // + // return array_change_key_case($arrayData, CASE_LOWER); + // } catch (\Exception $e) { + // throw $e; + // } + //} + // + ///** + // * Delete DynaForm + // * + // * @param string $caseTrackerObjectUid Unique id of Case Tracker Object + // * + // * return void + // */ + //public function delete($caseTrackerObjectUid) + //{ + // try { + // //Verify data + // $dynaForm = new \Dynaform(); + // + // if (!$dynaForm->dynaformExists($caseTrackerObjectUid)) { + // throw (new \Exception(str_replace(array("{0}", "{1}"), array($caseTrackerObjectUid, "DYNAFORM"), "The UID \"{0}\" doesn't exist in table {1}"))); + // } + // + // //Uids + // $arrayDataUid = $this->getDataUids($caseTrackerObjectUid); + // + // $processUid = $arrayDataUid["PRO_UID"]; + // + // //Verify data + // if ($this->dynaFormAssignedStep($caseTrackerObjectUid, $processUid)) { + // throw (new \Exception("You cannot delete this Dynaform while it is assigned to a step")); + // } + // + // //Delete + + // + // //In table CASE_TRACKER_OBJECT + // $caseTrackerObject = new \CaseTrackerObject(); + // $caseTrackerObject->removeByObject("DYNAFORM", $caseTrackerObjectUid); + // } catch (\Exception $e) { + // throw $e; + // } + //} + + /** + * Get data of a Case Tracker Object + * + * @param string $caseTrackerObjectUid Unique id of Case Tracker Object + * + * return array Return an array with data of a Case Tracker Object + */ + public function getCaseTrackerObject($caseTrackerObjectUid) + { + try { + //Verify data + $caseTrackerObject = new \CaseTrackerObject(); + + if (!$caseTrackerObject->caseTrackerObjectExists($caseTrackerObjectUid)) { + throw (new \Exception(str_replace(array("{0}", "{1}"), array($caseTrackerObjectUid, "CASE_TRACKER_OBJECT"), "The UID \"{0}\" doesn't exist in table {1}"))); + } + + //Get data + $dynaform = new \Dynaform(); + $inputDocument = new \InputDocument(); + $outputDocument = new \OutputDocument(); + + $criteria = new \Criteria("workflow"); + + $criteria->add(\CaseTrackerObjectPeer::CTO_UID, $caseTrackerObjectUid, \Criteria::EQUAL); + + $rsCriteria = \CaseTrackerObjectPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + $rsCriteria->next(); + + $row = $rsCriteria->getRow(); + + $titleObj = ""; + $descriptionObj = ""; + + switch ($row["CTO_TYPE_OBJ"]) { + case "DYNAFORM": + $arrayData = $dynaform->load($row["CTO_UID_OBJ"]); + + $titleObj = $arrayData["DYN_TITLE"]; + $descriptionObj = $arrayData["DYN_DESCRIPTION"]; + break; + case "INPUT_DOCUMENT": + $arrayData = $inputDocument->getByUid($row["CTO_UID_OBJ"]); + + $titleObj = $arrayData["INP_DOC_TITLE"]; + $descriptionObj = $arrayData["INP_DOC_DESCRIPTION"]; + break; + case "OUTPUT_DOCUMENT": + $arrayData = $outputDocument->getByUid($row["CTO_UID_OBJ"]); + + $titleObj = $arrayData["OUT_DOC_TITLE"]; + $descriptionObj = $arrayData["OUT_DOC_DESCRIPTION"]; + break; + } + + return array( + "cto_uid" => $row["CTO_UID"], + "cto_type_obj" => $row["CTO_TYPE_OBJ"], + "cto_uid_obj" => $row["CTO_UID_OBJ"], + "cto_condition" => $row["CTO_CONDITION"], + "cto_position" => (int)($row["CTO_POSITION"]), + "obj_title" => $titleObj, + "obj_description" => $descriptionObj + ); + } catch (\Exception $e) { + throw $e; + } + } +} + diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project/CaseTracker.php b/workflow/engine/src/Services/Api/ProcessMaker/Project/CaseTracker.php new file mode 100644 index 000000000..d592c679e --- /dev/null +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project/CaseTracker.php @@ -0,0 +1,99 @@ +getCaseTracker($projectUid); + + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url PUT /:projectUid/case-tracker/property + * + * @param string $projectUid + * @param CaseTrackerPutStructure $request_data + */ + public function doPutCaseTracker($projectUid, CaseTrackerPutStructure $request_data = null) + { + try { + $caseTracker = new \BusinessModel\CaseTracker(); + + $arrayData = $caseTracker->getArrayDataFromRequestData($request_data); + + $arrayData = $caseTracker->update($projectUid, $arrayData); + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url GET /:projectUid/case-tracker/objects + */ + public function doGetCaseTrackerObjects($projectUid) + { + try { + $caseTracker = new \BusinessModel\CaseTracker(); + + $response = $caseTracker->getCaseTrackerObjects($projectUid); + + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url GET /:projectUid/case-tracker/available-objects + */ + public function doGetCaseTrackerAvailableObjects($projectUid) + { + try { + $caseTracker = new \BusinessModel\CaseTracker(); + + $response = $caseTracker->getAvailableCaseTrackerObjects($projectUid); + + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } +} + +class CaseTrackerPutStructure +{ + /** + * @var string {@from body}{@choice NONE,PROCESSMAP,STAGES} + */ + public $map_type; + + /** + * @var bool {@from body} + */ + public $routing_history; + + /** + * @var bool {@from body} + */ + public $message_history; +} + diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project/CaseTrackerObject.php b/workflow/engine/src/Services/Api/ProcessMaker/Project/CaseTrackerObject.php new file mode 100644 index 000000000..993b1adc3 --- /dev/null +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project/CaseTrackerObject.php @@ -0,0 +1,135 @@ +getCaseTrackerObject($caseTrackerObjectUid); + + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url POST /:projectUid/case-tracker/object + * + * @param string $projectUid + * @param CaseTrackerObjectPostStructure $request_data + * + * @status 201 + */ + public function doPostCaseTrackerObject($projectUid, CaseTrackerObjectPostStructure $request_data = null) + { + try { + $caseTrackerObject = new \BusinessModel\CaseTrackerObject(); + + $arrayData = $caseTrackerObject->getArrayDataFromRequestData($request_data); + + $arrayData = $caseTrackerObject->create($projectUid, $arrayData); + + $response = $arrayData; + + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url PUT /:projectUid/case-tracker/object/:caseTrackerObjectUid + * + * @param string $caseTrackerObjectUid + * @param string $projectUid + * @param CaseTrackerObjectPutStructure $request_data + */ + public function doPutCaseTrackerObject($caseTrackerObjectUid, $projectUid, CaseTrackerObjectPutStructure $request_data = null) + { + try { + $caseTrackerObject = new \BusinessModel\CaseTrackerObject(); + + $arrayData = $caseTrackerObject->getArrayDataFromRequestData($request_data); + + $arrayData = $caseTrackerObject->update($caseTrackerObjectUid, $arrayData); + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } + + /** + * @url DELETE /:projectUid/case-tracker/object/:caseTrackerObjectUid + */ + public function doDeleteCaseTrackerObject($caseTrackerObjectUid, $projectUid) + { + try { + $caseTrackerObject = new \BusinessModel\CaseTrackerObject(); + + $caseTrackerObject->delete($caseTrackerObjectUid); + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } +} + +class CaseTrackerObjectPostStructure +{ + /** + * @var string {@from body}{@choice DYNAFORM,INPUT_DOCUMENT,OUTPUT_DOCUMENT}{@required true} + */ + public $cto_type_obj; + + /** + * @var string {@from body}{@min 32}{@max 32}{@required true} + */ + public $cto_uid_obj; + + /** + * @var string + */ + public $cto_condition; + + /** + * @var int {@from body}{@min 1} + */ + public $cto_position; +} + +class CaseTrackerObjectPutStructure +{ + /** + * @var string {@from body}{@choice DYNAFORM,INPUT_DOCUMENT,OUTPUT_DOCUMENT} + */ + public $cto_type_obj; + + /** + * @var string {@from body}{@min 32}{@max 32} + */ + public $cto_uid_obj; + + /** + * @var string + */ + public $cto_condition; + + /** + * @var int {@from body}{@min 1} + */ + public $cto_position; +} + diff --git a/workflow/engine/src/Services/api.ini b/workflow/engine/src/Services/api.ini index d2cbd8ffe..4226271a4 100644 --- a/workflow/engine/src/Services/api.ini +++ b/workflow/engine/src/Services/api.ini @@ -26,6 +26,8 @@ debug = 1 supervisors = "Services\Api\ProcessMaker\Project\ProcessSupervisors" process-permissions = "Services\Api\ProcessMaker\Project\ProcessPermissions" case-scheduler = "Services\Api\ProcessMaker\Project\CaseScheduler" + case-tracker = "Services\Api\ProcessMaker\Project\CaseTracker" + case-tracker-object = "Services\Api\ProcessMaker\Project\CaseTrackerObject" [alias: projects] project = "Services\Api\ProcessMaker\Project"