From ecacf6d15a38367e770939bc7ebad242b93a970a Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Mon, 10 Nov 2014 15:40:24 -0400 Subject: [PATCH] PM-854 "[16221] En Case History no muestra los datos de las..." SOLVED Issue: En "Cases History" no se reflejan las variables generadas por los triggers asignados al Task (esto en Task>Steps>Triggers>AssignTask) Cause: Nuevo requerimiento de funciones Solution: - Se ha implementado esta nueva funcionalidad - Las variables generadas en los triggers que se setean en "Task>Steps>Triggers" para DynaForms, InputDocuments and OutputDocuments ahora son registrados en la tabla APP_HISTORY --- workflow/engine/classes/class.case.php | 24 +- workflow/engine/classes/model/AppHistory.php | 76 ++++- .../model/map/AppHistoryMapBuilder.php | 4 + .../classes/model/om/BaseAppHistory.php | 96 ++++-- .../classes/model/om/BaseAppHistoryPeer.php | 26 +- workflow/engine/config/schema.xml | 4 + workflow/engine/data/mssql/schema.sql | 1 + workflow/engine/data/mysql/schema.sql | 2 + workflow/engine/data/oracle/schema.sql | 1 + .../engine/methods/cases/cases_Derivate.php | 18 +- .../methods/cases/cases_SaveDocument.php | 4 + workflow/engine/methods/cases/cases_Step.php | 18 +- .../cases/cases_DynaformHistory.html | 2 +- .../templates/cases/cases_DynaformHistory.php | 315 +++++++++--------- 14 files changed, 369 insertions(+), 222 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index d27f9c836..744d188df 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -5087,7 +5087,7 @@ class Cases $RESULT_OBJECTS['CASES_NOTES'] = G::arrayDiff( $MAIN_OBJECTS['VIEW']['CASES_NOTES'], $MAIN_OBJECTS['BLOCK']['CASES_NOTES'] ); - array_push($RESULT_OBJECTS['DYNAFORMS'], -1); + array_push($RESULT_OBJECTS["DYNAFORMS"], -1, -2); array_push($RESULT_OBJECTS['INPUT_DOCUMENTS'], -1); array_push($RESULT_OBJECTS['OUTPUT_DOCUMENTS'], -1); array_push($RESULT_OBJECTS['CASES_NOTES'], -1); @@ -5244,10 +5244,16 @@ class Cases $oDataset->next(); } - //inputs + //InputDocuments and OutputDocuments $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_UID); $oCriteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE); + + $arrayCondition = array(); + $arrayCondition[] = array(AppDelegationPeer::APP_UID, AppDocumentPeer::APP_UID, Criteria::EQUAL); + $arrayCondition[] = array(AppDelegationPeer::DEL_INDEX, AppDocumentPeer::DEL_INDEX, Criteria::EQUAL); + $oCriteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN); + $oCriteria->add(AppDelegationPeer::APP_UID, $APP_UID); $oCriteria->add(AppDelegationPeer::PRO_UID, $PRO_UID); if ($aCase['APP_STATUS'] != 'COMPLETED') { @@ -5261,23 +5267,21 @@ class Cases addOr($oCriteria-> getNewCriterion(AppDocumentPeer::APP_DOC_TYPE, 'ATTACHED')) ); - $aConditions = Array(); - $aConditions[] = array(AppDelegationPeer::APP_UID, AppDocumentPeer::APP_UID); - $aConditions[] = array(AppDelegationPeer::DEL_INDEX, AppDocumentPeer::DEL_INDEX); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oDataset = DynaformPeer::doSelectRS($oCriteria); + $oDataset = AppDelegationPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - while ($aRow = $oDataset->getRow()) { + + while ($oDataset->next()) { + $aRow = $oDataset->getRow(); + if ($aRow['APP_DOC_TYPE'] == "ATTACHED") { $aRow['APP_DOC_TYPE'] = "INPUT"; } if (!in_array($aRow['APP_DOC_UID'], $RESULT[$aRow['APP_DOC_TYPE']])) { array_push($RESULT[$aRow['APP_DOC_TYPE']], $aRow['APP_DOC_UID']); } - $oDataset->next(); } + $RESULT['CASES_NOTES'] = 1; $RESULT['SUMMARY_FORM'] = 1; diff --git a/workflow/engine/classes/model/AppHistory.php b/workflow/engine/classes/model/AppHistory.php index 95b0b7e35..a18cc2901 100755 --- a/workflow/engine/classes/model/AppHistory.php +++ b/workflow/engine/classes/model/AppHistory.php @@ -32,6 +32,10 @@ class AppHistory extends BaseAppHistory $this->setHistoryDate($aData['APP_UPDATE_DATE']); $this->setHistoryData($aData['APP_DATA']); + if (isset($aData["OBJECT_TYPE"])) { + $this->setObjType($aData["OBJECT_TYPE"]); + } + if ($this->validate() ) { $res = $this->save(); } else { @@ -78,12 +82,36 @@ class AppHistory extends BaseAppHistory } } + $appDocument = new AppDocument(); + + foreach (array("INPUT_DOCUMENTS", "OUTPUT_DOCUMENTS") as $value) { + $key = $value; + + if ($aObjectPermissions[$key]) { + foreach ($aObjectPermissions[$key] as $key2 => $value2) { + $appDocumentUid = $value2; + + try { + $arrayAppDocumentData = $appDocument->load($appDocumentUid); + + $aObjectPermissions[$key][$key2] = $arrayAppDocumentData["DOC_UID"]; + } catch (Exception $e) { + } + } + } + } + + $dynaForm = new Dynaform(); + $inputDocument = new InputDocument(); + $outputDocument = new OutputDocument(); + $c = new Criteria('workflow'); $c->addSelectColumn(AppHistoryPeer::APP_UID); $c->addSelectColumn(AppHistoryPeer::DEL_INDEX); $c->addSelectColumn(AppHistoryPeer::PRO_UID); $c->addSelectColumn(AppHistoryPeer::TAS_UID); $c->addSelectColumn(AppHistoryPeer::DYN_UID); + $c->addSelectColumn(AppHistoryPeer::OBJ_TYPE); $c->addSelectColumn(AppHistoryPeer::USR_UID); $c->addSelectColumn(AppHistoryPeer::APP_STATUS); $c->addSelectColumn(AppHistoryPeer::HISTORY_DATE); @@ -94,31 +122,55 @@ class AppHistory extends BaseAppHistory $c->addJoin(AppHistoryPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); //WHERE - $c->add(AppHistoryPeer::DYN_UID, $aObjectPermissions['DYNAFORMS'], Criteria::IN); + $c->add( + $c->getNewCriterion(AppHistoryPeer::DYN_UID, $aObjectPermissions["DYNAFORMS"], Criteria::IN)->addOr( + $c->getNewCriterion(AppHistoryPeer::DYN_UID, $aObjectPermissions["INPUT_DOCUMENTS"], Criteria::IN))->addOr( + $c->getNewCriterion(AppHistoryPeer::DYN_UID, $aObjectPermissions["OUTPUT_DOCUMENTS"], Criteria::IN)) + ); + $c->add(AppHistoryPeer::PRO_UID, $PRO_UID); $c->add(AppHistoryPeer::APP_UID, $APP_UID); if ((isset($DYN_UID))&&($DYN_UID!="")) { $c->add(AppHistoryPeer::DYN_UID, $DYN_UID); } - //ORDER BY - $c->clearOrderByColumns(); - $c->addDescendingOrderByColumn(AppHistoryPeer::HISTORY_DATE); - //Execute $oDataset = AppHistoryPeer::doSelectRS($c); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); $aDynHistory = array(); $aDynHistory[] = array( 'DYN_TITLE' => 'char' ); - while ($aRow = $oDataset->getRow()) { - $o = new Dynaform(); - $o->setDynUid($aRow['DYN_UID']); - $aRow['DYN_TITLE'] = $o->getDynTitle(); + while ($oDataset->next()) { + $aRow = $oDataset->getRow(); + + $title = ""; + + switch ($aRow["OBJ_TYPE"]) { + case "DYNAFORM": + $arrayDynaFormData = $dynaForm->Load($aRow["DYN_UID"]); + + $title = $arrayDynaFormData["DYN_TITLE"] . " (" . G::LoadTranslation("ID_DYNAFORM") . ")"; + break; + case "INPUT_DOCUMENT": + $arrayInputDocumentData = $inputDocument->load($aRow["DYN_UID"]); + + $title = $arrayInputDocumentData["INP_DOC_TITLE"] . " (" . G::LoadTranslation("ID_INPUT_DOCUMENT") . ")"; + break; + case "OUTPUT_DOCUMENT": + $arrayOutputDocumentData = $outputDocument->load($aRow["DYN_UID"]); + + $title = $arrayOutputDocumentData["OUT_DOC_TITLE"] . " (" . G::LoadTranslation("ID_OUTPUT_DOCUMENT") . ")"; + break; + case "ASSIGN_TASK": + $title = G::LoadTranslation("ASSIGN_TASK") . " (" . G::LoadTranslation("ID_TRIGGERS") . ")"; + break; + } + + $aRow["DYN_TITLE"] = $title; + $changedValues=unserialize($aRow['HISTORY_DATA']); $html=""; $sw_add=false; @@ -166,7 +218,6 @@ class AppHistory extends BaseAppHistory if ($sw_add) { $aDynHistory[] = $aRow; } - $oDataset->next(); } global $_DBArray; @@ -175,7 +226,8 @@ class AppHistory extends BaseAppHistory G::LoadClass('ArrayPeer'); $oCriteria = new Criteria('dbarray'); $oCriteria->setDBArrayTable('DynaformsHistory'); - $oCriteria->addDescendingOrderByColumn(AppHistoryPeer::HISTORY_DATE); + $oCriteria->addAscendingOrderByColumn(AppHistoryPeer::HISTORY_DATE); + return $oCriteria; } } diff --git a/workflow/engine/classes/model/map/AppHistoryMapBuilder.php b/workflow/engine/classes/model/map/AppHistoryMapBuilder.php index cd95ab885..2011d1496 100755 --- a/workflow/engine/classes/model/map/AppHistoryMapBuilder.php +++ b/workflow/engine/classes/model/map/AppHistoryMapBuilder.php @@ -75,6 +75,8 @@ class AppHistoryMapBuilder $tMap->addColumn('DYN_UID', 'DynUid', 'string', CreoleTypes::VARCHAR, true, 32); + $tMap->addColumn('OBJ_TYPE', 'ObjType', 'string', CreoleTypes::VARCHAR, true, 20); + $tMap->addColumn('USR_UID', 'UsrUid', 'string', CreoleTypes::VARCHAR, true, 32); $tMap->addColumn('APP_STATUS', 'AppStatus', 'string', CreoleTypes::VARCHAR, true, 100); @@ -83,6 +85,8 @@ class AppHistoryMapBuilder $tMap->addColumn('HISTORY_DATA', 'HistoryData', 'string', CreoleTypes::LONGVARCHAR, true, null); + $tMap->addValidator('OBJ_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'DYNAFORM|INPUT_DOCUMENT|OUTPUT_DOCUMENT|EXTERNAL|ASSIGN_TASK', 'Please select a valid value for OBJ_TYPE.'); + } // doBuild() } // AppHistoryMapBuilder diff --git a/workflow/engine/classes/model/om/BaseAppHistory.php b/workflow/engine/classes/model/om/BaseAppHistory.php index 36cd414b1..1ed4938e2 100755 --- a/workflow/engine/classes/model/om/BaseAppHistory.php +++ b/workflow/engine/classes/model/om/BaseAppHistory.php @@ -57,6 +57,12 @@ abstract class BaseAppHistory extends BaseObject implements Persistent */ protected $dyn_uid = ''; + /** + * The value for the obj_type field. + * @var string + */ + protected $obj_type = 'DYNAFORM'; + /** * The value for the usr_uid field. * @var string @@ -150,6 +156,17 @@ abstract class BaseAppHistory extends BaseObject implements Persistent return $this->dyn_uid; } + /** + * Get the [obj_type] column value. + * + * @return string + */ + public function getObjType() + { + + return $this->obj_type; + } + /** * Get the [usr_uid] column value. * @@ -325,6 +342,28 @@ abstract class BaseAppHistory extends BaseObject implements Persistent } // setDynUid() + /** + * Set the value of [obj_type] column. + * + * @param string $v new value + * @return void + */ + public function setObjType($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->obj_type !== $v || $v === 'DYNAFORM') { + $this->obj_type = $v; + $this->modifiedColumns[] = AppHistoryPeer::OBJ_TYPE; + } + + } // setObjType() + /** * Set the value of [usr_uid] column. * @@ -447,20 +486,22 @@ abstract class BaseAppHistory extends BaseObject implements Persistent $this->dyn_uid = $rs->getString($startcol + 4); - $this->usr_uid = $rs->getString($startcol + 5); + $this->obj_type = $rs->getString($startcol + 5); - $this->app_status = $rs->getString($startcol + 6); + $this->usr_uid = $rs->getString($startcol + 6); - $this->history_date = $rs->getTimestamp($startcol + 7, null); + $this->app_status = $rs->getString($startcol + 7); - $this->history_data = $rs->getString($startcol + 8); + $this->history_date = $rs->getTimestamp($startcol + 8, null); + + $this->history_data = $rs->getString($startcol + 9); $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 9; // 9 = AppHistoryPeer::NUM_COLUMNS - AppHistoryPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 10; // 10 = AppHistoryPeer::NUM_COLUMNS - AppHistoryPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating AppHistory object", $e); @@ -680,15 +721,18 @@ abstract class BaseAppHistory extends BaseObject implements Persistent return $this->getDynUid(); break; case 5: - return $this->getUsrUid(); + return $this->getObjType(); break; case 6: - return $this->getAppStatus(); + return $this->getUsrUid(); break; case 7: - return $this->getHistoryDate(); + return $this->getAppStatus(); break; case 8: + return $this->getHistoryDate(); + break; + case 9: return $this->getHistoryData(); break; default: @@ -716,10 +760,11 @@ abstract class BaseAppHistory extends BaseObject implements Persistent $keys[2] => $this->getProUid(), $keys[3] => $this->getTasUid(), $keys[4] => $this->getDynUid(), - $keys[5] => $this->getUsrUid(), - $keys[6] => $this->getAppStatus(), - $keys[7] => $this->getHistoryDate(), - $keys[8] => $this->getHistoryData(), + $keys[5] => $this->getObjType(), + $keys[6] => $this->getUsrUid(), + $keys[7] => $this->getAppStatus(), + $keys[8] => $this->getHistoryDate(), + $keys[9] => $this->getHistoryData(), ); return $result; } @@ -767,15 +812,18 @@ abstract class BaseAppHistory extends BaseObject implements Persistent $this->setDynUid($value); break; case 5: - $this->setUsrUid($value); + $this->setObjType($value); break; case 6: - $this->setAppStatus($value); + $this->setUsrUid($value); break; case 7: - $this->setHistoryDate($value); + $this->setAppStatus($value); break; case 8: + $this->setHistoryDate($value); + break; + case 9: $this->setHistoryData($value); break; } // switch() @@ -822,19 +870,23 @@ abstract class BaseAppHistory extends BaseObject implements Persistent } if (array_key_exists($keys[5], $arr)) { - $this->setUsrUid($arr[$keys[5]]); + $this->setObjType($arr[$keys[5]]); } if (array_key_exists($keys[6], $arr)) { - $this->setAppStatus($arr[$keys[6]]); + $this->setUsrUid($arr[$keys[6]]); } if (array_key_exists($keys[7], $arr)) { - $this->setHistoryDate($arr[$keys[7]]); + $this->setAppStatus($arr[$keys[7]]); } if (array_key_exists($keys[8], $arr)) { - $this->setHistoryData($arr[$keys[8]]); + $this->setHistoryDate($arr[$keys[8]]); + } + + if (array_key_exists($keys[9], $arr)) { + $this->setHistoryData($arr[$keys[9]]); } } @@ -868,6 +920,10 @@ abstract class BaseAppHistory extends BaseObject implements Persistent $criteria->add(AppHistoryPeer::DYN_UID, $this->dyn_uid); } + if ($this->isColumnModified(AppHistoryPeer::OBJ_TYPE)) { + $criteria->add(AppHistoryPeer::OBJ_TYPE, $this->obj_type); + } + if ($this->isColumnModified(AppHistoryPeer::USR_UID)) { $criteria->add(AppHistoryPeer::USR_UID, $this->usr_uid); } @@ -951,6 +1007,8 @@ abstract class BaseAppHistory extends BaseObject implements Persistent $copyObj->setDynUid($this->dyn_uid); + $copyObj->setObjType($this->obj_type); + $copyObj->setUsrUid($this->usr_uid); $copyObj->setAppStatus($this->app_status); diff --git a/workflow/engine/classes/model/om/BaseAppHistoryPeer.php b/workflow/engine/classes/model/om/BaseAppHistoryPeer.php index 33148f6c3..9f49a07ef 100755 --- a/workflow/engine/classes/model/om/BaseAppHistoryPeer.php +++ b/workflow/engine/classes/model/om/BaseAppHistoryPeer.php @@ -25,7 +25,7 @@ abstract class BaseAppHistoryPeer const CLASS_DEFAULT = 'classes.model.AppHistory'; /** The total number of columns. */ - const NUM_COLUMNS = 9; + const NUM_COLUMNS = 10; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -46,6 +46,9 @@ abstract class BaseAppHistoryPeer /** the column name for the DYN_UID field */ const DYN_UID = 'APP_HISTORY.DYN_UID'; + /** the column name for the OBJ_TYPE field */ + const OBJ_TYPE = 'APP_HISTORY.OBJ_TYPE'; + /** the column name for the USR_UID field */ const USR_UID = 'APP_HISTORY.USR_UID'; @@ -69,10 +72,10 @@ abstract class BaseAppHistoryPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid', 'DelIndex', 'ProUid', 'TasUid', 'DynUid', 'UsrUid', 'AppStatus', 'HistoryDate', 'HistoryData', ), - BasePeer::TYPE_COLNAME => array (AppHistoryPeer::APP_UID, AppHistoryPeer::DEL_INDEX, AppHistoryPeer::PRO_UID, AppHistoryPeer::TAS_UID, AppHistoryPeer::DYN_UID, AppHistoryPeer::USR_UID, AppHistoryPeer::APP_STATUS, AppHistoryPeer::HISTORY_DATE, AppHistoryPeer::HISTORY_DATA, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'DEL_INDEX', 'PRO_UID', 'TAS_UID', 'DYN_UID', 'USR_UID', 'APP_STATUS', 'HISTORY_DATE', 'HISTORY_DATA', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, ) + BasePeer::TYPE_PHPNAME => array ('AppUid', 'DelIndex', 'ProUid', 'TasUid', 'DynUid', 'ObjType', 'UsrUid', 'AppStatus', 'HistoryDate', 'HistoryData', ), + BasePeer::TYPE_COLNAME => array (AppHistoryPeer::APP_UID, AppHistoryPeer::DEL_INDEX, AppHistoryPeer::PRO_UID, AppHistoryPeer::TAS_UID, AppHistoryPeer::DYN_UID, AppHistoryPeer::OBJ_TYPE, AppHistoryPeer::USR_UID, AppHistoryPeer::APP_STATUS, AppHistoryPeer::HISTORY_DATE, AppHistoryPeer::HISTORY_DATA, ), + BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'DEL_INDEX', 'PRO_UID', 'TAS_UID', 'DYN_UID', 'OBJ_TYPE', 'USR_UID', 'APP_STATUS', 'HISTORY_DATE', 'HISTORY_DATA', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ) ); /** @@ -82,10 +85,10 @@ abstract class BaseAppHistoryPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'DelIndex' => 1, 'ProUid' => 2, 'TasUid' => 3, 'DynUid' => 4, 'UsrUid' => 5, 'AppStatus' => 6, 'HistoryDate' => 7, 'HistoryData' => 8, ), - BasePeer::TYPE_COLNAME => array (AppHistoryPeer::APP_UID => 0, AppHistoryPeer::DEL_INDEX => 1, AppHistoryPeer::PRO_UID => 2, AppHistoryPeer::TAS_UID => 3, AppHistoryPeer::DYN_UID => 4, AppHistoryPeer::USR_UID => 5, AppHistoryPeer::APP_STATUS => 6, AppHistoryPeer::HISTORY_DATE => 7, AppHistoryPeer::HISTORY_DATA => 8, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'DEL_INDEX' => 1, 'PRO_UID' => 2, 'TAS_UID' => 3, 'DYN_UID' => 4, 'USR_UID' => 5, 'APP_STATUS' => 6, 'HISTORY_DATE' => 7, 'HISTORY_DATA' => 8, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, ) + BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'DelIndex' => 1, 'ProUid' => 2, 'TasUid' => 3, 'DynUid' => 4, 'ObjType' => 5, 'UsrUid' => 6, 'AppStatus' => 7, 'HistoryDate' => 8, 'HistoryData' => 9, ), + BasePeer::TYPE_COLNAME => array (AppHistoryPeer::APP_UID => 0, AppHistoryPeer::DEL_INDEX => 1, AppHistoryPeer::PRO_UID => 2, AppHistoryPeer::TAS_UID => 3, AppHistoryPeer::DYN_UID => 4, AppHistoryPeer::OBJ_TYPE => 5, AppHistoryPeer::USR_UID => 6, AppHistoryPeer::APP_STATUS => 7, AppHistoryPeer::HISTORY_DATE => 8, AppHistoryPeer::HISTORY_DATA => 9, ), + BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'DEL_INDEX' => 1, 'PRO_UID' => 2, 'TAS_UID' => 3, 'DYN_UID' => 4, 'OBJ_TYPE' => 5, 'USR_UID' => 6, 'APP_STATUS' => 7, 'HISTORY_DATE' => 8, 'HISTORY_DATA' => 9, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ) ); /** @@ -196,6 +199,8 @@ abstract class BaseAppHistoryPeer $criteria->addSelectColumn(AppHistoryPeer::DYN_UID); + $criteria->addSelectColumn(AppHistoryPeer::OBJ_TYPE); + $criteria->addSelectColumn(AppHistoryPeer::USR_UID); $criteria->addSelectColumn(AppHistoryPeer::APP_STATUS); @@ -542,6 +547,9 @@ abstract class BaseAppHistoryPeer } } else { + if ($obj->isNew() || $obj->isColumnModified(AppHistoryPeer::OBJ_TYPE)) + $columns[AppHistoryPeer::OBJ_TYPE] = $obj->getObjType(); + } return BasePeer::doValidate(AppHistoryPeer::DATABASE_NAME, AppHistoryPeer::TABLE_NAME, $columns); diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index d463b93e9..372637222 100755 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -2549,10 +2549,14 @@ + + + + diff --git a/workflow/engine/data/mssql/schema.sql b/workflow/engine/data/mssql/schema.sql index 3df6c6e14..5579491d4 100755 --- a/workflow/engine/data/mssql/schema.sql +++ b/workflow/engine/data/mssql/schema.sql @@ -2612,6 +2612,7 @@ CREATE TABLE [APP_HISTORY] [PRO_UID] VARCHAR(32) default '' NOT NULL, [TAS_UID] VARCHAR(32) default '' NOT NULL, [DYN_UID] VARCHAR(32) default '' NOT NULL, + [OBJ_TYPE] VARCHAR(20) default 'DYNAFORM' NOT NULL, [USR_UID] VARCHAR(32) default '' NOT NULL, [APP_STATUS] VARCHAR(100) default '' NOT NULL, [HISTORY_DATE] CHAR(19) NULL, diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 728fb74af..fbd829521 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -1206,6 +1206,7 @@ CREATE TABLE `APP_HISTORY` `PRO_UID` VARCHAR(32) default '' NOT NULL, `TAS_UID` VARCHAR(32) default '' NOT NULL, `DYN_UID` VARCHAR(32) default '' NOT NULL, + `OBJ_TYPE` VARCHAR(20) default 'DYNAFORM' NOT NULL, `USR_UID` VARCHAR(32) default '' NOT NULL, `APP_STATUS` VARCHAR(100) default '' NOT NULL, `HISTORY_DATE` DATETIME, @@ -2380,3 +2381,4 @@ CREATE TABLE `LIST_UNASSIGNED_GROUP` )ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Unassiged list'; # This restores the fkey checks, after having unset them earlier SET FOREIGN_KEY_CHECKS = 1; + diff --git a/workflow/engine/data/oracle/schema.sql b/workflow/engine/data/oracle/schema.sql index 81f038928..ebe247a2f 100755 --- a/workflow/engine/data/oracle/schema.sql +++ b/workflow/engine/data/oracle/schema.sql @@ -1491,6 +1491,7 @@ CREATE TABLE "APP_HISTORY" "PRO_UID" VARCHAR2(32) default '' NOT NULL, "TAS_UID" VARCHAR2(32) default '' NOT NULL, "DYN_UID" VARCHAR2(32) default '' NOT NULL, + "OBJ_TYPE" VARCHAR(20) default 'DYNAFORM' NOT NULL, "USR_UID" VARCHAR2(32) default '' NOT NULL, "APP_STATUS" VARCHAR2(100) default '' NOT NULL, "HISTORY_DATE" DATE, diff --git a/workflow/engine/methods/cases/cases_Derivate.php b/workflow/engine/methods/cases/cases_Derivate.php index 55ede1ff2..bd79ca272 100755 --- a/workflow/engine/methods/cases/cases_Derivate.php +++ b/workflow/engine/methods/cases/cases_Derivate.php @@ -80,15 +80,18 @@ try { $_SESSION['TRIGGER_DEBUG']['info'][0]['TRIGGERS_VALUES'] = $triggers; } - $appFields['DEL_INDEX'] = $_SESSION['INDEX']; - $appFields['TAS_UID'] = $_SESSION['TASK']; - unset($appFields['APP_STATUS']); unset($appFields['APP_PROC_STATUS']); unset($appFields['APP_PROC_CODE']); unset($appFields['APP_PIN']); - $oCase->updateCase( $_SESSION['APPLICATION'], $appFields ); //Save data + $appFields["DEL_INDEX"] = $_SESSION["INDEX"]; + $appFields["TAS_UID"] = $_SESSION["TASK"]; + $appFields["USER_UID"] = $_SESSION["USER_LOGGED"]; + $appFields["CURRENT_DYNAFORM"] = "-2"; + $appFields["OBJECT_TYPE"] = "ASSIGN_TASK"; + + $oCase->updateCase($_SESSION["APPLICATION"], $appFields); //Save data //derivate case $oDerivation = new Derivation(); @@ -112,6 +115,13 @@ try { unset($appFields['APP_PROC_STATUS']); unset($appFields['APP_PROC_CODE']); unset($appFields['APP_PIN']); + + $appFields["DEL_INDEX"] = $_SESSION["INDEX"]; + $appFields["TAS_UID"] = $_SESSION["TASK"]; + $appFields["USER_UID"] = $_SESSION["USER_LOGGED"]; + $appFields["CURRENT_DYNAFORM"] = "-2"; + $appFields["OBJECT_TYPE"] = "ASSIGN_TASK"; + $oCase->updateCase( $_SESSION['APPLICATION'], $appFields ); // Send notifications - Start diff --git a/workflow/engine/methods/cases/cases_SaveDocument.php b/workflow/engine/methods/cases/cases_SaveDocument.php index 954440b16..0263d7396 100755 --- a/workflow/engine/methods/cases/cases_SaveDocument.php +++ b/workflow/engine/methods/cases/cases_SaveDocument.php @@ -153,6 +153,10 @@ $arrayData["APP_NUMBER"] = $arrayField["APP_NUMBER"]; $arrayData["APP_DATA"] = $arrayField["APP_DATA"]; $arrayData["DEL_INDEX"] = $_SESSION["INDEX"]; $arrayData["TAS_UID"] = $_SESSION["TASK"]; +$arrayData["PRO_UID"] = $_SESSION["PROCESS"]; +$arrayData["USER_UID"] = $_SESSION["USER_LOGGED"]; +$arrayData["CURRENT_DYNAFORM"] = $inputDocumentUid; +$arrayData["OBJECT_TYPE"] = "INPUT_DOCUMENT"; $case->updateCase($_SESSION["APPLICATION"], $arrayData); diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index 047039205..c6e6748e3 100755 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -182,12 +182,16 @@ unset($Fields['APP_STATUS']); unset($Fields['APP_PROC_STATUS']); unset($Fields['APP_PROC_CODE']); unset($Fields['APP_PIN']); + +$Fields["USER_UID"] = $_SESSION["USER_LOGGED"]; +$Fields["CURRENT_DYNAFORM"] = $_GET["UID"]; +$Fields["OBJECT_TYPE"] = ($_GET["UID"] == "-1")? "ASSIGN_TASK" : $_GET["TYPE"]; + $oCase->updateCase( $_SESSION['APPLICATION'], $Fields ); //Save data - End - //Obtain previous and next step - Start -try { +try { $oCase = new Cases(); $aNextStep = $oCase->getNextStep( $_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION'] ); $aPreviousStep = $oCase->getPreviousStep( $_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION'] ); @@ -266,12 +270,12 @@ try { $G_PUBLISH->AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_GET['UID'], '', $Fields['APP_DATA'], 'cases_SaveData?UID=' . $_GET['UID'] . '&APP_UID=' . $_SESSION['APPLICATION'], '', (strtolower($oStep->getStepMode()) != 'edit' ? strtolower($oStep->getStepMode()) : '')); } break; - case 'INPUT_DOCUMENT': + case 'INPUT_DOCUMENT': if ($noShowTitle == 0) { $G_PUBLISH->AddContent( 'smarty', 'cases/cases_title', '', '', $array ); } $oInputDocument = new InputDocument(); - $Fields = $oInputDocument->load( $_GET['UID'] ); + $Fields = $oInputDocument->load( $_GET['UID'] ); if (! $aPreviousStep) { $Fields['__DYNAFORM_OPTIONS']['PREVIOUS_STEP_LABEL'] = ''; $Fields['PREVIOUS_STEP_LABEL'] = ''; @@ -285,13 +289,13 @@ try { $Fields['NEXT_STEP'] = $aNextStep['PAGE']; $Fields['NEXT_STEP_LABEL'] = G::loadTranslation( "ID_NEXT_STEP" ); switch ($_GET['ACTION']) { - case 'ATTACH': + case 'ATTACH': switch ($Fields['INP_DOC_FORM_NEEDED']) { case 'REAL': $Fields['TYPE_LABEL'] = G::LoadTranslation( 'ID_NEW' ); $sXmlForm = 'cases/cases_AttachInputDocument2'; break; - case 'VIRTUAL': + case 'VIRTUAL': $Fields['TYPE_LABEL'] = G::LoadTranslation( 'ID_ATTACH' ); $sXmlForm = 'cases/cases_AttachInputDocument1'; break; @@ -326,7 +330,7 @@ try { $oHeadPublisher = & headPublisher::getSingleton(); $titleDocument = "

