Files
luos/workflow/engine/src/BusinessModel/CaseTracker.php

395 lines
16 KiB
PHP
Raw Normal View History

<?php
namespace BusinessModel;
class CaseTracker
{
/**
* 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}\" does not 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"] = (int)($arrayDataIni["routing_history"]);
}
if (isset($arrayDataIni["message_history"])) {
$arrayData["CT_MESSAGE_HISTORY"] = (int)($arrayDataIni["message_history"]);
}
$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}\" does not 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" => (int)($arrayCaseTracker["CT_DERIVATION_HISTORY"]),
"message_history" => (int)($arrayCaseTracker["CT_MESSAGE_HISTORY"])
);
} 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}\" does not 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();
$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"
);
}
$arrayCaseTrackerObject = \ProcessMaker\Util\ArrayUtil::sort(
$arrayCaseTrackerObject,
array("obj_type", "obj_title"),
SORT_ASC
);
return $arrayCaseTrackerObject;
} 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}\" does not 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
);
}
$arraydbCaseTrackerObject = \ProcessMaker\Util\ArrayUtil::sort($arraydbCaseTrackerObject, array("cto_position"), SORT_ASC);
return $arrayCaseTrackerObject;
} catch (\Exception $e) {
throw $e;
}
}
}