" . $Fields['INP_DOC_TITLE'] . "
" . G::LoadTranslation( 'ID_INPUT_DOCUMENT' ) . "

"; - if ($Fields['INP_DOC_DESCRIPTION']) { + if ($Fields['INP_DOC_DESCRIPTION']) { $titleDocument .= " " . str_replace( "\n", "", str_replace( "'", "\'", nl2br( html_entity_decode($Fields['INP_DOC_DESCRIPTION'], ENT_COMPAT, "UTF-8") ) ) ) . ""; } diff --git a/workflow/engine/templates/cases/cases_DynaformHistory.html b/workflow/engine/templates/cases/cases_DynaformHistory.html index e29d39c50..3c0080cda 100755 --- a/workflow/engine/templates/cases/cases_DynaformHistory.html +++ b/workflow/engine/templates/cases/cases_DynaformHistory.html @@ -65,7 +65,7 @@
- +
{dynDate} {dynUser}
diff --git a/workflow/engine/templates/cases/cases_DynaformHistory.php b/workflow/engine/templates/cases/cases_DynaformHistory.php index 23e06109b..907403cf0 100755 --- a/workflow/engine/templates/cases/cases_DynaformHistory.php +++ b/workflow/engine/templates/cases/cases_DynaformHistory.php @@ -1,4 +1,4 @@ -prepare(); - -G::LoadClass('case'); -$oCase = new Cases(); -$Fields = $oCase->loadCase($_SESSION['APPLICATION']); - -// Load form info -if (isset($_REQUEST['DYN_UID']) && $_REQUEST['DYN_UID'] != '') { - $form = new Form($_REQUEST['PRO_UID'] . PATH_SEP . $_REQUEST['DYN_UID'], PATH_DYNAFORM, SYS_LANG, false); -} - -$historyData=array(); -$historyDataAux=array(); -require_once 'classes/model/AppHistory.php'; -$appHistory = new AppHistory(); -$c=$appHistory->getDynaformHistory($_REQUEST['PRO_UID'],$_REQUEST['TAS_UID'],$_REQUEST['APP_UID'],$_REQUEST['DYN_UID']); - -$oDataset = ArrayBasePeer::doSelectRs ( $c); -$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); -$oDataset->next(); - -$changeCount=0; -while ($aRow = $oDataset->getRow()) { - $changeCount++; - - $changedValues=unserialize($aRow['HISTORY_DATA']); - $tableName="_TCHANGE_".$changeCount; - $historyDataAux[$tableName]=$changedValues; - $oDataset->next(); -} - -$historyData=array_reverse($historyDataAux); -$changeCount=count($historyData); -foreach($historyData as $key => $value){ - $tableName="_TCHANGE_".$changeCount; - $changeCountA=$changeCount+1; - $tableNameA="_TCHANGE_".$changeCountA; - - if(isset($historyData[$tableNameA])){ - //$historyData[$key]=array_merge($historyData[$tableNameA],$value); - //Array merge recursive doesn't work. So here is an own procedure - $historyData[$key]=$historyData[$tableNameA]; - foreach($value as $key1 => $value2){ - if(!is_array($value2)){ - $historyData[$key][$key1]=$value2; - }else{ - foreach($value2 as $key3 => $value3){ - if(is_array($value3)){ - foreach($value3 as $key4 => $value4){ - $historyData[$key][$key1][$key3][$key4]=$value4; - } - } - } - } - - } - } - - - $changeCount--; -} - - - - -$oDataset = ArrayBasePeer::doSelectRs ( $c); -$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); -$oDataset->next(); -$changeCount=0; - -while ($aRow = $oDataset->getRow()) { - $changeCount++; - - - $changedValues=unserialize($aRow['HISTORY_DATA']); - - $tpl->newBlock( "DYNLOG" ); - $tableName="_TCHANGE_".$changeCount; - $changeCountA=$changeCount+1; - $tableNameA="_TCHANGE_".$changeCountA; - - $tpl->assign( "dynTitle" , addslashes($aRow['DYN_TITLE']) ); - $tpl->assign( "dynDate" , $aRow['HISTORY_DATE'] ); - $tpl->assign( "dynUser" , addslashes($aRow['USR_NAME']) ); - $tpl->assign( "changes" , G::LoadTranslation("ID_CHANGES") ); - $tpl->assign( "dynUID" , $aRow['DYN_UID'] ); - $tpl->assign( "tablename" , $tableName ); - - - $tpl->assign( "viewForm" , G::LoadTranslation("ID_VIEW") ); - $tpl->assign( "dynaform" , G::LoadTranslation("ID_DYNAFORM") ); - $tpl->assign( "date" , G::LoadTranslation("ID_DATE") ); - $tpl->assign( "user" , G::LoadTranslation("ID_USER") ); - - $tpl->assign( "fieldNameLabel" , G::LoadTranslation("ID_FIELDS") ); - $tpl->assign( "previousValuesLabel" , G::LoadTranslation("ID_PREV_VALUES") ); - $tpl->assign( "currentValuesLabel" , G::LoadTranslation("ID_CURRENT_VALUES") ); - - - - - $count=0; - foreach($changedValues as $key =>$value){ - if(($value!=NULL)&&(!is_array($value))){ - if (isset($form) && isset($form->fields[$key])) { - $label = $form->fields[$key]->label . ' (' . $key . ')'; - } - else { - $label = $key; - } - $tpl->newBlock( "FIELDLOG" ); - $tpl->assign( "fieldName" , $label ); - $tpl->assign( "previous" , isset($historyData[$tableNameA][$key])?$historyData[$tableNameA][$key]:"" ); - $tpl->assign( "actual" , $value ); - $count++; - } - if(is_array($value)){ - foreach($value as $key1 =>$value1){ - if(is_array($value1)){ - foreach($value1 as $key2 =>$value2) { - if (isset($form) && isset($form->fields[$key]->fields[$key2])) { - $label = $form->fields[$key]->fields[$key2]->label . ' (' . $key . '[' . $key1 . '][' . $key2 . '])'; - } - else { - $label = $key . '[' . $key1 . ']' . '[' . $key2 . ']'; - } - $tpl->newBlock( "FIELDLOG" ); - $tpl->assign( "fieldName" , $label ); - $tpl->assign( "previous" , isset($historyData[$tableNameA][$key][$key1][$key2])?$historyData[$tableNameA][$key][$key1][$key2]:"" ); - $tpl->assign( "actual" , $value2 ); - $count++; - } - } - } - } - } - $tpl->gotoBlock( "DYNLOG" ); - - $tpl->assign( "dynChanges" , G::LoadTranslation("ID_FIELDS_CHANGED_NUMBER")." (".$count.")" ); - $tpl->assign( "count" , $count+1 ); - - $oDataset->next(); - -} -if(!isset($changedValues)){ - $tpl->newBlock( "NORESULTS" ); - $tpl->assign( "noResults" , G::LoadTranslation("ID_NO_RECORDS_FOUND")); -} - - $_SESSION['HISTORY_DATA']=serialize($historyData); - $tpl->gotoBlock( "_ROOT" ); - - $tpl->printToScreen(); - -?> \ No newline at end of file + */ + +$tpl = new TemplatePower(PATH_TPL . "cases" . PATH_SEP . "cases_DynaformHistory.html"); + +$tpl->prepare(); + +require_once 'classes/model/AppHistory.php'; +G::LoadClass('case'); + +$oCase = new Cases(); +$Fields = $oCase->loadCase($_SESSION['APPLICATION']); + +// Load form info +if (isset($_REQUEST['DYN_UID']) && $_REQUEST['DYN_UID'] != '') { + $form = new Form($_REQUEST['PRO_UID'] . PATH_SEP . $_REQUEST['DYN_UID'], PATH_DYNAFORM, SYS_LANG, false); +} + +$historyData = array(); +$historyDataAux = array(); + +$appHistory = new AppHistory(); +$c = $appHistory->getDynaformHistory($_REQUEST['PRO_UID'], $_REQUEST['TAS_UID'], $_REQUEST['APP_UID'], $_REQUEST['DYN_UID']); + +$oDataset = ArrayBasePeer::doSelectRs($c); +$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + +$changeCount = 0; + +while ($oDataset->next()) { + $aRow = $oDataset->getRow(); + + $changeCount++; + + $changedValues = unserialize($aRow['HISTORY_DATA']); + $tableName = "_TCHANGE_" . $changeCount; + $historyDataAux[$tableName] = $changedValues; +} + +$historyData = array_reverse($historyDataAux); +$changeCount = count($historyData); + +foreach ($historyData as $key => $value) { + $tableName = "_TCHANGE_" . $changeCount; + $changeCountA = $changeCount + 1; + $tableNameA = "_TCHANGE_" . $changeCountA; + + if (isset($historyData[$tableNameA])) { + //$historyData[$key]=array_merge($historyData[$tableNameA],$value); + //Array merge recursive doesn't work. So here is an own procedure + $historyData[$key] = $historyData[$tableNameA]; + + foreach ($value as $key1 => $value2) { + if (!is_array($value2)) { + $historyData[$key][$key1] = $value2; + } else { + foreach ($value2 as $key3 => $value3) { + if (is_array($value3)) { + foreach ($value3 as $key4 => $value4) { + $historyData[$key][$key1][$key3][$key4] = $value4; + } + } + } + } + } + } + + $changeCount--; +} + +$oDataset = ArrayBasePeer::doSelectRs($c); +$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + +$changeCount = 0; + +while ($oDataset->next()) { + $aRow = $oDataset->getRow(); + + $changeCount++; + + $changedValues = unserialize($aRow['HISTORY_DATA']); + + $tpl->newBlock("DYNLOG"); + $tableName = "_TCHANGE_".$changeCount; + $changeCountA = $changeCount + 1; + $tableNameA = "_TCHANGE_" . $changeCountA; + + $tpl->assign("dynTitle", addslashes($aRow["DYN_TITLE"])); + $tpl->assign("dynDate", $aRow["HISTORY_DATE"]); + $tpl->assign("dynUser", addslashes($aRow["USR_NAME"])); + $tpl->assign("changes", G::LoadTranslation("ID_CHANGES")); + $tpl->assign("dynUID", $aRow["DYN_UID"]); + $tpl->assign("tablename", $tableName); + + $tpl->assign("viewForm", ($aRow["OBJ_TYPE"] == "DYNAFORM")? "" . G::LoadTranslation("ID_VIEW") . "" : ""); + $tpl->assign("dynaform", G::LoadTranslation("ID_DYNAFORM")); + $tpl->assign("date", G::LoadTranslation("ID_DATE")); + $tpl->assign("user", G::LoadTranslation("ID_USER")); + + $tpl->assign("fieldNameLabel", G::LoadTranslation("ID_FIELDS")); + $tpl->assign("previousValuesLabel", G::LoadTranslation("ID_PREV_VALUES")); + $tpl->assign("currentValuesLabel", G::LoadTranslation("ID_CURRENT_VALUES")); + + $count = 0; + + foreach ($changedValues as $key => $value) { + if ($value != null && !is_array($value)) { + if (isset($form) && isset($form->fields[$key])) { + $label = $form->fields[$key]->label . ' (' . $key . ')'; + } else { + $label = $key; + } + $tpl->newBlock("FIELDLOG"); + $tpl->assign("fieldName", $label); + $tpl->assign("previous", (isset($historyData[$tableNameA][$key]))? $historyData[$tableNameA][$key] : ""); + $tpl->assign("actual", $value); + $count++; + } + + if (is_array($value)) { + foreach ($value as $key1 => $value1) { + if (is_array($value1)) { + foreach ($value1 as $key2 => $value2) { + if (isset($form) && isset($form->fields[$key]->fields[$key2])) { + $label = $form->fields[$key]->fields[$key2]->label . ' (' . $key . '[' . $key1 . '][' . $key2 . '])'; + } else { + $label = $key . '[' . $key1 . ']' . '[' . $key2 . ']'; + } + $tpl->newBlock("FIELDLOG"); + $tpl->assign("fieldName", $label); + $tpl->assign("previous", (isset($historyData[$tableNameA][$key][$key1][$key2]))? $historyData[$tableNameA][$key][$key1][$key2] : ""); + $tpl->assign("actual", $value2); + $count++; + } + } + } + } + } + + $tpl->gotoBlock("DYNLOG"); + + $tpl->assign("dynChanges", G::LoadTranslation("ID_FIELDS_CHANGED_NUMBER") . " (" . $count . ")"); + $tpl->assign("count", $count + 1); +} + +if (!isset($changedValues)) { + $tpl->newBlock("NORESULTS"); + $tpl->assign("noResults", G::LoadTranslation("ID_NO_RECORDS_FOUND")); +} + +$_SESSION['HISTORY_DATA'] = serialize($historyData); +$tpl->gotoBlock("_ROOT"); + +$tpl->printToScreen(); +