2010-12-02 23:34:41 +00:00
< ? php
/**
* class . case . php
2011-02-01 12:49:40 +00:00
* @ package workflow . engine . classes
2010-12-02 23:34:41 +00:00
*
* ProcessMaker Open Source Edition
* Copyright ( C ) 2004 - 2008 Colosa Inc . 23
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*
* For more information , contact Colosa Inc , 2566 Le Jeune Rd . ,
* Coral Gables , FL , 33134 , USA , or email info @ colosa . com .
2011-02-03 11:13:21 +00:00
*
2010-12-02 23:34:41 +00:00
*/
2011-01-22 12:20:08 +00:00
2010-12-02 23:34:41 +00:00
require_once ( " classes/model/Application.php " );
require_once ( " classes/model/AppCacheView.php " );
require_once ( " classes/model/AppDelay.php " );
require_once ( " classes/model/AppDelegation.php " );
require_once ( " classes/model/AppDocument.php " );
require_once ( " classes/model/AppMessage.php " );
require_once ( " classes/model/AppThread.php " );
require_once ( " classes/model/CaseTracker.php " );
require_once ( " classes/model/CaseTrackerObject.php " );
require_once ( 'classes/model/Configuration.php' );
require_once ( " classes/model/Content.php " );
require_once ( " classes/model/DbSource.php " );
require_once ( " classes/model/Dynaform.php " );
require_once ( " classes/model/InputDocument.php " );
require_once ( " classes/model/Language.php " );
require_once ( 'classes/model/AppMessage.php' );
require_once ( " classes/model/ObjectPermission.php " );
require_once ( " classes/model/OutputDocument.php " );
require_once ( " classes/model/Process.php " );
require_once ( " classes/model/ProcessUser.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/StepSupervisor.php " );
require_once ( " classes/model/StepTrigger.php " );
require_once ( " classes/model/SubApplication.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/AppHistory.php " );
G :: LoadClass ( 'pmScript' );
/**
* A Cases object where you can do start , load , update , refresh about cases
* This object is applied to Task
2011-02-03 11:13:21 +00:00
* @ package workflow . engine . classes
2010-12-02 23:34:41 +00:00
*/
class Cases {
/*
* Ask if an user can start a case
* @ param string $sUIDUser
* @ return boolean
*/
function canStartCase ( $sUIDUser = '' ) {
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'COUNT(*)' );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $sUIDUser );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> next ();
$row = $rs -> getRow ();
$count = $row [ 0 ];
if ( $count > 0 )
return true ;
//check groups
G :: LoadClass ( 'groups' );
$group = new Groups ();
$aGroups = $group -> getActiveGroupsForAnUser ( $sUIDUser );
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'COUNT(*)' );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $aGroups , Criteria :: IN );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> next ();
$row = $rs -> getRow ();
$count = $row [ 0 ];
return ( $count > 0 );
}
/*
* get user starting tasks
* @ param string $sUIDUser
* @ return $rows
*/
function getStartCases ( $sUIDUser = '' ) {
$rows [] = array ( 'uid' => 'char' , 'value' => 'char' );
$tasks = array ();
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $sUIDUser );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
}
//check groups
G :: LoadClass ( 'groups' );
$group = new Groups ();
$aGroups = $group -> getActiveGroupsForAnUser ( $sUIDUser );
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $aGroups , Criteria :: IN );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
}
$c = new Criteria ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addAsColumn ( 'TAS_TITLE' , 'C1.CON_VALUE' );
$c -> addAsColumn ( 'PRO_TITLE' , 'C2.CON_VALUE' );
$c -> addAlias ( 'C1' , 'CONTENT' );
$c -> addAlias ( 'C2' , 'CONTENT' );
$aConditions = array ();
$aConditions [] = array ( TaskPeer :: TAS_UID , 'C1.CON_ID' );
$aConditions [] = array ( 'C1.CON_CATEGORY' , DBAdapter :: getStringDelimiter () . 'TAS_TITLE' . DBAdapter :: getStringDelimiter ());
$aConditions [] = array ( 'C1.CON_LANG' , DBAdapter :: getStringDelimiter () . SYS_LANG . DBAdapter :: getStringDelimiter ());
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$aConditions = array ();
$aConditions [] = array ( TaskPeer :: PRO_UID , 'C2.CON_ID' );
$aConditions [] = array ( 'C2.CON_CATEGORY' , DBAdapter :: getStringDelimiter () . 'PRO_TITLE' . DBAdapter :: getStringDelimiter ());
$aConditions [] = array ( 'C2.CON_LANG' , DBAdapter :: getStringDelimiter () . SYS_LANG . DBAdapter :: getStringDelimiter ());
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$c -> add ( TaskPeer :: TAS_UID , $tasks , Criteria :: IN );
$c -> addAscendingOrderByColumn ( 'PRO_TITLE' );
$c -> addAscendingOrderByColumn ( 'TAS_TITLE' );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
while ( $row = $rs -> getRow ()) {
$rows [] = array ( 'uid' => $row [ 'TAS_UID' ], 'value' => $row [ 'PRO_TITLE' ] . ' (' . $row [ 'TAS_TITLE' ] . ')' , 'pro_uid' => $row [ 'PRO_UID' ]);
$rs -> next ();
$row = $rs -> getRow ();
}
return $rows ;
}
/*
* get user starting tasks , but per type ( dropdown , radio and category type )
* @ param string $sUIDUser
* @ return $rows
*/
function getStartCasesPerType ( $sUIDUser = '' , $typeView ) {
$rows [] = array ( 'uid' => 'char' , 'value' => 'char' );
$tasks = array ();
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $sUIDUser );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
}
//check groups
G :: LoadClass ( 'groups' );
$group = new Groups ();
$aGroups = $group -> getActiveGroupsForAnUser ( $sUIDUser );
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_START , 'TRUE' );
$c -> add ( TaskUserPeer :: USR_UID , $aGroups , Criteria :: IN );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
}
$c = new Criteria ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addAsColumn ( 'TAS_TITLE' , 'C1.CON_VALUE' );
$c -> addAsColumn ( 'PRO_TITLE' , 'C2.CON_VALUE' );
$c -> addAlias ( 'C1' , 'CONTENT' );
$c -> addAlias ( 'C2' , 'CONTENT' );
if ( $typeView == 'category' ) {
$c -> addAsColumn ( 'PRO_CATEGORY' , 'PCS.PRO_CATEGORY' );
$c -> addAsColumn ( 'CATEGORY_NAME' , 'PCSCAT.CATEGORY_NAME' );
$c -> addAlias ( 'PCS' , 'PROCESS' );
$c -> addAlias ( 'PCSCAT' , 'PROCESS_CATEGORY' );
$aConditions = array ();
$aConditions [] = array ( TaskPeer :: PRO_UID , 'PCS.PRO_UID' );
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$aConditions = array ();
$aConditions [] = array ( 'PCS.PRO_CATEGORY' , 'PCSCAT.CATEGORY_UID' );
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
}
$aConditions = array ();
$aConditions [] = array ( TaskPeer :: TAS_UID , 'C1.CON_ID' );
$aConditions [] = array ( 'C1.CON_CATEGORY' , DBAdapter :: getStringDelimiter () . 'TAS_TITLE' . DBAdapter :: getStringDelimiter ());
$aConditions [] = array ( 'C1.CON_LANG' , DBAdapter :: getStringDelimiter () . SYS_LANG . DBAdapter :: getStringDelimiter ());
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$aConditions = array ();
$aConditions [] = array ( TaskPeer :: PRO_UID , 'C2.CON_ID' );
$aConditions [] = array ( 'C2.CON_CATEGORY' , DBAdapter :: getStringDelimiter () . 'PRO_TITLE' . DBAdapter :: getStringDelimiter ());
$aConditions [] = array ( 'C2.CON_LANG' , DBAdapter :: getStringDelimiter () . SYS_LANG . DBAdapter :: getStringDelimiter ());
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$c -> add ( TaskPeer :: TAS_UID , $tasks , Criteria :: IN );
if ( $typeView == 'category' ) {
$c -> addDescendingOrderByColumn ( 'PRO_CATEGORY' );
} else {
$c -> addAscendingOrderByColumn ( 'PRO_TITLE' );
$c -> addAscendingOrderByColumn ( 'TAS_TITLE' );
}
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
while ( $row = $rs -> getRow ()) {
if ( $typeView == 'category' ) {
2011-11-23 18:32:41 -04:00
$taskTitle = TaskPeer :: retrieveByPK ( $row [ 'TAS_UID' ]);
$row [ 'TAS_TITLE' ] = $taskTitle -> getTasTitle ();
2010-12-02 23:34:41 +00:00
$row [ 'CATEGORY_NAME' ] = ( $row [ 'CATEGORY_NAME' ] == '' ) ? G :: LoadTranslation ( 'ID_PROCESS_NOCATEGORY' ) : $row [ 'CATEGORY_NAME' ];
$rows [] = array ( 'uid' => $row [ 'TAS_UID' ], 'value' => $row [ 'PRO_TITLE' ] . ' (' . $row [ 'TAS_TITLE' ] . ')' , 'pro_uid' => $row [ 'PRO_UID' ], 'cat' => $row [ 'PRO_CATEGORY' ], 'catname' => $row [ 'CATEGORY_NAME' ]);
} else
$rows [] = array ( 'uid' => $row [ 'TAS_UID' ], 'value' => $row [ 'PRO_TITLE' ] . ' (' . $row [ 'TAS_TITLE' ] . ')' , 'pro_uid' => $row [ 'PRO_UID' ]);
$rs -> next ();
$row = $rs -> getRow ();
}
return $rows ;
}
/*
* get user ' s SelfService tasks
* @ param string $sUIDUser
* @ return $rows
*/
function getSelfServiceTasks ( $sUIDUser = '' ) {
$rows [] = array ( 'uid' => '' , 'value' => '' );
$tasks = array ();
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_ASSIGN_TYPE , 'SELF_SERVICE' );
$c -> add ( TaskUserPeer :: USR_UID , $sUIDUser );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
}
//check groups
G :: LoadClass ( 'groups' );
$group = new Groups ();
$aGroups = $group -> getActiveGroupsForAnUser ( $sUIDUser );
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addJoin ( TaskPeer :: PRO_UID , ProcessPeer :: PRO_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( TaskPeer :: TAS_UID , TaskUserPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$c -> add ( ProcessPeer :: PRO_STATUS , 'ACTIVE' );
$c -> add ( TaskPeer :: TAS_ASSIGN_TYPE , 'SELF_SERVICE' );
$c -> add ( TaskUserPeer :: USR_UID , $aGroups , Criteria :: IN );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$tasks [] = $row [ 'TAS_UID' ];
$rs -> next ();
$row = $rs -> getRow ();
}
$c = new Criteria ();
$c -> addSelectColumn ( TaskPeer :: TAS_UID );
$c -> addSelectColumn ( TaskPeer :: PRO_UID );
$c -> addAsColumn ( 'TAS_TITLE' , 'C1.CON_VALUE' );
$c -> addAsColumn ( 'PRO_TITLE' , 'C2.CON_VALUE' );
$c -> addAlias ( 'C1' , 'CONTENT' );
$c -> addAlias ( 'C2' , 'CONTENT' );
$aConditions = array ();
$aConditions [] = array ( TaskPeer :: TAS_UID , 'C1.CON_ID' );
$aConditions [] = array ( 'C1.CON_CATEGORY' , DBAdapter :: getStringDelimiter () . 'TAS_TITLE' . DBAdapter :: getStringDelimiter ());
$aConditions [] = array ( 'C1.CON_LANG' , DBAdapter :: getStringDelimiter () . SYS_LANG . DBAdapter :: getStringDelimiter ());
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$aConditions = array ();
$aConditions [] = array ( TaskPeer :: PRO_UID , 'C2.CON_ID' );
$aConditions [] = array ( 'C2.CON_CATEGORY' , DBAdapter :: getStringDelimiter () . 'PRO_TITLE' . DBAdapter :: getStringDelimiter ());
$aConditions [] = array ( 'C2.CON_LANG' , DBAdapter :: getStringDelimiter () . SYS_LANG . DBAdapter :: getStringDelimiter ());
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$c -> add ( TaskPeer :: TAS_UID , $tasks , Criteria :: IN );
$c -> addAscendingOrderByColumn ( 'PRO_TITLE' );
$c -> addAscendingOrderByColumn ( 'TAS_TITLE' );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
while ( $row = $rs -> getRow ()) {
$rows [] = array ( 'uid' => $row [ 'TAS_UID' ], 'value' => $row [ 'PRO_TITLE' ] . ' (' . $row [ 'TAS_TITLE' ] . ')' , 'pro_uid' => $row [ 'PRO_UID' ]);
$rs -> next ();
$row = $rs -> getRow ();
}
return $rows ;
}
function isSelfService ( $USR_UID , $TAS_UID ){
$tasks = $this -> getSelfServiceTasks ( $USR_UID );
foreach ( $tasks as $key => $val ) {
if ( $TAS_UID == $val [ 'uid' ] ){
return true ;
}
}
return false ;
}
/*
* Load an user existing case , this info is used in CaseResume
* @ param string $sAppUid
* @ param integer $iDelIndex > 0 //get the Delegation fields
* @ return Fields
*/
function loadCase ( $sAppUid , $iDelIndex = 0 ) {
try {
$oApp = new Application ;
$aFields = $oApp -> Load ( $sAppUid );
//$aFields = $oApp->toArray(BasePeer::TYPE_FIELDNAME);
2011-01-04 20:37:31 +00:00
$aFields [ 'APP_DATA' ] = G :: array_merges ( G :: getSystemConstants (), @ unserialize ( $aFields [ 'APP_DATA' ]));
2010-12-02 23:34:41 +00:00
switch ( $oApp -> getAppStatus ()) {
case 'COMPLETED' :
$aFields [ 'STATUS' ] = G :: LoadTranslation ( 'ID_COMPLETED' );
break ;
case 'CANCELLED' :
$aFields [ 'STATUS' ] = G :: LoadTranslation ( 'ID_CANCELLED' );
break ;
case 'PAUSED' :
$aFields [ 'STATUS' ] = G :: LoadTranslation ( 'ID_PAUSED' );
break ;
case 'DRAFT' :
$aFields [ 'STATUS' ] = G :: LoadTranslation ( 'ID_DRAFT' );
break ;
case 'TO_DO' :
$aFields [ 'STATUS' ] = G :: LoadTranslation ( 'ID_TO_DO' );
break ;
}
$oUser = new Users ();
try {
$oUser -> load ( $oApp -> getAppInitUser ());
$uFields = $oUser -> toArray ( BasePeer :: TYPE_FIELDNAME );
//$aFields['TITLE'] = $oApp->getAppTitle();
$aFields [ 'TITLE' ] = $aFields [ 'APP_TITLE' ];
$aFields [ 'CREATOR' ] = $oUser -> getUsrFirstname () . ' ' . $oUser -> getUsrLastname ();
$aFields [ 'CREATE_DATE' ] = $oApp -> getAppCreateDate ();
$aFields [ 'UPDATE_DATE' ] = $oApp -> getAppUpdateDate ();
} catch ( Exception $oError ) {
$aFields [ 'TITLE' ] = $oApp -> getAppTitle ();
$aFields [ 'CREATOR' ] = '(USER_DELETED)' ;
$aFields [ 'CREATE_DATE' ] = $oApp -> getAppCreateDate ();
$aFields [ 'UPDATE_DATE' ] = $oApp -> getAppUpdateDate ();
}
if ( $iDelIndex > 0 ) { //get the Delegation fields,
$oAppDel = new AppDelegation ();
$oAppDel -> Load ( $sAppUid , $iDelIndex );
$aAppDel = $oAppDel -> toArray ( BasePeer :: TYPE_FIELDNAME );
$aFields [ 'TAS_UID' ] = $aAppDel [ 'TAS_UID' ];
$aFields [ 'DEL_INDEX' ] = $aAppDel [ 'DEL_INDEX' ];
$aFields [ 'DEL_PREVIOUS' ] = $aAppDel [ 'DEL_PREVIOUS' ];
$aFields [ 'DEL_TYPE' ] = $aAppDel [ 'DEL_TYPE' ];
$aFields [ 'DEL_PRIORITY' ] = $aAppDel [ 'DEL_PRIORITY' ];
$aFields [ 'DEL_THREAD_STATUS' ] = $aAppDel [ 'DEL_THREAD_STATUS' ];
$aFields [ 'DEL_THREAD' ] = $aAppDel [ 'DEL_THREAD' ];
$aFields [ 'DEL_DELEGATE_DATE' ] = $aAppDel [ 'DEL_DELEGATE_DATE' ];
$aFields [ 'DEL_INIT_DATE' ] = $aAppDel [ 'DEL_INIT_DATE' ];
$aFields [ 'DEL_TASK_DUE_DATE' ] = $aAppDel [ 'DEL_TASK_DUE_DATE' ];
$aFields [ 'DEL_FINISH_DATE' ] = $aAppDel [ 'DEL_FINISH_DATE' ];
$aFields [ 'CURRENT_USER_UID' ] = $aAppDel [ 'USR_UID' ];
try {
$oCurUser = new Users ();
$oCurUser -> load ( $aAppDel [ 'USR_UID' ]);
$aFields [ 'CURRENT_USER' ] = $oCurUser -> getUsrFirstname () . ' ' . $oCurUser -> getUsrLastname ();
} catch ( Exception $oError ) {
$aFields [ 'CURRENT_USER' ] = '' ;
}
}
return $aFields ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* LoadCaseByNumber
* @ param string $caseNumber
* @ return $aCases
*/
function loadCaseByNumber ( $sCaseNumber ) {
//('SELECT * FROM APP_DELEGATION WHERE APP_PROC_CODE="'.$sCaseNumber.'" ');
try {
$aCases = array ();
$c = new Criteria ();
$c -> add ( ApplicationPeer :: APP_PROC_CODE , $sCaseNumber );
$rs = ApplicationPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$case [ 'APP_UID' ] = $row [ 'APP_UID' ];
$case [ 'APP_NUMBER' ] = $row [ 'APP_NUMBER' ];
$case [ 'APP_STATUS' ] = $row [ 'APP_STATUS' ];
$case [ 'PRO_UID' ] = $row [ 'PRO_UID' ];
$case [ 'APP_PARALLEL' ] = $row [ 'APP_PARALLEL' ];
$case [ 'APP_CUR_USER' ] = $row [ 'APP_CUR_USER' ];
$aCases [] = $case ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aCases ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function loads the label case
* PROCESO :
* If there is a label then it is loaded
* To get APP_DELEGATIONS that they are opened in the case
* To look for APP_DELEGATIONS wich TASK in it , It has a label defined ( CASE_TITLE )
* We need to read the last APP_DELEGATION -> TASK
* @ param string $sAppUid
* @ param string $aAppData
* @ param string $sLabel
* @ return $appLabel
*/
function refreshCaseLabel ( $sAppUid , $aAppData , $sLabel ) {
$getAppLabel = " getApp $sLabel " ;
$getTasDef = " getTasDef $sLabel " ;
$oApplication = new Application ;
if ( ! $oApplication -> exists ( $sAppUid )) {
return null ;
} else {
$oApplication -> load ( $sAppUid );
$appLabel = $oApplication -> $getAppLabel ();
}
$cri = new Criteria ;
$cri -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$cri -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , " OPEN " );
$currentDelegations = AppDelegationPeer :: doSelect ( $cri );
for ( $r = count ( $currentDelegations ) - 1 ; $r >= 0 ; $r -- ) {
$task = TaskPeer :: retrieveByPk ( $currentDelegations [ $r ] -> getTasUid ());
$caseLabel = $task -> $getTasDef ();
if ( $caseLabel != '' ) {
$appLabel = G :: replaceDataField ( $caseLabel , $aAppData );
break ;
}
}
return $appLabel ;
}
/*
* This function loads the title and description label in a case
* PROCESO :
* If there is a label then it is loaded
* To get APP_DELEGATIONS that they are opened in the case
* To look for APP_DELEGATIONS wich TASK in it , It has a label defined ( CASE_TITLE )
* We need to read the last APP_DELEGATION -> TASK
* @ param string $sAppUid
* @ param array $aAppData
* @ return $res
*/
function refreshCaseTitleAndDescription ( $sAppUid , $aAppData ) {
$res [ 'APP_TITLE' ] = null ;
$res [ 'APP_DESCRIPTION' ] = null ;
//$res['APP_PROC_CODE'] = null;
$oApplication = new Application ;
try {
$fields = $oApplication -> load ( $sAppUid );
}
catch ( Exception $e ) {
return $res ;
}
$res [ 'APP_TITLE' ] = $fields [ 'APP_TITLE' ]; // $oApplication->$getAppLabel();
$res [ 'APP_DESCRIPTION' ] = $fields [ 'APP_DESCRIPTION' ];
$lang = defined ( 'SYS_LANG' ) ? SYS_LANG : 'en' ;
$bUpdatedDefTitle = false ;
$bUpdatedDefDescription = false ;
$cri = new Criteria ;
$cri -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$cri -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , " OPEN " );
$currentDelegations = AppDelegationPeer :: doSelect ( $cri );
for ( $r = count ( $currentDelegations ) - 1 ; $r >= 0 ; $r -- ) {
//load only the tas_def fields, because these three or two values are needed
//SELECT CONTENT.CON_CATEGORY, CONTENT.CON_VALUE FROM CONTENT WHERE CONTENT.CON_ID='63515150649b03231c3b020026243292' AND CONTENT.CON_LANG='es'
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ContentPeer :: CON_CATEGORY );
$c -> addSelectColumn ( ContentPeer :: CON_VALUE );
$c -> add ( ContentPeer :: CON_ID , $currentDelegations [ $r ] -> getTasUid ());
$c -> add ( ContentPeer :: CON_LANG , $lang );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
switch ( $row [ 'CON_CATEGORY' ]) {
case 'TAS_DEF_TITLE' :
$tasDefTitle = $row [ 'CON_VALUE' ];
if ( $tasDefTitle != '' && ! $bUpdatedDefTitle ) {
$res [ 'APP_TITLE' ] = G :: replaceDataField ( $tasDefTitle , $aAppData );
$bUpdatedDefTitle = true ;
}
break ;
case 'TAS_DEF_DESCRIPTION' : $tasDefDescription = $row [ 'CON_VALUE' ];
$tasDefDescription = $row [ 'CON_VALUE' ];
if ( $tasDefDescription != '' && ! $bUpdatedDefDescription ) {
$res [ 'APP_DESCRIPTION' ] = G :: replaceDataField ( $tasDefDescription , $aAppData );
$bUpdatedDefDescription = true ;
}
break ;
//case 'TAS_DEF_PROC_CODE' : $tasDefProcCode = $row['CON_VALUE'];
// break;
}
$rs -> next ();
$row = $rs -> getRow ();
}
}
return $res ;
}
/*
* optimized for speed . This function loads the title and description label in a case
* If there is a label then it is loaded
* Get Open APP_DELEGATIONS in the case
* To look for APP_DELEGATIONS wich TASK in it , It has a label defined ( CASE_TITLE )
* We need to read the last APP_DELEGATION -> TASK
* @ param string $sAppUid
* @ param array $aAppData
* @ return $res
*/
function newRefreshCaseTitleAndDescription ( $sAppUid , $fields , $aAppData ) {
$res = array ();
$lang = defined ( 'SYS_LANG' ) ? SYS_LANG : 'en' ;
$bUpdatedDefTitle = false ;
$bUpdatedDefDescription = false ;
$cri = new Criteria ;
$cri -> clearSelectColumns ();
$cri -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$cri -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$cri -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , " OPEN " );
$rsCri = AppDelegationPeer :: doSelectRS ( $cri );
$rsCri -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rsCri -> next ();
$rowCri = $rsCri -> getRow ();
while ( is_array ( $rowCri )) {
//load only the tas_def fields, because these three or two values are needed
//SELECT CONTENT.CON_CATEGORY, CONTENT.CON_VALUE FROM CONTENT WHERE CONTENT.CON_ID='63515150649b03231c3b020026243292' AND CONTENT.CON_LANG='es'
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ContentPeer :: CON_CATEGORY );
$c -> addSelectColumn ( ContentPeer :: CON_VALUE );
$c -> add ( ContentPeer :: CON_ID , $rowCri [ 'TAS_UID' ] );
$c -> add ( ContentPeer :: CON_LANG , $lang );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
switch ( $row [ 'CON_CATEGORY' ]) {
case 'TAS_DEF_TITLE' :
if ( $bUpdatedDefTitle ) break ;
$tasDefTitle = trim ( $row [ 'CON_VALUE' ]);
if ( $tasDefTitle != '' ) {
$newAppTitle = G :: replaceDataField ( $tasDefTitle , $aAppData );
$res [ 'APP_TITLE' ] = $newAppTitle ;
if ( isset ( $fields [ 'APP_TITLE' ]) && $fields [ 'APP_TITLE' ] == $newAppTitle ) break ;
$bUpdatedDefTitle = true ;
/// updating the value in content for row (APP_TITLE,$lan)
$con = Propel :: getConnection ( 'workflow' );
$c1 = new Criteria ( 'workflow' );
$c1 -> add ( ContentPeer :: CON_CATEGORY , 'APP_TITLE' );
$c1 -> add ( ContentPeer :: CON_ID , $sAppUid );
$c1 -> add ( ContentPeer :: CON_LANG , $lang );
// update set
$c2 = new Criteria ( 'workflow' );
$c2 -> add ( ContentPeer :: CON_VALUE , $newAppTitle );
BasePeer :: doUpdate ( $c1 , $c2 , $con );
}
break ;
case 'TAS_DEF_DESCRIPTION' :
if ( $bUpdatedDefDescription ) break ;
$tasDefDescription = trim ( $row [ 'CON_VALUE' ]);
if ( $tasDefDescription != '' ) {
$newAppDescription = G :: replaceDataField ( $tasDefDescription , $aAppData );
$res [ 'APP_DESCRIPTION' ] = $newAppDescription ;
if ( isset ( $fields [ 'APP_DESCRIPTION' ]) && $fields [ 'APP_DESCRIPTION' ] == $newAppDescription ) break ;
$bUpdatedDefDescription = true ;
/// updating the value in content for row (APP_TITLE,$lan)
$con = Propel :: getConnection ( 'workflow' );
$c1 = new Criteria ( 'workflow' );
$c1 -> add ( ContentPeer :: CON_CATEGORY , 'APP_DESCRIPTION' );
$c1 -> add ( ContentPeer :: CON_ID , $sAppUid );
$c1 -> add ( ContentPeer :: CON_LANG , $lang );
// update set
$c2 = new Criteria ( 'workflow' );
$c2 -> add ( ContentPeer :: CON_VALUE , $newAppDescription );
BasePeer :: doUpdate ( $c1 , $c2 , $con );
}
break ;
}
$rs -> next ();
$row = $rs -> getRow ();
}
$rsCri -> next ();
$rowCri = $rsCri -> getRow ();
}
return $res ;
}
/**
* Small function , it uses to return the title from a case
*
*
* @ name refreshCaseTitle
* @ param string $sAppUid
* @ param array $aAppData
* @ access public
* @ return $appLabel
*/
function refreshCaseTitle ( $sAppUid , $aAppData ) {
return $this -> refreshCaseLabel ( $sAppUid , $aAppData , " Title " );
}
/**
* Small function , it uses to return the description from a case
*
*
* @ name refreshCaseDescription
* @ param string $sAppUid
* @ param array $aAppData
* @ access public
* @ return $appLabel
*/
function refreshCaseDescription ( $sAppUid , $aAppData ) {
return $this -> refreshCaseLabel ( $sAppUid , $aAppData , " Description " );
}
/**
* Small function , it uses to return the code process from a case
*
*
* @ name refreshCaseDescription
* @ param string $sAppUid
* @ param array $aAppData
* @ access public
* @ return $appLabel
*/
function refreshCaseStatusCode ( $sAppUid , $aAppData ) {
return $this -> refreshCaseLabel ( $sAppUid , $aAppData , " ProcCode " );
}
/**
* This function return an array without difference
*
*
* @ name arrayRecursiveDiff
* @ param array $aArray1
* @ param array $aArray2
* @ access public
* @ return $appLabel
*/
function arrayRecursiveDiff ( $aArray1 , $aArray2 ) {
$aReturn = array ();
foreach ( $aArray1 as $mKey => $mValue ) {
if ( array_key_exists ( $mKey , $aArray2 )) {
if ( is_array ( $mValue )) {
$aRecursiveDiff = $this -> arrayRecursiveDiff ( $mValue , $aArray2 [ $mKey ]);
if ( count ( $aRecursiveDiff )) {
$aReturn [ $mKey ] = $aRecursiveDiff ;
}
} else {
if ( $mValue != $aArray2 [ $mKey ]) {
$aReturn [ $mKey ] = $aArray2 [ $mKey ];
}
}
} else {
$aReturn [ $mKey ] = $aArray2 [ $mKey ];
}
}
return $aReturn ;
}
/*
* Update an existing case , this info is used in CaseResume
*
* @ name updateCase
* @ param string $sAppUid
* @ param integer $iDelIndex > 0 //get the Delegation fields
* @ return Fields
*/
function updateCase ( $sAppUid , $Fields = array ()) {
try {
$aApplicationFields = $Fields [ 'APP_DATA' ];
$Fields [ 'APP_UID' ] = $sAppUid ;
$Fields [ 'APP_UPDATE_DATE' ] = 'now' ;
$Fields [ 'APP_DATA' ] = serialize ( $Fields [ 'APP_DATA' ]);
/*
$oApp = new Application ;
$appFields = $oApp -> load ( $sAppUid );
*/
$oApp = ApplicationPeer :: retrieveByPk ( $sAppUid );
$appFields = $oApp -> toArray ( BasePeer :: TYPE_FIELDNAME );
if ( isset ( $Fields [ 'APP_TITLE' ])) $appFields [ 'APP_TITLE' ] = $Fields [ 'APP_TITLE' ];
if ( isset ( $Fields [ 'APP_DESCRIPTION' ])) $appFields [ 'APP_DESCRIPTION' ] = $Fields [ 'APP_DESCRIPTION' ];
$newValues = $this -> newRefreshCaseTitleAndDescription ( $sAppUid , $appFields , $aApplicationFields );
//Start: Save History --By JHL
if ( isset ( $Fields [ 'CURRENT_DYNAFORM' ])) { //only when that variable is set.. from Save
$FieldsBefore = $this -> loadCase ( $sAppUid );
$FieldsDifference = $this -> arrayRecursiveDiff ( $FieldsBefore [ 'APP_DATA' ], $aApplicationFields );
$fieldsOnBoth = array_intersect_assoc ( $FieldsBefore [ 'APP_DATA' ], $aApplicationFields );
//Add fields that weren't in previous version
foreach ( $aApplicationFields as $key => $value ) {
if ( ! ( isset ( $fieldsOnBoth [ $key ]))) {
$FieldsDifference [ $key ] = $value ;
}
}
if (( is_array ( $FieldsDifference )) && ( count ( $FieldsDifference ) > 0 )) { //There are changes
$appHistory = new AppHistory ();
$aFieldsHistory = $Fields ;
$aFieldsHistory [ 'APP_DATA' ] = serialize ( $FieldsDifference );
$appHistory -> insertHistory ( $aFieldsHistory );
}
}
//End Save History
//we are removing the app_title and app_description from this array, because they already be updated in newRefreshCaseTitleAndDescription function
if ( isset ( $Fields [ 'APP_TITLE' ])) unset ( $Fields [ 'APP_TITLE' ]);
if ( isset ( $Fields [ 'APP_DESCRIPTION' ])) unset ( $Fields [ 'APP_DESCRIPTION' ]);
$oApp -> update ( $Fields );
$DEL_INDEX = isset ( $Fields [ 'DEL_INDEX' ]) ? $Fields [ 'DEL_INDEX' ] : '' ;
$TAS_UID = isset ( $Fields [ 'TAS_UID' ]) ? $Fields [ 'TAS_UID' ] : '' ;
G :: LoadClass ( 'reportTables' );
2011-06-28 12:53:25 -04:00
require_once 'classes/model/AdditionalTables.php' ;
2010-12-02 23:34:41 +00:00
$oReportTables = new ReportTables ();
2011-06-28 12:53:25 -04:00
$addtionalTables = new additionalTables ();
2010-12-02 23:34:41 +00:00
$oReportTables -> updateTables ( $appFields [ 'PRO_UID' ], $sAppUid , $Fields [ 'APP_NUMBER' ], $aApplicationFields );
2011-06-28 12:53:25 -04:00
$addtionalTables -> updateReportTables ( $appFields [ 'PRO_UID' ], $sAppUid , $Fields [ 'APP_NUMBER' ], $aApplicationFields );
2010-12-02 23:34:41 +00:00
//now update the priority in appdelegation table, using the defined variable in task
2011-01-04 20:37:31 +00:00
if ( trim ( $DEL_INDEX ) != '' && trim ( $TAS_UID ) != '' ) {
2010-12-02 23:34:41 +00:00
//optimized code to avoid load task content row.
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TaskPeer :: TAS_PRIORITY_VARIABLE );
$c -> add ( TaskPeer :: TAS_UID , $TAS_UID );
$rs = TaskPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
$VAR_PRI = substr ( $row [ 'TAS_PRIORITY_VARIABLE' ], 2 );
//$oTask = new Task;
//$array = $oTask->load($TAS_UID);
//$VAR_PRI = substr($array['TAS_PRIORITY_VARIABLE'], 2);
//end optimized code.
$x = unserialize ( $Fields [ 'APP_DATA' ]);
if ( isset ( $x [ $VAR_PRI ])) {
2011-01-04 20:37:31 +00:00
if ( trim ( $x [ $VAR_PRI ]) != '' ) {
2010-12-02 23:34:41 +00:00
$oDel = new AppDelegation ;
$array = array ();
$array [ 'APP_UID' ] = $sAppUid ;
$array [ 'DEL_INDEX' ] = $DEL_INDEX ;
$array [ 'TAS_UID' ] = $TAS_UID ;
$array [ 'DEL_PRIORITY' ] = ( isset ( $x [ $VAR_PRI ]) ? ( $x [ $VAR_PRI ] >= 1 && $x [ $VAR_PRI ] <= 5 ? $x [ $VAR_PRI ] : '3' ) : '3' );
$oDel -> update ( $array );
}
}
}
return $Fields ;
}
catch ( exception $e ) {
throw ( $e );
}
}
/*
* Remove an existing case ,
*
* @ name removeCase
* @ param string $sAppUid
* @ return Fields
*/
function removeCase ( $sAppUid ) {
try {
$oApplication = new Application ();
$oAppDelegation = new AppDelegation ();
$oAppDocument = new AppDocument ();
//Delete the delegations of a application
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
while ( $aRow2 = $oDataset2 -> getRow ()) {
$oAppDelegation -> remove ( $sAppUid , $aRow2 [ 'DEL_INDEX' ]);
$oDataset2 -> next ();
}
//Delete the documents assigned to a application
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDocumentPeer :: APP_UID , $sAppUid );
$oDataset2 = AppDocumentPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
while ( $aRow2 = $oDataset2 -> getRow ()) {
$oAppDocument -> remove ( $aRow2 [ 'APP_DOC_UID' ], $aRow2 [ 'DOC_VERSION' ]);
$oDataset2 -> next ();
}
//Delete the actions from a application
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelayPeer :: APP_UID , $sAppUid );
AppDelayPeer :: doDelete ( $oCriteria2 );
//Delete the messages from a application
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppMessagePeer :: APP_UID , $sAppUid );
AppMessagePeer :: doDelete ( $oCriteria2 );
//Delete the threads from a application
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppThreadPeer :: APP_UID , $sAppUid );
AppThreadPeer :: doDelete ( $oCriteria2 );
//Before delete verify if is a child case
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( SubApplicationPeer :: APP_UID , $sAppUid );
$oCriteria2 -> add ( SubApplicationPeer :: SA_STATUS , 'ACTIVE' );
if ( SubApplicationPeer :: doCount ( $oCriteria2 ) > 0 ) {
G :: LoadClass ( 'derivation' );
$oDerivation = new Derivation ();
$oDerivation -> verifyIsCaseChild ( $sAppUid );
}
//Delete the registries in the table SUB_APPLICATION
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( SubApplicationPeer :: APP_UID , $sAppUid );
SubApplicationPeer :: doDelete ( $oCriteria2 );
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( SubApplicationPeer :: APP_PARENT , $sAppUid );
SubApplicationPeer :: doDelete ( $oCriteria2 );
$oApp = new Application ;
return $oApp -> remove ( $sAppUid );
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* Set the DEL_INIT_DATE
*
* @ name setDelInitDate
* @ param string $sAppUid
* @ param string $iDelIndex
* @ return Fields
*/
function setDelInitDate ( $sAppUid , $iDelIndex ) {
try {
$oAppDel = AppDelegationPeer :: retrieveByPk ( $sAppUid , $iDelIndex );
$oAppDel -> setDelInitDate ( " now " );
$oAppDel -> save ();
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* Set user who is claim ( ex - catch ) a self service routing
*
* @ name setCatchUser
* @ param string $sAppUid
* @ param string $iDelIndex
* @ param string $usrId
* @ return Fields
*/
function setCatchUser ( $sAppUid , $iDelIndex , $usrId ) {
try {
$oAppDel = AppDelegationPeer :: retrieveByPk ( $sAppUid , $iDelIndex );
$oAppDel -> setDelInitDate ( " now " );
$oAppDel -> setUsrUid ( $usrId );
$oAppDel -> save ();
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* GetOpenThreads
*
* @ name GetOpenThreads
* @ param string $sAppUid
* @ return $row ( number of APP_DELEGATION rows )
*/
function GetOpenThreads ( $sAppUid ) {
//('SELECT * FROM APP_DELEGATION WHERE APP_UID="'.$currentDelegation['APP_UID'].'" AND DEL_THREAD_STATUS="OPEN"');
try {
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'COUNT(*)' );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$rs = AppDelegationPeer :: doSelectRs ( $c );
$rs -> next ();
$row = $rs -> getRow ();
return intval ( $row [ 0 ]);
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* this function returns SiblingThreads in a task
*
* @ name getSiblingThreads
* @ param string $sAppUid
* @ param string $iDelIndex
* @ return $aThreads
*/
function getSiblingThreads ( $sAppUid , $iDelIndex ) {
try {
//get the parent thread
$c = new Criteria ();
$c -> add ( AppThreadPeer :: APP_UID , $sAppUid );
$c -> add ( AppThreadPeer :: DEL_INDEX , $iDelIndex );
$rs = AppThreadPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
$iParent = $row [ 'APP_THREAD_PARENT' ];
//get the sibling
$aThreads = array ();
$c = new Criteria ();
$c -> add ( AppThreadPeer :: APP_UID , $sAppUid );
$c -> add ( AppThreadPeer :: APP_THREAD_PARENT , $iParent );
$c -> add ( AppThreadPeer :: DEL_INDEX , $iDelIndex , Criteria :: NOT_EQUAL );
$rs = AppThreadPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$aThreads [] = $row ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aThreads ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function returns the threads open in a task
* get an array with all sibling threads open from next task
*
* @ name getOpenSiblingThreads ,
* @ param string $sNextTask
* @ param string $sAppUid
* @ param string $iDelIndex
* @ param string $sCurrentTask
* @ return $aThreads
*/
function getOpenSiblingThreads ( $sNextTask , $sAppUid , $iDelIndex , $sCurrentTask ) {
try {
//Get all tasks that are previous to my NextTask, we want to know if there are pending task for my nexttask
//we need to filter only seq joins going to my next task
//and we are removing the current task from the search
$aThreads = array ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( RoutePeer :: ROU_NEXT_TASK , $sNextTask );
$oCriteria -> add ( RoutePeer :: TAS_UID , $sCurrentTask , Criteria :: NOT_EQUAL );
$oCriteria -> add ( RoutePeer :: ROU_TYPE , 'SEC-JOIN' );
$oDataset = RoutePeer :: doSelectRs ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
while ( $aRow = $oDataset -> getRow ()) {
$aPrevious = $this -> searchOpenPreviousTasks ( $aRow [ 'TAS_UID' ], $sAppUid );
if ( ! ( is_array ( $aPrevious ) && count ( $aPrevious ) == 0 ))
$aThreads [] = array_merge ( $aPrevious , $aThreads );
$oDataset -> next ();
}
return $aThreads ;
} catch ( exception $e ) {
throw ( $e );
}
}
2011-01-26 16:39:58 +00:00
/**
2010-12-02 23:34:41 +00:00
* This function looks for the open previous task
* get an array with all sibling previous threads open from next task
*
* @ name searchOpenPreviousTasks ,
2011-01-26 16:39:58 +00:00
* @ param string $taskUid
2010-12-02 23:34:41 +00:00
* @ param string $sAppUid
2011-01-26 16:39:58 +00:00
* @ param array $aPreviousTasks optional array that serves to trace the task routes in order to avoid infinite loops .
2010-12-02 23:34:41 +00:00
* @ return $aThreads
*/
2011-01-26 16:39:58 +00:00
function searchOpenPreviousTasks ( $taskUid , $sAppUid , $aPreviousTasks = array ()) {
2010-12-02 23:34:41 +00:00
//in this array we are storing all open delegation rows.
$aTaskReviewed = array ();
//check if this task ( $taskUid ) has open delegations
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$oCriteria2 -> add ( AppDelegationPeer :: TAS_UID , $taskUid );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$oDataset2 = AppDelegationPeer :: doSelectRs ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
if ( is_array ( $aRow2 )) {
//there is an open delegation, so we need to return the delegation row
$aTaskReviewed [] = $aRow2 ;
return $aTaskReviewed ;
} else {
$oCriteria3 = new Criteria ( 'workflow' );
$oCriteria3 -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$oCriteria3 -> add ( AppDelegationPeer :: TAS_UID , $taskUid );
$oDataset3 = AppDelegationPeer :: doSelectRs ( $oCriteria3 );
$oDataset3 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset3 -> next ();
$aRow3 = $oDataset3 -> getRow ();
if ( is_array ( $aRow3 )) {
return $aTaskReviewed ; //returning empty array
} else { //if not we check previous tasks
}
}
//get all previous task from $taskUid, and return open delegations rows, if there are
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( RoutePeer :: ROU_NEXT_TASK , $taskUid );
$oDataset = RoutePeer :: doSelectRs ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
while ( is_array ( $aRow )) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$oCriteria2 -> add ( AppDelegationPeer :: TAS_UID , $aRow [ 'TAS_UID' ]);
$oCriteria2 -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$oDataset2 = AppDelegationPeer :: doSelectRs ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
if ( is_array ( $aRow2 )) {
//there is an open delegation, so we need to return the delegation row
$aTaskReviewed [] = $aRow2 ;
} else {
$oCriteria3 = new Criteria ( 'workflow' );
$oCriteria3 -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$oCriteria3 -> add ( AppDelegationPeer :: TAS_UID , $aRow [ 'TAS_UID' ]);
$oDataset3 = AppDelegationPeer :: doSelectRs ( $oCriteria3 );
$oDataset3 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset3 -> next ();
$aRow3 = $oDataset3 -> getRow ();
if ( is_array ( $aRow3 )) {
2011-10-24 08:48:59 -04:00
//TODO there are closed delegations, so we need to get back without returning delegation rows
}
else { //if not we start the recursion searching previous open tasks from this task.
if ( ! in_array ( $aRow [ 'TAS_UID' ], $aPreviousTasks )) {
// storing the current task uid of the task currently checked
$aPreviousTasks [] = $aRow [ 'TAS_UID' ];
// passing the array of previous tasks in oprder to avoid an infinite loop that prevents
$openPreviousTask = $this -> searchOpenPreviousTasks ( $aRow [ 'TAS_UID' ], $sAppUid , $aPreviousTasks );
if ( count ( $previousTasks ) > 0 ) {
array_push ( $aTaskReviewed , $openPreviousTask );
}
}
2010-12-02 23:34:41 +00:00
}
}
//$this->searchOpenPreviousTasks();
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
}
return $aTaskReviewed ;
}
/*
* This function returns the total number of previous task
*
* @ name CountTotalPreviousTasks
* @ param string $sTasUid $nextDel [ 'TAS_UID' ]
* @ return $row [ 0 ]
*/
function CountTotalPreviousTasks ( $sTasUid ) {
//SELECT * FROM ROUTE WHERE ROU_NEXT_TASK="44756CDAC1BF4F";
try {
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'COUNT(*)' );
$c -> add ( RoutePeer :: ROU_NEXT_TASK , $sTasUid );
$rs = RoutePeer :: doSelectRs ( $c );
$rs -> next ();
$row = $rs -> getRow ();
return intval ( $row [ 0 ]);
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function gets open and null rows in delegation
*
* @ name getOpenNullDelegations
* @ param string $sAppUid $nextDel [ 'TAS_UID' ]
* @ param string $sTasUid
* @ return $pendingDel
*/
function getOpenNullDelegations ( $sAppUid , $sTasUid ) {
$pendingDel = array ();
//PRINT "getOpenNullDelegations ( $sAppUid, $sTasUid ) ";
//SELECT D.*,R.* FROM ROUTE R LEFT JOIN APP_DELEGATION D ON (R.TAS_UID=D.TAS_UID)
//WHERE ((D.DEL_THREAD_STATUS="OPEN" AND D.APP_UID="'.$nextDel['APP_UID'].'") OR ISNULL(D.DEL_THREAD_STATUS)) AND R.ROU_NEXT_TASK="'.$nextDel['TAS_UID'].'"";
//SELECT D.*,R.* FROM ROUTE R LEFT JOIN APP_DELEGATION D ON (R.TAS_UID=D.TAS_UID)
//where ROU_NEXT_TASK = '8479670B93B749' AND APP_UID = ''
try {
//first query
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( AppDelegationPeer :: APP_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PREVIOUS );
$c -> addSelectColumn ( AppDelegationPeer :: PRO_UID );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: USR_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_TYPE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_THREAD );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_THREAD_STATUS );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_DELEGATE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_TASK_DUE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( RoutePeer :: ROU_UID );
$c -> addSelectColumn ( RoutePeer :: ROU_PARENT );
$c -> addSelectColumn ( RoutePeer :: ROU_NEXT_TASK );
$c -> addSelectColumn ( RoutePeer :: ROU_CASE );
$c -> addSelectColumn ( RoutePeer :: ROU_TYPE );
$c -> addSelectColumn ( RoutePeer :: ROU_CONDITION );
$c -> addSelectColumn ( RoutePeer :: ROU_TO_LAST_USER );
$c -> addSelectColumn ( RoutePeer :: ROU_OPTIONAL );
$c -> addSelectColumn ( RoutePeer :: ROU_SEND_EMAIL );
$c -> addJoin ( AppDelegationPeer :: TAS_UID , RoutePeer :: TAS_UID );
$c -> add ( RoutePeer :: ROU_NEXT_TASK , $sTasUid );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$rs = RoutePeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
if ( $row [ 'DEL_THREAD_STATUS' ] == 'OPEN' && $row [ 'APP_UID' ] = $sAppUid )
$pendingDel [] = $row ;
else
krumo ( $row [ 'DEL_THREAD_STATUS' ]);
$rs -> next ();
$row = $rs -> getRow ();
}
return $pendingDel ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function looks for some open rows in delegation
*
* @ name isRouteOpen
* @ param string $sAppUid $nextDel [ 'APP_UID' ]
* @ param string $sTasUid $nextDel [ 'TAS_UID' ]
* @ return true or false
*/
function isRouteOpen ( $sAppUid , $sTasUid ) {
try {
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'COUNT(*)' );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: TAS_UID , $sTasUid );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$rs = RoutePeer :: doSelectRs ( $c );
$rs -> next ();
$row = $rs -> getRow ();
$open = ( $row [ 0 ] >= 1 );
if ( $open )
return true ;
$c -> clearSelectColumns ();
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: USR_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_TYPE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_THREAD );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_THREAD_STATUS );
$c -> addSelectColumn ( RoutePeer :: ROU_UID );
$c -> addSelectColumn ( RoutePeer :: ROU_NEXT_TASK );
$c -> addSelectColumn ( RoutePeer :: ROU_CASE );
$c -> addSelectColumn ( RoutePeer :: ROU_TYPE );
$c -> addJoin ( AppDelegationPeer :: TAS_UID , RoutePeer :: TAS_UID );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( RoutePeer :: ROU_NEXT_TASK , $sTasUid );
$rs = RoutePeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
$sql = 'SELECT D.*,R.* FROM ROUTE R LEFT JOIN APP_DELEGATION D ON (R.TAS_UID=D.TAS_UID) WHERE APP_UID="' . $sAppUid . '" AND ROU_NEXT_TASK="' . $sTasUid . '"' ;
while ( is_array ( $row )) {
switch ( $row [ 'DEL_THREAD_STATUS' ]) {
case 'OPEN' :
//case 'NONE':
$open = true ;
break ;
case 'CLOSED' :
//case 'DONE':
//case 'NOTDONE':
break ;
case '' :
case null :
default :
$open = $this -> isRouteOpen ( $sAppUid , $row [ 'TAS_UID' ]);
break ;
}
if ( $open )
return true ;
$rs -> next ();
$row = $rs -> getRow ();
}
return false ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function creates a new row into APP_DELEGATION
*
* @ name newAppDelegation
* @ param string $sProUid ,
* @ param string $sAppUid ,
* @ param string $sTasUid ,
* @ param string $sUsrUid
* @ param string $sPrevious
* @ param string $iPriority
* @ param string $sDelType
* @ param string $iAppThreadIndex
* @ return void
*/
2011-09-28 12:41:10 -04:00
function newAppDelegation ( $sProUid , $sAppUid , $sTasUid , $sUsrUid , $sPrevious , $iPriority , $sDelType , $iAppThreadIndex = 1 , $nextDel = null ) {
2010-12-02 23:34:41 +00:00
try {
$appDel = new AppDelegation ();
2011-09-28 12:41:10 -04:00
return $appDel -> createAppDelegation ( $sProUid , $sAppUid , $sTasUid , $sUsrUid , $iAppThreadIndex , $iPriority , false , $sPrevious , $nextDel );
2010-12-02 23:34:41 +00:00
}
catch ( exception $e ) {
throw ( $e );
}
}
/*
* this function is used to update a row in APP_DELEGATION
*
*
* @ name updateAppDelegation
* @ param string $sAppUid ,
* @ param string $iDelIndex
* @ param string $iAppThreadIndex ,
* @ return true
*/
function updateAppDelegation ( $sAppUid , $iDelIndex , $iAppThreadIndex ) {
try {
$appDelegation = new AppDelegation ();
$aData = array ();
$aData [ 'APP_UID' ] = $sAppUid ;
$aData [ 'DEL_INDEX' ] = $iDelIndex ;
$aData [ 'DEL_THREAD' ] = $iAppThreadIndex ;
$appDelegation -> update ( $aData );
return true ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function gets all rows in APP_DELEGATION
*
* @ name GetAllDelegations
* @ param string $sAppUid
* @ return $aDelegations
*/
function GetAllDelegations ( $sAppUid ) {
//('SELECT * FROM APP_DELEGATION WHERE APP_UID="'.$currentDelegation['APP_UID'].'" ');
try {
$aDelegations = array ();
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$rs = AppDelegationPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$aDelegations [] = $row ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aDelegations ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* We ' re getting all threads in a task
*
* @ name GetAllDelegations
* @ param string $sAppUid
* @ return $aThreads
*/
function GetAllThreads ( $sAppUid ) {
//('SELECT * FROM APP_DELEGATION WHERE APP_UID="'.$currentDelegation['APP_UID'].'" ');
try {
$aThreads = array ();
$c = new Criteria ();
$c -> add ( AppThreadPeer :: APP_UID , $sAppUid );
$rs = AppThreadPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$aThreads [] = $row ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aThreads ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* With this function we can do update in AppThread
*
* @ name updateAppThread
* @ param string $sAppUid ,
* @ param string $iAppThreadIndex ,
* @ param string $iNewDelIndex
* @ return $iNewDelIndex ;
*/
function updateAppThread ( $sAppUid , $iAppThreadIndex , $iNewDelIndex ) {
try {
/// updating the DEL_INDEX value in the APP_THREAD
$con = Propel :: getConnection ( 'workflow' );
$c1 = new Criteria ( 'workflow' );
$c1 -> add ( AppThreadPeer :: APP_UID , $sAppUid );
$c1 -> add ( AppThreadPeer :: APP_THREAD_INDEX , $iAppThreadIndex );
// update set
$c2 = new Criteria ( 'workflow' );
$c2 -> add ( AppThreadPeer :: DEL_INDEX , $iNewDelIndex );
BasePeer :: doUpdate ( $c1 , $c2 , $con );
/*
$appThread = new AppThread ();
$aData = array ();
$aData [ 'APP_UID' ] = $sAppUid ;
$aData [ 'APP_THREAD_INDEX' ] = $iAppThreadIndex ;
$aData [ 'DEL_INDEX' ] = $iNewDelIndex ;
$appThread -> update ( $aData );
*/
return $iNewDelIndex ;
}
catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function changes the status to CLOSED in appThread
*
* @ name closeAppThread
* @ param string $sAppUid ,
* @ param string $iAppThreadIndex ,
* @ return true
*/
function closeAppThread ( $sAppUid , $iAppThreadIndex ) {
try {
$appThread = new AppThread ();
$aData = array ();
$aData [ 'APP_UID' ] = $sAppUid ;
$aData [ 'APP_THREAD_INDEX' ] = $iAppThreadIndex ;
$aData [ 'APP_THREAD_STATUS' ] = 'CLOSED' ;
$appThread -> update ( $aData );
return true ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function updates a row in APP_DELEGATION
*
* @ name closeAllDelegations
* @ param string $sAppUid
* @ return void
*/
function closeAllThreads ( $sAppUid ) {
try {
//Execute('UPDATE APP_DELEGATION SET DEL_THREAD_STATUS="CLOSED" WHERE APP_UID="$sAppUid" AND DEL_THREAD_STATUS="OPEN"');
$c = new Criteria ();
$c -> add ( AppThreadPeer :: APP_UID , $sAppUid );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$rowObj = AppThreadPeer :: doSelect ( $c );
foreach ( $rowObj as $appThread ) {
$appThread -> setAppThreadStatus ( 'CLOSED' );
if ( $appThread -> Validate ()) {
$appThread -> Save ();
} else {
$msg = '' ;
foreach ( $this -> getValidationFailures () as $objValidationFailure )
$msg .= $objValidationFailure -> getMessage () . " <br/> " ;
throw ( new PropelException ( 'The row cannot be created!' , new PropelException ( $msg )));
}
}
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function creates a new row in appThread
*
* @ name newAppThread
* @ param string $sAppUid ,
* @ param string $iNewDelIndex
* @ param string $iAppParent
* @ return $iAppThreadIndex $iNewDelIndex , $iAppThreadIndex );
*/
function newAppThread ( $sAppUid , $iNewDelIndex , $iAppParent ) {
try {
$appThread = new AppThread ();
return $appThread -> createAppThread ( $sAppUid , $iNewDelIndex , $iAppParent );
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* With this function we can change status to CLOSED in APP_DELEGATION
*
* @ name closeAllDelegations
* @ param string $sAppUid
* @ return
*/
function closeAllDelegations ( $sAppUid ) {
try {
//Execute('UPDATE APP_DELEGATION SET DEL_THREAD_STATUS="CLOSED" WHERE APP_UID="$sAppUid" AND DEL_THREAD_STATUS="OPEN"');
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$rowObj = AppDelegationPeer :: doSelect ( $c );
foreach ( $rowObj as $appDel ) {
$appDel -> setDelThreadStatus ( 'CLOSED' );
if ( $appDel -> Validate ()) {
$appDel -> Save ();
} else {
$msg = '' ;
foreach ( $this -> getValidationFailures () as $objValidationFailure )
$msg .= $objValidationFailure -> getMessage () . " <br/> " ;
throw ( new PropelException ( 'The row cannot be created!' , new PropelException ( $msg )));
}
}
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* With this we can change the status to CLOSED in APP_DELEGATION
*
* @ name CloseCurrentDelegation
* @ param string $sAppUid
* @ param string $iDelIndex
* @ return Fields
*/
function CloseCurrentDelegation ( $sAppUid , $iDelIndex ) {
try {
//Execute('UPDATE APP_DELEGATION SET DEL_THREAD_STATUS="CLOSED" WHERE APP_UID="$sAppUid" AND DEL_THREAD_STATUS="OPEN"');
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iDelIndex );
$rowObj = AppDelegationPeer :: doSelect ( $c );
G :: LoadClass ( 'dates' );
$oDates = new dates ();
foreach ( $rowObj as $appDel ) {
$appDel -> setDelThreadStatus ( 'CLOSED' );
$appDel -> setDelFinishDate ( 'now' );
//$appDel->setDelDuration($oDates->calculateDuration($appDel->getDelInitDate(), $appDel->getDelFinishDate(), null, null, $appDel->getTasUid()));
if ( $appDel -> Validate ()) {
$appDel -> Save ();
} else {
$msg = '' ;
foreach ( $this -> getValidationFailures () as $objValidationFailure )
$msg .= $objValidationFailure -> getMessage () . " <br/> " ;
throw ( new PropelException ( 'The row cannot be created!' , new PropelException ( $msg )));
}
}
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function creates a new row in APP_DELEGATION whether it has status closed
*
* @ name ReactivateCurrentDelegation
* @ Description : This function reativate the case previously cancelled from to do
* @ param string $sAppUid
* @ param string $iDelIndex
* @ return Fields
*/
function ReactivateCurrentDelegation ( $sAppUid , $iDelegation ) {
try {
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iDelegation );
$rowObj = AppDelegationPeer :: doSelect ( $c );
foreach ( $rowObj as $appDel ) {
$appDel -> setDelThreadStatus ( 'OPEN' );
$appDel -> setDelFinishDate ( null );
if ( $appDel -> Validate ()) {
$appDel -> Save ();
} else {
$msg = '' ;
foreach ( $this -> getValidationFailures () as $objValidationFailure )
$msg .= $objValidationFailure -> getMessage () . " <br/> " ;
throw ( new PropelException ( 'The row cannot be created!' , new PropelException ( $msg )));
}
}
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* This function start a case using the task for the user $sUsrUid
* With this function we can Start a case
*
* @ name startCase
* @ param string $sTasUid
* @ param string $sUsrUid
* @ return Fields
*/
function startCase ( $sTasUid , $sUsrUid , $isSubprocess = false ) {
if ( $sTasUid != '' ) {
try {
$this -> Task = new Task ;
$Fields = $this -> Task -> Load ( $sTasUid );
//To allow Self Service as the first task
if (( $Fields [ 'TAS_ASSIGN_TYPE' ] != 'SELF_SERVICE' ) && ( $sUsrUid == '' )) {
throw ( new Exception ( 'You tried to start a new case without send the USER UID!' ));
}
//Process
$sProUid = $this -> Task -> getProUid ();
$this -> Process = new Process ;
$proFields = $this -> Process -> Load ( $sProUid );
//application
$Application = new Application ;
$sAppUid = $Application -> create ( $sProUid , $sUsrUid );
//appDelegation
$AppDelegation = new AppDelegation ;
$iAppThreadIndex = 1 ; // Start Thread
$iAppDelPrio = 3 ; // Priority
$iDelIndex = $AppDelegation -> createAppDelegation ( $sProUid , $sAppUid , $sTasUid , $sUsrUid , $iAppThreadIndex , $iAppDelPrio , $isSubprocess );
//appThread
$AppThread = new AppThread ;
$iAppThreadIndex = $AppThread -> createAppThread ( $sAppUid , $iDelIndex , 0 );
//DONE: Al ya existir un delegation, se puede "calcular" el caseTitle.
$Fields = $Application -> toArray ( BasePeer :: TYPE_FIELDNAME );
$aApplicationFields = $Fields [ 'APP_DATA' ];
$newValues = $this -> newRefreshCaseTitleAndDescription ( $sAppUid , $Fields , $aApplicationFields );
if ( ! isset ( $newValues [ 'APP_TITLE' ]) ) $newValues [ 'APP_TITLE' ] = '' ;
$caseNumber = $Fields [ 'APP_NUMBER' ];
$Application -> update ( $Fields );
//Update the task last assigned (for web entry and web services)
G :: LoadClass ( 'derivation' );
$oDerivation = new Derivation ();
$oDerivation -> setTasLastAssigned ( $sTasUid , $sUsrUid );
} catch ( exception $e ) {
throw ( $e );
}
} else {
throw ( new Exception ( 'You tried to start a new case without send the USER UID or TASK UID!' ));
}
//call plugin
if ( class_exists ( 'folderData' )) {
$folderData = new folderData ( $sProUid , $proFields [ 'PRO_TITLE' ], $sAppUid , $newValues [ 'APP_TITLE' ], $sUsrUid );
$oPluginRegistry = & PMPluginRegistry :: getSingleton ();
$oPluginRegistry -> executeTriggers ( PM_CREATE_CASE , $folderData );
}
//end plugin
return array ( 'APPLICATION' => $sAppUid , 'INDEX' => $iDelIndex , 'PROCESS' => $sProUid , 'CASE_NUMBER' => $caseNumber );
}
/*
* Get the next step
*
* @ name getNextStep
* @ param string $sProUid
* @ param string $sAppUid
* @ param integer $iDelIndex
* @ param integer $iPosition
* @ return array
*/
function getNextStep ( $sProUid = '' , $sAppUid = '' , $iDelIndex = 0 , $iPosition = 0 ) {
G :: LoadClass ( 'pmScript' );
$oPMScript = new PMScript ();
$oApplication = new Application ();
//$aFields = $oApplication->load($sAppUid);
$oApplication = ApplicationPeer :: retrieveByPk ( $sAppUid );
$aFields = $oApplication -> toArray ( BasePeer :: TYPE_FIELDNAME );
if ( ! is_array ( $aFields [ 'APP_DATA' ])) {
$aFields [ 'APP_DATA' ] = G :: array_merges ( G :: getSystemConstants (), unserialize ( $aFields [ 'APP_DATA' ]));
}
$oPMScript -> setFields ( $aFields [ 'APP_DATA' ]);
try {
//get the current Delegation, and TaskUID
$c = new Criteria ( 'workflow' );
$c -> add ( AppDelegationPeer :: PRO_UID , $sProUid );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iDelIndex );
$aRow = AppDelegationPeer :: doSelect ( $c );
if ( ! isset ( $aRow [ 0 ]))
return false ;
$sTaskUid = $aRow [ 0 ] -> getTasUid ();
//get max step for this task
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'MAX(' . StepPeer :: STEP_POSITION . ')' );
$c -> add ( StepPeer :: PRO_UID , $sProUid );
$c -> add ( StepPeer :: TAS_UID , $sTaskUid );
$rs = StepPeer :: doSelectRS ( $c );
$rs -> next ();
$row = $rs -> getRow ();
$iLastStep = intval ( $row [ 0 ]);
$iPosition += 1 ;
$aNextStep = null ;
if ( $iPosition <= $iLastStep ) {
//to do: $oApplication = new Application($this->_dbc);
//to do: $oApplication->load($sApplicationUID);
//to do: G::LoadClass('pmScript');
//to do: $oPMScript = new PMScript();
//to do: $oPMScript->setFields($oApplication->Fields['APP_DATA']);
while ( $iPosition <= $iLastStep ) {
$bAccessStep = false ;
//step
$oStep = new Step ;
$oStep = $oStep -> loadByProcessTaskPosition ( $sProUid , $sTaskUid , $iPosition );
if ( $oStep ) {
2011-01-04 20:37:31 +00:00
if ( trim ( $oStep -> getStepCondition ()) !== '' ) {
2010-12-02 23:34:41 +00:00
$oPMScript -> setScript ( $oStep -> getStepCondition ());
$bAccessStep = $oPMScript -> evaluate ();
} else {
$bAccessStep = true ;
}
if ( $bAccessStep ) {
switch ( $oStep -> getStepTypeObj ()) {
case 'DYNAFORM' :
$sAction = 'EDIT' ;
break ;
case 'OUTPUT_DOCUMENT' :
$sAction = 'GENERATE' ;
break ;
case 'INPUT_DOCUMENT' :
$sAction = 'ATTACH' ;
break ;
case 'EXTERNAL' :
$sAction = 'EDIT' ;
break ;
case 'MESSAGE' :
$sAction = '' ;
break ;
}
$aNextStep = array ( 'TYPE' => $oStep -> getStepTypeObj (), 'UID' => $oStep -> getStepUidObj (), 'POSITION' => $oStep -> getStepPosition (), 'PAGE' => 'cases_Step?TYPE=' . $oStep -> getStepTypeObj () . '&UID=' . $oStep ->
getStepUidObj () . '&POSITION=' . $oStep -> getStepPosition () . '&ACTION=' . $sAction );
$iPosition = $iLastStep ;
}
}
$iPosition += 1 ;
}
}
if ( ! $aNextStep ) {
$aNextStep = array ( 'TYPE' => 'DERIVATION' , 'UID' => - 1 , 'POSITION' => ( $iLastStep + 1 ), 'PAGE' => 'cases_Step?TYPE=ASSIGN_TASK&UID=-1&POSITION=10000&ACTION=ASSIGN' );
}
return $aNextStep ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* Get the previous step
*
* @ name getPreviousStep
* @ param string $sProUid
* @ param string $sAppUid
* @ param integer $iDelIndex
* @ param integer $iPosition
* @ return array
*/
function getPreviousStep ( $sProUid = '' , $sAppUid = '' , $iDelIndex = 0 , $iPosition = 0 ) {
//Note: Depreciated, delete in the future
G :: LoadClass ( 'pmScript' );
$oPMScript = new PMScript ();
$oApplication = new Application ();
//$aFields = $oApplication->load($sAppUid);
$oApplication = ApplicationPeer :: retrieveByPk ( $sAppUid );
$aFields = $oApplication -> toArray ( BasePeer :: TYPE_FIELDNAME );
if ( ! is_array ( $aFields [ 'APP_DATA' ])) {
$aFields [ 'APP_DATA' ] = G :: array_merges ( G :: getSystemConstants (), unserialize ( $aFields [ 'APP_DATA' ]));
}
$oPMScript -> setFields ( $aFields [ 'APP_DATA' ]);
try {
//get the current Delegation, and TaskUID
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: PRO_UID , $sProUid );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iDelIndex );
$aRow = AppDelegationPeer :: doSelect ( $c );
$sTaskUid = $aRow [ 0 ] -> getTasUid ();
$iFirstStep = 1 ;
if ( $iPosition == 10000 ) {
//get max step for this task
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( 'MAX(' . StepPeer :: STEP_POSITION . ')' );
$c -> add ( StepPeer :: PRO_UID , $sProUid );
$c -> add ( StepPeer :: TAS_UID , $sTaskUid );
$rs = StepPeer :: doSelectRS ( $c );
$rs -> next ();
$row = $rs -> getRow ();
$iPosition = intval ( $row [ 0 ]);
} else {
$iPosition -= 1 ;
}
$aPreviousStep = null ;
if ( $iPosition >= 1 ) {
//to do: G::LoadClass('application');
//to do: $oApplication = new Application($this->_dbc);
//to do: $oApplication->load($sApplicationUID);
//to do: G::LoadClass('pmScript');
//to do: $oPMScript = new PMScript();
//to do: $oPMScript->setFields($oApplication->Fields['APP_DATA']);
while ( $iPosition >= $iFirstStep ) {
$bAccessStep = false ;
//step
$oStep = new Step ;
$oStep = $oStep -> loadByProcessTaskPosition ( $sProUid , $sTaskUid , $iPosition );
if ( $oStep ) {
2011-01-04 20:37:31 +00:00
if ( trim ( $oStep -> getStepCondition ()) !== '' ) {
2010-12-02 23:34:41 +00:00
$oPMScript -> setScript ( $oStep -> getStepCondition ());
$bAccessStep = $oPMScript -> evaluate ();
} else {
$bAccessStep = true ;
}
if ( $bAccessStep ) {
switch ( $oStep -> getStepTypeObj ()) {
case 'DYNAFORM' :
$sAction = 'EDIT' ;
break ;
case 'OUTPUT_DOCUMENT' :
$sAction = 'GENERATE' ;
break ;
case 'INPUT_DOCUMENT' :
$sAction = 'ATTACH' ;
break ;
case 'EXTERNAL' :
$sAction = 'EDIT' ;
break ;
case 'MESSAGE' :
$sAction = '' ;
break ;
}
$aPreviousStep = array ( 'TYPE' => $oStep -> getStepTypeObj (),
'UID' => $oStep -> getStepUidObj (),
'POSITION' => $oStep -> getStepPosition (),
'PAGE' => 'cases_Step?TYPE=' . $oStep -> getStepTypeObj () . '&UID=' . $oStep -> getStepUidObj () . '&POSITION=' . $oStep -> getStepPosition () . '&ACTION=' . $sAction
);
$iPosition = $iFirstStep ;
}
}
$iPosition -= 1 ;
}
}
if ( ! $aPreviousStep ) {
$aPreviousStep = false ;
}
return $aPreviousStep ;
} catch ( exception $e ) {
throw ( $e );
}
}
/*
* Get the next supervisor step
*
* @ name getNextSupervisorStep
* @ param string $sProcessUID
* @ param string $iPosition
* @ param integer $sType
* @ return $aNextStep
*/
function getNextSupervisorStep ( $sProcessUID , $iPosition , $sType = 'DYNAFORM' ) {
$iPosition += 1 ;
$oCriteria = new Criteria ();
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $sProcessUID );
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , $sType );
$oCriteria -> add ( StepSupervisorPeer :: STEP_POSITION , $iPosition );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
if ( ! $aRow ) {
$oCriteria = new Criteria ();
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $sProcessUID );
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , $sType );
$oCriteria -> add ( StepSupervisorPeer :: STEP_POSITION , 1 );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
}
$aNextStep = array ( 'UID' => $aRow [ 'STEP_UID_OBJ' ], 'POSITION' => $aRow [ 'STEP_POSITION' ]);
return $aNextStep ;
}
/*
* Get the previous supervisor step
*
* @ name getPreviousSupervisorStep
* @ param string $sProcessUID
* @ param string $iPosition
* @ param integer $sType
* @ return $aNextStep
*/
function getPreviousSupervisorStep ( $sProcessUID , $iPosition , $sType = 'DYNAFORM' ) {
$iPosition -= 1 ;
if ( $iPosition > 0 ) {
$oCriteria = new Criteria ();
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $sProcessUID );
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , $sType );
$oCriteria -> add ( StepSupervisorPeer :: STEP_POSITION , $iPosition );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
if ( ! $aRow ) {
$oCriteria = new Criteria ();
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $sProcessUID );
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , $sType );
$oCriteria -> add ( StepSupervisorPeer :: STEP_POSITION , 1 );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
}
$aNextStep = array ( 'UID' => $aRow [ 'STEP_UID_OBJ' ], 'POSITION' => $aRow [ 'STEP_POSITION' ]);
return $aNextStep ;
} else {
return false ;
}
}
/*
* Get the transfer History
*
* @ name getTransferHistoryCriteria
* @ param string $sAppUid
* @ return array
*/
function getTransferHistoryCriteria ( $sAppUid ) {
$c = new Criteria ( 'workflow' );
$c -> addAsColumn ( 'TAS_TITLE' , 'TAS_TITLE.CON_VALUE' );
$c -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$c -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_DELEGATE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: PRO_UID );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: APP_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
2011-01-04 20:37:31 +00:00
///-- $c->addAsColumn('USR_NAME', "CONCAT(USR_LASTNAME, ' ', USR_FIRSTNAME)");
$sDataBase = 'database_' . strtolower ( DB_ADAPTER );
if ( G :: LoadSystemExist ( $sDataBase )){
G :: LoadSystem ( $sDataBase );
$oDataBase = new database ();
$c -> addAsColumn ( 'USR_NAME' , $oDataBase -> concatString ( " USR_LASTNAME " , " ' ' " , " USR_FIRSTNAME " ));
$c -> addAsColumn ( 'DEL_FINISH_DATE' , $oDataBase -> getCaseWhen ( " DEL_FINISH_DATE IS NULL " , " '-' " , AppDelegationPeer :: DEL_FINISH_DATE ) );
$c -> addAsColumn ( 'APP_TYPE' , $oDataBase -> getCaseWhen ( " DEL_FINISH_DATE IS NULL " , " 'IN_PROGRESS' " , AppDelayPeer :: APP_TYPE ) );
}
2010-12-02 23:34:41 +00:00
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
//$c->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE);
2011-01-04 20:37:31 +00:00
///-- $c->addAsColumn('DEL_FINISH_DATE', "IF (DEL_FINISH_DATE IS NULL, '-', " . AppDelegationPeer::DEL_FINISH_DATE . ") ");
2010-12-02 23:34:41 +00:00
//$c->addSelectColumn(AppDelayPeer::APP_TYPE);
2011-01-04 20:37:31 +00:00
///-- $c->addAsColumn('APP_TYPE', "IF (DEL_FINISH_DATE IS NULL, 'IN_PROGRESS', " . AppDelayPeer::APP_TYPE . ") ");
2010-12-02 23:34:41 +00:00
$c -> addSelectColumn ( AppDelayPeer :: APP_ENABLE_ACTION_DATE );
$c -> addSelectColumn ( AppDelayPeer :: APP_DISABLE_ACTION_DATE );
//APP_DELEGATION LEFT JOIN USERS
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
//APP_DELAY FOR MORE DESCRIPTION
//$c->addJoin(AppDelegationPeer::DEL_INDEX, AppDelayPeer::APP_DEL_INDEX, Criteria::LEFT_JOIN);
//$c->addJoin(AppDelegationPeer::APP_UID, AppDelayPeer::APP_UID, Criteria::LEFT_JOIN);
$del = DBAdapter :: getStringDelimiter ();
$app = array ();
$app [] = array ( AppDelegationPeer :: DEL_INDEX , AppDelayPeer :: APP_DEL_INDEX );
$app [] = array ( AppDelegationPeer :: APP_UID , AppDelayPeer :: APP_UID );
$c -> addJoinMC ( $app , Criteria :: LEFT_JOIN );
//LEFT JOIN CONTENT TAS_TITLE
$c -> addAlias ( " TAS_TITLE " , 'CONTENT' );
$del = DBAdapter :: getStringDelimiter ();
$appTitleConds = array ();
$appTitleConds [] = array ( AppDelegationPeer :: TAS_UID , 'TAS_TITLE.CON_ID' );
$appTitleConds [] = array ( 'TAS_TITLE.CON_CATEGORY' , $del . 'TAS_TITLE' . $del );
$appTitleConds [] = array ( 'TAS_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $appTitleConds , Criteria :: LEFT_JOIN );
//WHERE
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
//ORDER BY
$c -> clearOrderByColumns ();
$c -> addAscendingOrderByColumn ( AppDelegationPeer :: DEL_DELEGATE_DATE );
return $c ;
}
/*
* Get the Criteria for To Do Cases List
* @ param string $sUIDUserLogged
* @ return array ( 'where' => Criteria , 'group' => Criteria )
* description : Listado de casos que se encuentran en estado TO_DO que pertenezcan al usuario actual
*
* Query :
* SELECT APPLICATION . APP_UID ,
* APPLICATION . APP_NUMBER ,
* APPLICATION . APP_UPDATE_DATE ,
* APP_DELEGATION . DEL_PRIORITY ,
* APP_DELEGATION . DEL_INDEX ,
* APP_DELEGATION . TAS_UID ,
* APP_DELEGATION . DEL_INIT_DATE ,
* APP_DELEGATION . DEL_FINISH_DATE ,
* USERS . USR_UID ,
* APPLICATION . APP_STATUS ,
* IF ( APP_DELEGATION . DEL_TASK_DUE_DATE <= NOW (), CONCAT ( '' , APP_DELEGATION . DEL_TASK_DUE_DATE , '' ),
* APP_DELEGATION . DEL_TASK_DUE_DATE ) AS DEL_TASK_DUE_DATE ,
* CONCAT ( USERS . USR_LASTNAME , ' ' , USERS . USR_FIRSTNAME ) AS APP_CURRENT_USER ,
* APP_TITLE . CON_VALUE AS APP_TITLE ,
* PRO_TITLE . CON_VALUE AS APP_PRO_TITLE ,
* TAS_TITLE . CON_VALUE AS APP_TAS_TITLE ,
* CONCAT ( APP_LAST_USER . USR_LASTNAME , ' ' , APP_LAST_USER . USR_FIRSTNAME ) AS APP_DEL_PREVIOUS_USER
* FROM
* APPLICATION LEFT JOIN APP_DELEGATION ON ( APPLICATION . APP_UID = APP_DELEGATION . APP_UID ) LEFT JOIN TASK ON ( APP_DELEGATION . TAS_UID = TASK . TAS_UID ) LEFT JOIN USERS ON ( APP_DELEGATION . USR_UID = USERS . USR_UID ) LEFT JOIN APP_THREAD ON ( APPLICATION . APP_UID = APP_THREAD . APP_UID AND APP_DELEGATION . DEL_INDEX = APP_THREAD . DEL_INDEX ) LEFT JOIN CONTENT APP_TITLE ON ( APPLICATION . APP_UID = APP_TITLE . CON_ID AND APP_TITLE . CON_CATEGORY = 'APP_TITLE' AND APP_TITLE . CON_LANG = 'en' )
* LEFT JOIN CONTENT PRO_TITLE ON ( APPLICATION . PRO_UID = PRO_TITLE . CON_ID AND PRO_TITLE . CON_CATEGORY = 'PRO_TITLE' AND PRO_TITLE . CON_LANG = 'en' )
* LEFT JOIN CONTENT TAS_TITLE ON ( APP_DELEGATION . TAS_UID = TAS_TITLE . CON_ID AND TAS_TITLE . CON_CATEGORY = 'TAS_TITLE' AND TAS_TITLE . CON_LANG = 'en' )
* LEFT JOIN APP_DELEGATION APP_PREV_DEL ON ( APPLICATION . APP_UID = APP_PREV_DEL . APP_UID AND APP_PREV_DEL . DEL_INDEX = APP_DELEGATION . DEL_PREVIOUS )
* LEFT JOIN USERS APP_LAST_USER ON ( APP_PREV_DEL . USR_UID = APP_LAST_USER . USR_UID )
* WHERE
* TASK . TAS_TYPE <> 'SUBPROCESS'
* AND USERS . USR_UID = '69726522248da554d01a9d1053079479'
* AND APPLICATION . APP_STATUS = 'TO_DO'
* AND APP_DELEGATION . DEL_FINISH_DATE IS NULL
* AND APP_THREAD . APP_THREAD_STATUS = 'OPEN'
* AND APP_DELEGATION . DEL_THREAD_STATUS = 'OPEN'
* AND ( APPLICATION . APP_NUMBER LIKE " %% " OR APP_TITLE . CON_VALUE LIKE " %% " OR TAS_TITLE . CON_VALUE LIKE " %% " OR PRO_TITLE . CON_VALUE LIKE " %% " )
* ORDER BY APPLICATION . APP_NUMBER DESC
*
* @ return array
*/
function prepareCriteriaForToDo ( $sUIDUserLogged ) {
// NEW QUERY
$c = new Criteria ( 'workflow' );
//$gf->clearSelectColumns();DEL_INIT_DATE
$c -> addSelectColumn ( AppCacheViewPeer :: APP_UID );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_NUMBER );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_STATUS );
$c -> addSelectColumn ( AppCacheViewPeer :: USR_UID );
$c -> addSelectColumn ( AppCacheViewPeer :: PREVIOUS_USR_UID );
$c -> addSelectColumn ( AppCacheViewPeer :: TAS_UID );
$c -> addSelectColumn ( AppCacheViewPeer :: PRO_UID );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_DELEGATE_DATE );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_INIT_DATE );
//$c->addSelectColumn(AppCacheViewPeer::DEL_TASK_DUE_DATE );
$c -> addAsColumn ( 'DEL_TASK_DUE_DATE' , " IF ( " . AppCacheViewPeer :: DEL_TASK_DUE_DATE . " <= NOW(), CONCAT('<span style= \ 'color:red \ ';>', " . AppCacheViewPeer :: DEL_TASK_DUE_DATE . " , '</span>'), " . AppCacheViewPeer :: DEL_TASK_DUE_DATE . " ) " );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_THREAD_STATUS );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_THREAD_STATUS );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_TITLE );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_PRO_TITLE );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_TAS_TITLE );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_CURRENT_USER );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_DEL_PREVIOUS_USER );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_PRIORITY );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_DURATION );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_QUEUE_DURATION );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_DELAY_DURATION );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_STARTED );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_FINISHED );
$c -> addSelectColumn ( AppCacheViewPeer :: DEL_DELAYED );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_CREATE_DATE );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_FINISH_DATE );
$c -> addSelectColumn ( AppCacheViewPeer :: APP_UPDATE_DATE );
$c -> add ( AppCacheViewPeer :: USR_UID , $sUIDUserLogged );
$c -> add ( AppCacheViewPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppCacheViewPeer :: APP_STATUS , 'TO_DO' );
$c -> add ( AppCacheViewPeer :: APP_THREAD_STATUS , 'OPEN' );
//call cleanup session vars
return $c ;
//return array ( 'where' => $cf, 'whereFilter' => $cf, 'group' => $g , 'groupFilter' => $gf );
}
//DEPRECATED
/**
* Get the condition for Cases List
*
* @ name getConditionCasesList
* @ param string $sTypeList
* @ param string $sUIDUserLogged
* @ param string $ClearSession
* @ param string $aAdditionalFilter
* @ return array
*/
function getConditionCasesList ( $sTypeList = 'all' , $sUIDUserLogged = '' , $ClearSession = true , $aAdditionalFilter = null ) {
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_UID );
$c -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$c -> addSelectColumn ( ApplicationPeer :: APP_UPDATE_DATE );
$c -> addSelectColumn ( ApplicationPeer :: PRO_UID );
$c -> addSelectColumn ( ApplicationPeer :: APP_INIT_USER );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
//$c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
$c -> addAsColumn ( 'DEL_TASK_DUE_DATE' , " IF ( " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " <= NOW(), CONCAT('<span style= \ 'color:red \ ';>', " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " , '</span>'), " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " ) " );
global $RBAC ;
//seems the PM_SUPERVISOR can delete a completed case
if ( $sTypeList == " completed " && $RBAC -> userCanAccess ( 'PM_SUPERVISOR' ) == 1 ) {
$c -> addAsColumn ( " DEL_LINK " , " CONCAT(' " . G :: LoadTranslation ( 'ID_DELETE' ) . " ') " );
}
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addAsColumn ( 'APP_CURRENT_USER' , " CONCAT(USERS.USR_LASTNAME, ' ', USERS.USR_FIRSTNAME) " );
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
$c -> addAsColumn ( 'APP_TITLE' , 'APP_TITLE.CON_VALUE' );
$c -> addAsColumn ( 'APP_PRO_TITLE' , 'PRO_TITLE.CON_VALUE' );
$c -> addAsColumn ( 'APP_TAS_TITLE' , 'TAS_TITLE.CON_VALUE' );
//$c->addAsColumn('APP_DEL_PREVIOUS_USER', 'APP_LAST_USER.USR_USERNAME');
$c -> addAsColumn ( 'APP_DEL_PREVIOUS_USER' , " CONCAT(APP_LAST_USER.USR_LASTNAME, ' ', APP_LAST_USER.USR_FIRSTNAME) " );
$c -> addAlias ( " APP_TITLE " , 'CONTENT' );
$c -> addAlias ( " PRO_TITLE " , 'CONTENT' );
$c -> addAlias ( " TAS_TITLE " , 'CONTENT' );
$c -> addAlias ( " APP_PREV_DEL " , 'APP_DELEGATION' );
$c -> addAlias ( " APP_LAST_USER " , 'USERS' );
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$appThreadConds [] = array ( ApplicationPeer :: APP_UID , AppThreadPeer :: APP_UID );
$appThreadConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppThreadPeer :: DEL_INDEX );
$c -> addJoinMC ( $appThreadConds , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$del = DBAdapter :: getStringDelimiter ();
$appTitleConds = array ();
$appTitleConds [] = array ( ApplicationPeer :: APP_UID , 'APP_TITLE.CON_ID' );
$appTitleConds [] = array ( 'APP_TITLE.CON_CATEGORY' , $del . 'APP_TITLE' . $del );
$appTitleConds [] = array ( 'APP_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $appTitleConds , Criteria :: LEFT_JOIN );
$proTitleConds = array ();
$proTitleConds [] = array ( ApplicationPeer :: PRO_UID , 'PRO_TITLE.CON_ID' );
$proTitleConds [] = array ( 'PRO_TITLE.CON_CATEGORY' , $del . 'PRO_TITLE' . $del );
$proTitleConds [] = array ( 'PRO_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $proTitleConds , Criteria :: LEFT_JOIN );
$tasTitleConds = array ();
$tasTitleConds [] = array ( AppDelegationPeer :: TAS_UID , 'TAS_TITLE.CON_ID' );
$tasTitleConds [] = array ( 'TAS_TITLE.CON_CATEGORY' , $del . 'TAS_TITLE' . $del );
$tasTitleConds [] = array ( 'TAS_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $tasTitleConds , Criteria :: LEFT_JOIN );
$prevConds = array ();
$prevConds [] = array ( ApplicationPeer :: APP_UID , 'APP_PREV_DEL.APP_UID' );
$prevConds [] = array ( 'APP_PREV_DEL.DEL_INDEX' , AppDelegationPeer :: DEL_PREVIOUS );
$c -> addJoinMC ( $prevConds , Criteria :: LEFT_JOIN );
$usrConds = array ();
$usrConds [] = array ( 'APP_PREV_DEL.USR_UID' , 'APP_LAST_USER.USR_UID' );
$c -> addJoinMC ( $usrConds , Criteria :: LEFT_JOIN );
$c -> add ( TaskPeer :: TAS_TYPE , 'SUBPROCESS' , Criteria :: NOT_EQUAL );
//gral, to_revise, to_reassign dont have userid in the query
if ( $sTypeList != 'gral' && $sTypeList != 'to_revise' && $sTypeList != 'to_reassign' && $sTypeList != 'my_started' && $sTypeList != 'sent' ) {
$c -> add ( UsersPeer :: USR_UID , $sUIDUserLogged );
}
/**
* Additional filters
* By Erik < erik @ colosa . com >
*/
if ( isset ( $aAdditionalFilter ) && is_array ( $aAdditionalFilter )) {
foreach ( $aAdditionalFilter as $sFilter => $sValue ) {
switch ( $sFilter ) {
case 'PRO_UID' :
if ( $sValue != " 0 " ) {
$c -> add ( ApplicationPeer :: PRO_UID , $sValue , Criteria :: EQUAL );
}
break ;
case 'READ' :
$c -> add ( AppDelegationPeer :: DEL_INIT_DATE , null , Criteria :: ISNOTNULL );
break ;
case 'UNREAD' :
$c -> add ( AppDelegationPeer :: DEL_INIT_DATE , null , Criteria :: ISNULL );
break ;
}
}
}
$filesList = array (
//7 standard list
'to_do' => 'cases/cases_ListTodo' ,
'draft' => 'cases/cases_ListDraft' ,
'paused' => 'cases/cases_ListOnHold' ,
'cancelled' => 'cases/cases_ListCancelled' ,
'completed' => 'cases/cases_ListCompleted' ,
'sent' => 'cases/cases_ListSent' ,
'selfservice' => 'cases/cases_ListSelfService' ,
//5 admin list
'all' => 'cases/cases_ListAll' ,
'to_revise' => 'cases/cases_ListToRevise' ,
'to_reassign' => 'cases/cases_ListAll_Reassign' ,
'my_started' => 'cases/cases_ListStarted' ,
'Alldelete' => 'cases/cases_ListAllDelete'
);
switch ( $sTypeList ) {
case 'all' :
$c -> add (
$c -> getNewCriterion (
AppThreadPeer :: APP_THREAD_STATUS , 'OPEN'
) -> addOr (
$c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'COMPLETED'
) -> addAnd (
$c -> getNewCriterion (
AppDelegationPeer :: DEL_PREVIOUS , 0
)
)
)
);
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'my_started' :
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( AppDelayPeer :: APP_UID );
$oCriteria -> add (
$oCriteria -> getNewCriterion (
AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL
) -> addOr (
$oCriteria -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 )
)
);
//$oCriteria->add(AppDelayPeer::APP_DISABLE_ACTION_USER, null, Criteria::ISNULL);
$oDataset = AppDelayPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aProcesses = array ();
while ( $aRow = $oDataset -> getRow ()) {
$aProcesses [] = $aRow [ 'APP_UID' ];
$oDataset -> next ();
}
$c -> add ( $c -> getNewCriterion ( ApplicationPeer :: APP_INIT_USER , $sUIDUserLogged ));
$c -> add (
$c -> getNewCriterion (
AppThreadPeer :: APP_THREAD_STATUS , 'OPEN'
) -> addOr (
$c -> getNewCriterion (
ApplicationPeer :: APP_STATUS , 'COMPLETED'
) -> addAnd (
$c -> getNewCriterion ( AppDelegationPeer :: DEL_PREVIOUS , 0 )
)
)
);
$c -> add ( $c -> getNewCriterion ( ApplicationPeer :: APP_UID , $aProcesses , Criteria :: NOT_IN ));
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'to_do' :
$c -> add ( ApplicationPeer :: APP_STATUS , 'TO_DO' );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'draft' :
$c -> add ( ApplicationPeer :: APP_STATUS , 'DRAFT' );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'paused' :
$appDelayConds [] = array ( ApplicationPeer :: APP_UID , AppDelayPeer :: APP_UID );
$appDelayConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppDelayPeer :: APP_DEL_INDEX );
$c -> addJoinMC ( $appDelayConds , Criteria :: LEFT_JOIN );
$c -> add ( AppDelayPeer :: APP_DELAY_UID , null , Criteria :: ISNOTNULL );
$c -> add ( AppDelayPeer :: APP_TYPE , array ( " REASSIGN " , " ADHOC " , " CANCEL " ), Criteria :: NOT_IN );
$c -> add ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL ) -> addOr ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 )));
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'cancelled' :
$c -> add ( $c -> getNewCriterion ( AppThreadPeer :: APP_THREAD_STATUS , 'CLOSED' ) -> addAnd ( $c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'CANCELLED' )));
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'completed' :
$c -> add ( ApplicationPeer :: APP_STATUS , 'COMPLETED' );
$c -> add ( AppDelegationPeer :: DEL_PREVIOUS , '0' , Criteria :: NOT_EQUAL );
//$c->addAsColumn('DEL_FINISH_DATE', 'max('.AppDelegationPeer::DEL_FINISH_DATE.')');
$c -> addGroupByColumn ( ApplicationPeer :: APP_UID );
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'gral' :
$c -> add ( $c -> getNewCriterion ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' ) -> addOr ( $c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'COMPLETED' ) -> addAnd ( $c -> getNewCriterion ( AppDelegationPeer :: DEL_PREVIOUS , 0 ))));
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
$params = array ();
2012-02-10 09:53:31 -04:00
$sSql = BasePeer :: createSelectSql ( $c , $params );
2010-12-02 23:34:41 +00:00
break ;
case 'to_revise' :
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ProcessUserPeer :: USR_UID , $sUIDUserLogged );
$oCriteria -> add ( ProcessUserPeer :: PU_TYPE , 'SUPERVISOR' );
$oDataset = ProcessUserPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aProcesses = array ();
while ( $aRow = $oDataset -> getRow ()) {
$aProcesses [] = $aRow [ 'PRO_UID' ];
$oDataset -> next ();
}
$c -> add ( ApplicationPeer :: PRO_UID , $aProcesses , Criteria :: IN );
$c -> add ( ApplicationPeer :: APP_STATUS , 'TO_DO' );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
case 'selfservice' :
//get the valid selfservice tasks for this user
$oCase = new Cases ();
$tasks = $oCase -> getSelfServiceTasks ( $_SESSION [ 'USER_LOGGED' ]);
$aTasks = array ();
foreach ( $tasks as $key => $val ) {
if ( strlen ( trim ( $val [ 'uid' ])) > 10 )
$aTasks [] = $val [ 'uid' ];
}
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_UID );
$c -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$c -> addSelectColumn ( ApplicationPeer :: APP_UPDATE_DATE );
$c -> addSelectColumn ( ApplicationPeer :: PRO_UID );
$c -> addSelectColumn ( ApplicationPeer :: APP_INIT_USER );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
$c -> addAsColumn ( 'DEL_TASK_DUE_DATE' , " IF ( " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " <= NOW(), CONCAT('<span style= \ 'color:red \ ';>', " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " , '</span>'), " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " ) " );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addAsColumn ( 'APP_CURRENT_USER' , " CONCAT(USERS.USR_LASTNAME, ' ', USERS.USR_FIRSTNAME) " );
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
$c -> addAsColumn ( 'APP_TITLE' , 'APP_TITLE.CON_VALUE' );
$c -> addAsColumn ( 'APP_PRO_TITLE' , 'PRO_TITLE.CON_VALUE' );
$c -> addAsColumn ( 'APP_TAS_TITLE' , 'TAS_TITLE.CON_VALUE' );
$c -> addAlias ( " APP_TITLE " , 'CONTENT' );
$c -> addAlias ( " PRO_TITLE " , 'CONTENT' );
$c -> addAlias ( " TAS_TITLE " , 'CONTENT' );
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$appThreadConds [] = array ( ApplicationPeer :: APP_UID , AppThreadPeer :: APP_UID );
$appThreadConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppThreadPeer :: DEL_INDEX );
$c -> addJoinMC ( $appThreadConds , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$del = DBAdapter :: getStringDelimiter ();
$appTitleConds = array ();
$appTitleConds [] = array ( ApplicationPeer :: APP_UID , 'APP_TITLE.CON_ID' );
$appTitleConds [] = array ( 'APP_TITLE.CON_CATEGORY' , $del . 'APP_TITLE' . $del );
$appTitleConds [] = array ( 'APP_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $appTitleConds , Criteria :: LEFT_JOIN );
//
$proTitleConds = array ();
$proTitleConds [] = array ( ApplicationPeer :: PRO_UID , 'PRO_TITLE.CON_ID' );
$proTitleConds [] = array ( 'PRO_TITLE.CON_CATEGORY' , $del . 'PRO_TITLE' . $del );
$proTitleConds [] = array ( 'PRO_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $proTitleConds , Criteria :: LEFT_JOIN );
//
$tasTitleConds = array ();
$tasTitleConds [] = array ( AppDelegationPeer :: TAS_UID , 'TAS_TITLE.CON_ID' );
$tasTitleConds [] = array ( 'TAS_TITLE.CON_CATEGORY' , $del . 'TAS_TITLE' . $del );
$tasTitleConds [] = array ( 'TAS_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $tasTitleConds , Criteria :: LEFT_JOIN );
$c -> add ( AppDelegationPeer :: USR_UID , '' );
$c -> add ( AppDelegationPeer :: TAS_UID , $aTasks , Criteria :: IN );
break ;
case 'to_reassign' :
$c -> add ( $c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'TO_DO' ) -> addOr ( $c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'DRAFT' )));
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
// $params = array();
// $sqlString = BasePeer::createSelectSql($c, $params);
// var_dump ($sqlString);
break ;
case 'sent' :
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( AppDelayPeer :: APP_UID );
$oCriteria -> add (
$oCriteria -> getNewCriterion (
AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL
) -> addOr (
$oCriteria -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 )
)
);
//$oCriteria->add(AppDelayPeer::APP_DISABLE_ACTION_USER, null, Criteria::ISNULL);
$oDataset = AppDelayPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aProcesses = array ();
while ( $aRow = $oDataset -> getRow ()) {
$aProcesses [] = $aRow [ 'APP_UID' ];
$oDataset -> next ();
}
if ( isset ( $aAdditionalFilter ) && isset ( $aAdditionalFilter [ 'MINE' ])) {
$c -> add ( $c -> getNewCriterion ( ApplicationPeer :: APP_INIT_USER , $sUIDUserLogged ));
} else {
$c -> add (
$c -> getNewCriterion (
ApplicationPeer :: APP_INIT_USER , $sUIDUserLogged
) -> addOr (
$c -> getNewCriterion (
AppDelegationPeer :: USR_UID , $sUIDUserLogged
)
)
);
}
//$c->add($c->getNewCriterion(ApplicationPeer::APP_INIT_USER, $sUIDUserLogged));
if ( isset ( $aAdditionalFilter ) && isset ( $aAdditionalFilter [ 'APP_STATUS_FILTER' ])) {
$c -> add ( ApplicationPeer :: APP_STATUS , $sValue , Criteria :: EQUAL );
} else {
$c -> add ( ApplicationPeer :: APP_STATUS , 'DRAFT' , Criteria :: NOT_EQUAL );
}
$c -> add (
$c -> getNewCriterion (
AppDelegationPeer :: DEL_THREAD_STATUS , 'CLOSED'
) -> addOr (
$c -> getNewCriterion (
ApplicationPeer :: APP_STATUS , 'COMPLETED'
) -> addAnd (
$c -> getNewCriterion ( AppDelegationPeer :: DEL_PREVIOUS , 0 )
)
)
);
$c -> add ( $c -> getNewCriterion ( ApplicationPeer :: APP_UID , $aProcesses , Criteria :: NOT_IN ));
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
break ;
}
//select the xmlList to show
if ( $sTypeList == 'gral' ) {
if ( $RBAC -> userCanAccess ( 'PM_DELETECASE' ) == 1 ) {
$xmlfile = $filesList [ 'Alldelete' ];
} else {
$xmlfile = $filesList [ 'all' ];
}
} else {
$xmlfile = $filesList [ $sTypeList ];
}
if ( $ClearSession ) {
//OPCION_1: claening the $_SESSION and updating the List.... only case List
foreach ( $filesList as $file ) {
$id = G :: createUID ( '' , $file . '.xml' );
unset ( $_SESSION [ 'pagedTable[' . $id . ']' ]);
unset ( $_SESSION [ $id ]);
}
//OPCION_2: cleaning the $_SESSION and whole List and xmls
$cur = array_keys ( $_SESSION );
foreach ( $cur as $key ) {
if ( substr ( $key , 0 , 11 ) === " pagedTable[ " ) {
unset ( $_SESSION [ $key ]);
} else {
$xml = G :: getUIDName ( $key , '' );
if ( strpos ( $xml , '.xml' ) !== false )
unset ( $_SESSION [ $key ]);
}
}
}
return array ( $c , $xmlfile );
}
/*
* Get a case in its current index
*
* @ name loadCaseInCurrentDelegation
* @ param string $sTypeList
* @ param string $sUIDUserLogged
* @ Author Erik Amaru Ortiz < erik @ colosa . com >
* @ return array
*/
function loadCaseInCurrentDelegation ( $APP_UID ) {
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_UID );
$c -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$c -> addSelectColumn ( ApplicationPeer :: APP_UPDATE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
//$c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
$c -> addAsColumn ( 'DEL_TASK_DUE_DATE' , " IF ( " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " <= NOW(), " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " , " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " ) " );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addAsColumn ( 'APP_CURRENT_USER' , " CONCAT(USERS.USR_LASTNAME, ' ', USERS.USR_FIRSTNAME) " );
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
$c -> addAsColumn ( 'APP_TITLE' , 'APP_TITLE.CON_VALUE' );
$c -> addAsColumn ( 'APP_PRO_TITLE' , 'PRO_TITLE.CON_VALUE' );
$c -> addAsColumn ( 'APP_TAS_TITLE' , 'TAS_TITLE.CON_VALUE' );
//$c->addAsColumn('APP_DEL_PREVIOUS_USER', 'APP_LAST_USER.USR_USERNAME');
$c -> addAsColumn ( 'APP_DEL_PREVIOUS_USER' , " CONCAT(APP_LAST_USER.USR_LASTNAME, ' ', APP_LAST_USER.USR_FIRSTNAME) " );
$c -> addAlias ( " APP_TITLE " , 'CONTENT' );
$c -> addAlias ( " PRO_TITLE " , 'CONTENT' );
$c -> addAlias ( " TAS_TITLE " , 'CONTENT' );
$c -> addAlias ( " APP_PREV_DEL " , 'APP_DELEGATION' );
$c -> addAlias ( " APP_LAST_USER " , 'USERS' );
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$appThreadConds [] = array ( ApplicationPeer :: APP_UID , AppThreadPeer :: APP_UID );
$appThreadConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppThreadPeer :: DEL_INDEX );
$c -> addJoinMC ( $appThreadConds , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$del = DBAdapter :: getStringDelimiter ();
$appTitleConds = array ();
$appTitleConds [] = array ( ApplicationPeer :: APP_UID , 'APP_TITLE.CON_ID' );
$appTitleConds [] = array ( 'APP_TITLE.CON_CATEGORY' , $del . 'APP_TITLE' . $del );
$appTitleConds [] = array ( 'APP_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $appTitleConds , Criteria :: LEFT_JOIN );
$proTitleConds = array ();
$proTitleConds [] = array ( ApplicationPeer :: PRO_UID , 'PRO_TITLE.CON_ID' );
$proTitleConds [] = array ( 'PRO_TITLE.CON_CATEGORY' , $del . 'PRO_TITLE' . $del );
$proTitleConds [] = array ( 'PRO_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $proTitleConds , Criteria :: LEFT_JOIN );
$tasTitleConds = array ();
$tasTitleConds [] = array ( AppDelegationPeer :: TAS_UID , 'TAS_TITLE.CON_ID' );
$tasTitleConds [] = array ( 'TAS_TITLE.CON_CATEGORY' , $del . 'TAS_TITLE' . $del );
$tasTitleConds [] = array ( 'TAS_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $tasTitleConds , Criteria :: LEFT_JOIN );
$prevConds = array ();
$prevConds [] = array ( ApplicationPeer :: APP_UID , 'APP_PREV_DEL.APP_UID' );
$prevConds [] = array ( 'APP_PREV_DEL.DEL_INDEX' , AppDelegationPeer :: DEL_PREVIOUS );
$c -> addJoinMC ( $prevConds , Criteria :: LEFT_JOIN );
$usrConds = array ();
$usrConds [] = array ( 'APP_PREV_DEL.USR_UID' , 'APP_LAST_USER.USR_UID' );
$c -> addJoinMC ( $usrConds , Criteria :: LEFT_JOIN );
$c -> add ( TaskPeer :: TAS_TYPE , 'SUBPROCESS' , Criteria :: NOT_EQUAL );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> add ( ApplicationPeer :: APP_UID , $APP_UID );
$oDataset = ApplicationPeer :: doSelectRS ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$row = $oDataset -> getRow ();
return $row ;
}
/**
* Get a case in its current index
*
* @ name loadCaseByDelegation
* @ param string $appUid ,
* @ param string $delIndex
2011-02-03 11:13:21 +00:00
* @ author gustavo cruz
2010-12-02 23:34:41 +00:00
* @ return array
*/
function loadCaseByDelegation ( $appUid , $delIndex ) {
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_UID );
$c -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$c -> addSelectColumn ( ApplicationPeer :: APP_UPDATE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
//$c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
$c -> addAsColumn ( 'DEL_TASK_DUE_DATE' , " IF ( " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " <= NOW(), " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " , " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " ) " );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addAsColumn ( 'APP_CURRENT_USER' , " CONCAT(USERS.USR_LASTNAME, ' ', USERS.USR_FIRSTNAME) " );
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
$c -> addAsColumn ( 'APP_TITLE' , 'APP_TITLE.CON_VALUE' );
$c -> addAsColumn ( 'APP_PRO_TITLE' , 'PRO_TITLE.CON_VALUE' );
$c -> addAsColumn ( 'APP_TAS_TITLE' , 'TAS_TITLE.CON_VALUE' );
//$c->addAsColumn('APP_DEL_PREVIOUS_USER', 'APP_LAST_USER.USR_USERNAME');
$c -> addAsColumn ( 'APP_DEL_PREVIOUS_USER' , " CONCAT(APP_LAST_USER.USR_LASTNAME, ' ', APP_LAST_USER.USR_FIRSTNAME) " );
$c -> addAlias ( " APP_TITLE " , 'CONTENT' );
$c -> addAlias ( " PRO_TITLE " , 'CONTENT' );
$c -> addAlias ( " TAS_TITLE " , 'CONTENT' );
$c -> addAlias ( " APP_PREV_DEL " , 'APP_DELEGATION' );
$c -> addAlias ( " APP_LAST_USER " , 'USERS' );
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$appThreadConds [] = array ( ApplicationPeer :: APP_UID , AppThreadPeer :: APP_UID );
$appThreadConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppThreadPeer :: DEL_INDEX );
$c -> addJoinMC ( $appThreadConds , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$del = DBAdapter :: getStringDelimiter ();
$appTitleConds = array ();
$appTitleConds [] = array ( ApplicationPeer :: APP_UID , 'APP_TITLE.CON_ID' );
$appTitleConds [] = array ( 'APP_TITLE.CON_CATEGORY' , $del . 'APP_TITLE' . $del );
$appTitleConds [] = array ( 'APP_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $appTitleConds , Criteria :: LEFT_JOIN );
$proTitleConds = array ();
$proTitleConds [] = array ( ApplicationPeer :: PRO_UID , 'PRO_TITLE.CON_ID' );
$proTitleConds [] = array ( 'PRO_TITLE.CON_CATEGORY' , $del . 'PRO_TITLE' . $del );
$proTitleConds [] = array ( 'PRO_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $proTitleConds , Criteria :: LEFT_JOIN );
$tasTitleConds = array ();
$tasTitleConds [] = array ( AppDelegationPeer :: TAS_UID , 'TAS_TITLE.CON_ID' );
$tasTitleConds [] = array ( 'TAS_TITLE.CON_CATEGORY' , $del . 'TAS_TITLE' . $del );
$tasTitleConds [] = array ( 'TAS_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $tasTitleConds , Criteria :: LEFT_JOIN );
$prevConds = array ();
$prevConds [] = array ( ApplicationPeer :: APP_UID , 'APP_PREV_DEL.APP_UID' );
$prevConds [] = array ( 'APP_PREV_DEL.DEL_INDEX' , AppDelegationPeer :: DEL_PREVIOUS );
$c -> addJoinMC ( $prevConds , Criteria :: LEFT_JOIN );
$usrConds = array ();
$usrConds [] = array ( 'APP_PREV_DEL.USR_UID' , 'APP_LAST_USER.USR_UID' );
$c -> addJoinMC ( $usrConds , Criteria :: LEFT_JOIN );
$c -> add ( TaskPeer :: TAS_TYPE , 'SUBPROCESS' , Criteria :: NOT_EQUAL );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
$c -> add ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' );
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$c -> add ( ApplicationPeer :: APP_UID , $appUid );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $delIndex );
$oDataset = ApplicationPeer :: doSelectRS ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$row = $oDataset -> getRow ();
return $row ;
}
/**
*
* @ name ThrowUnpauseDaemon
2011-02-03 11:13:21 +00:00
* author : erik @ colosa . com
* Description : This method set all cases with the APP_DISABLE_ACTION_DATE for today
2010-12-02 23:34:41 +00:00
* @ return void
*/
2011-02-02 19:36:34 +00:00
function ThrowUnpauseDaemon ( $today ) {
$today = ( $today == date ( 'Y-m-d' )) ? date ( 'Y-m-d' ) : $today ;
2010-12-02 23:34:41 +00:00
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> add ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL ) -> addOr ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 )));
$c -> add ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_DATE , $today . ' 23:59:59' , Criteria :: LESS_EQUAL ) -> addAnd ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_DATE , null , Criteria :: ISNOTNULL )));
$d = AppDelayPeer :: doSelectRS ( $c );
$d -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$d -> next ();
while ( $aRow = $d -> getRow ()) {
$this -> unpauseCase ( $aRow [ 'APP_UID' ], $aRow [ 'APP_DEL_INDEX' ], 'System Daemon' );
$d -> next ();
}
}
2011-02-18 16:19:08 +00:00
/*
* it Changes the date and APP_DISABLE_ACTION_USER to unpause cases
*
* @ name UnpauseRoutedCasesWithPauseFlagEnabled
* @ param string $usrLogged
* @ return void
*/
function UnpauseRoutedCasesWithPauseFlagEnabled ( $usrLogged ) {
/*
SELECT * APP_DELAY_UID
FROM APP_DELAY
left join APP_DELEGATION ON ( APP_DELAY . APP_UID = APP_DELEGATION . APP_UID AND APP_DELAY . APP_DEL_INDEX = APP_DELEGATION . DEL_INDEX )
WHERE APP_DELEGATION_USER = '00000000000000000000000000000001' and ( APP_DISABLE_ACTION_USER = '0' or isnull ( APP_DISABLE_ACTION_USER ) ) AND DEL_THREAD_STATUS = 'CLOSED'
APP_DISABLE_ACTION_USER = $usrLogged
APP_DISABLE_ACTION_DATE = NOW */
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( AppDelayPeer :: APP_DELAY_UID );
$c -> add ( $c -> getNewCriterion ( AppDelayPeer :: APP_DELEGATION_USER , $usrLogged , Criteria :: EQUAL ) -> addAnd ( $c -> getNewCriterion ( AppDelegationPeer :: DEL_THREAD_STATUS , 'CLOSED' , Criteria :: EQUAL )) -> addAnd ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL ) -> addOr ( $c -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 )) ) );
$aConditions = array ();
$aConditions [] = array ( AppDelayPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDelayPeer :: APP_DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$c -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$rs = AppDelayPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
while ( $rs -> next ()){
$row = $rs -> getRow ();
if ( is_array ( $row )){
$con = Propel :: getConnection ( 'workflow' );
$c1 = new Criteria ( 'workflow' );
$c1 -> add ( AppDelayPeer :: APP_DELAY_UID , $row [ 'APP_DELAY_UID' ]);
// update set
$c2 = new Criteria ( 'workflow' );
$c2 -> add ( AppDelayPeer :: APP_DISABLE_ACTION_USER , $usrLogged );
$c2 -> add ( AppDelayPeer :: APP_DISABLE_ACTION_DATE , date ( 'Y-m-d' ));
BasePeer :: doUpdate ( $c1 , $c2 , $con );
}
}
}
2010-12-02 23:34:41 +00:00
/*
* Get the application UID by case number
*
* @ name getApplicationUIDByNumber
* @ param integer $iApplicationNumber
* @ return string
*/
function getApplicationUIDByNumber ( $iApplicationNumber ) {
$oCriteria = new Criteria ();
$oCriteria -> add ( ApplicationPeer :: APP_NUMBER , $iApplicationNumber );
$oApplication = ApplicationPeer :: doSelectOne ( $oCriteria );
if ( ! is_null ( $oApplication )) {
return $oApplication -> getAppUid ();
} else {
return null ;
}
}
/*
* Get the current delegation of a user or a case
* @ name getCurrentDelegation
* @ param string $sApplicationUID
* @ param string $sUserUID
* @ return integer
*/
function getCurrentDelegation ( $sApplicationUID = '' , $sUserUID = '' ) {
$oCriteria = new Criteria ();
$oCriteria -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDelegationPeer :: USR_UID , $sUserUID );
$oCriteria -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$oCriteria -> addDescendingOrderByColumn ( AppDelegationPeer :: DEL_DELEGATE_DATE );
$oApplication = AppDelegationPeer :: doSelectOne ( $oCriteria );
if ( ! is_null ( $oApplication )) {
return $oApplication -> getDelIndex ();
}
//if the user is not in the task, we need to return a valid del index, so we are returning the latest delindex
$oCriteria = new Criteria ();
$oCriteria -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria -> addDescendingOrderByColumn ( AppDelegationPeer :: DEL_DELEGATE_DATE );
$oApplication = AppDelegationPeer :: doSelectOne ( $oCriteria );
if ( ! is_null ( $oApplication )) {
return $oApplication -> getDelIndex ();
}
throw ( new Exception ( 'this case has 0 delegations' ) );
}
/*
* Get the current delegation of a user or a case
* @ name loadTriggers
* @ param string $sTasUid
* @ param string $sStepType
* @ param array $sStepUidObj
* @ param string $sTriggerType
* @ return integer
*/
function loadTriggers ( $sTasUid , $sStepType , $sStepUidObj , $sTriggerType ) {
$aTriggers = array ();
if (( $sStepUidObj != - 1 ) && ( $sStepUidObj != - 2 )) {
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( StepPeer :: STEP_UID );
$c -> add ( StepPeer :: TAS_UID , $sTasUid );
$c -> add ( StepPeer :: STEP_TYPE_OBJ , $sStepType );
$c -> add ( StepPeer :: STEP_UID_OBJ , $sStepUidObj );
$rs = StepPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
$sStepUid = $row [ 'STEP_UID' ];
} else {
$sStepUid = $sStepUidObj ;
}
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( TriggersPeer :: TRI_UID );
$c -> addSelectColumn ( StepTriggerPeer :: ST_CONDITION );
$c -> addSelectColumn ( TriggersPeer :: TRI_TYPE );
$c -> addSelectColumn ( TriggersPeer :: TRI_WEBBOT );
$c -> add ( StepTriggerPeer :: STEP_UID , $sStepUid );
$c -> add ( StepTriggerPeer :: TAS_UID , $sTasUid );
$c -> add ( StepTriggerPeer :: ST_TYPE , $sTriggerType );
$c -> addJoin ( StepTriggerPeer :: TRI_UID , TriggersPeer :: TRI_UID , Criteria :: LEFT_JOIN );
$c -> addAscendingOrderByColumn ( StepTriggerPeer :: ST_POSITION );
$rs = TriggersPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$aTriggers [] = $row ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aTriggers ;
}
/*
* Execute trigger in task
* @ name executeTriggers
* @ param string $sTasUid
* @ param string $sStepType
* @ param array $sStepUidObj
* @ param string $sTriggerType
* @ param array $aFields
* @ return integer
*/
function executeTriggers ( $sTasUid , $sStepType , $sStepUidObj , $sTriggerType , $aFields = array ()) {
$aTriggers = $this -> loadTriggers ( $sTasUid , $sStepType , $sStepUidObj , $sTriggerType );
if ( count ( $aTriggers ) > 0 ) {
$oPMScript = new PMScript ();
$oPMScript -> setFields ( $aFields );
foreach ( $aTriggers as $aTrigger ) {
$bExecute = true ;
if ( $aTrigger [ 'ST_CONDITION' ] !== '' ) {
$oPMScript -> setScript ( $aTrigger [ 'ST_CONDITION' ]);
$bExecute = $oPMScript -> evaluate ();
}
if ( $bExecute ) {
$oPMScript -> setScript ( $aTrigger [ 'TRI_WEBBOT' ]);
$oPMScript -> execute ();
}
}
return $oPMScript -> aFields ;
} else {
return $aFields ;
}
}
/*
* Get the trigger ' s names
* @ name getTriggerNames
* @ param string $triggers
* @ return integer
*/
function getTriggerNames ( $triggers ) {
$triggers_info = Array ();
$aTriggers = array ();
foreach ( $triggers as $key => $val ) {
$aTriggers [] = $val [ 'TRI_UID' ];
}
$lang = defined ( 'SYS_LANG' ) ? SYS_LANG : 'en' ;
$c = new Criteria ();
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ContentPeer :: CON_ID );
$c -> addSelectColumn ( ContentPeer :: CON_VALUE );
$c -> add ( ContentPeer :: CON_ID , $aTriggers , Criteria :: IN );
$c -> add ( ContentPeer :: CON_CATEGORY , 'TRI_TITLE' );
$c -> add ( ContentPeer :: CON_VALUE , " " , Criteria :: NOT_EQUAL );
$c -> add ( ContentPeer :: CON_LANG , $lang );
$rs = TriggersPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$info [ $row [ 'CON_ID' ]] = $row [ 'CON_VALUE' ];
$rs -> next ();
$row = $rs -> getRow ();
}
foreach ( $triggers as $key => $val ) {
if ( isset ( $info [ $val [ 'TRI_UID' ]])) {
$triggers_info [] = $info [ $val [ 'TRI_UID' ]];
}
}
return $triggers_info ;
}
/*
* Return the input documents list criteria object
*
* @ name getInputDocumentsCriteria
* @ param string $sApplicationUID
* @ param string $iDelegation
* @ param string $sDocumentUID
* @ param string $sAppDocuUID
* @ return object
*/
function getInputDocumentsCriteria ( $sApplicationUID , $iDelegation , $sDocumentUID , $sAppDocuUID = " " ) {
try {
$listing = false ;
$oPluginRegistry = & PMPluginRegistry :: getSingleton ();
if ( $oPluginRegistry -> existsTrigger ( PM_CASE_DOCUMENT_LIST )) {
$folderData = new folderData ( null , null , $sApplicationUID , null , $_SESSION [ 'USER_LOGGED' ]);
$folderData -> PMType = " INPUT " ;
$folderData -> returnList = true ;
//$oPluginRegistry = & PMPluginRegistry::getSingleton();
$listing = $oPluginRegistry -> executeTriggers ( PM_CASE_DOCUMENT_LIST , $folderData );
}
$oUser = new Users ();
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
//$oCriteria->add(AppDocumentPeer::DEL_INDEX, $iDelegation);
$oCriteria -> add ( AppDocumentPeer :: DOC_UID , $sDocumentUID );
if ( $sAppDocuUID != " " ) {
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_UID , $sAppDocuUID );
}
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , array ( 'INPUT' , 'ATTACHED' ), CRITERIA :: IN );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
//$oCriteria->add($oCriteria->getNewCriterion(AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], Criteria::IN)->addOr($oCriteria->getNewCriterion(AppDocumentPeer::USR_UID, array($sUserUID,'-1'), Criteria::IN)));
2011-07-07 09:18:22 -04:00
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_UID );
2010-12-02 23:34:41 +00:00
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aInputDocuments = array ();
$aInputDocuments [] = array ( 'APP_DOC_UID' => 'char' , 'DOC_VERSION' => 'char' , 'DOC_UID' => 'char' , 'APP_DOC_COMMENT' => 'char' , 'APP_DOC_FILENAME' => 'char' , 'APP_DOC_INDEX' => 'integer' );
while ( $aRow = $oDataset -> getRow ()) {
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$lastVersion = $oAppDocument -> getLastAppDocVersion ( $aRow [ 'APP_DOC_UID' ], $sApplicationUID );
$aFields = array ( 'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ], 'DOC_VERSION' => $aAux [ 'DOC_VERSION' ], 'DOC_UID' => $aAux [ 'DOC_UID' ], 'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ], 'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ], 'APP_DOC_INDEX' =>
$aAux [ 'APP_DOC_INDEX' ]);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'POSITION' ] = isset ( $_SESSION [ 'STEP_POSITION' ]) ? $_SESSION [ 'STEP_POSITION' ] : 1 ;
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_INPUT_AND_HISTORY' );
//if (in_array($aRow['APP_DOC_UID'], $aDelete['INPUT_DOCUMENTS'])) {
// $aFields['ID_DELETE'] = G::LoadTranslation('ID_DELETE');
//}
$aFields [ 'ID_DELETE' ] = G :: LoadTranslation ( 'ID_DELETE' );
$aFields [ 'REPLACE_LABEL' ] = " " ;
if (( $aRow [ 'DOC_VERSION' ] == $lastVersion ) || ( $sAppDocuUID != " " )) {
$aFields [ 'REPLACE_LABEL' ] = G :: LoadTranslation ( 'ID_REPLACE' );
$oInputDocument = new InputDocument ();
$inputDocumentFields = $oInputDocument -> load ( $aRow [ 'DOC_UID' ]);
if ( $inputDocumentFields [ 'INP_DOC_VERSIONING' ]) {
$aFields [ 'NEWVERSION_LABEL' ] = G :: LoadTranslation ( 'ID_NEW_VERSION' );
}
}
if ( $aRow [ 'DOC_VERSION' ] > 1 ) {
$aFields [ 'VERSIONHISTORY_LABEL' ] = G :: LoadTranslation ( 'ID_VERSION_HISTORY' );
}
if ( $aRow [ 'USR_UID' ] != - 1 ) {
$aUser = $oUser -> load ( $aRow [ 'USR_UID' ]);
$aFields [ 'CREATOR' ] = $aUser [ 'USR_FIRSTNAME' ] . ' ' . $aUser [ 'USR_LASTNAME' ];
} else {
$aFields [ 'CREATOR' ] = '***' ;
}
$aFields [ 'APP_DOC_CREATE_DATE' ] = $aRow [ 'APP_DOC_CREATE_DATE' ];
$aFields [ 'DOC_VERSION_LABEL' ] = $aRow [ 'DOC_VERSION' ];
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_DOWNLOAD' );
$aFields [ 'DOWNLOAD_LINK' ] = " cases_ShowDocument?a= " . $aRow [ 'APP_DOC_UID' ] . " &v= " . $aRow [ 'DOC_VERSION' ];
if ( is_array ( $listing ))
foreach ( $listing as $folderitem ) {
if ( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) {
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' );
$aFields [ 'DOWNLOAD_LINK' ] = $folderitem -> downloadScript ;
continue ;
}
}
$aFields [ 'COMMENT' ] = $aFields [ 'APP_DOC_COMMENT' ];
if (( $aRow [ 'DOC_VERSION' ] == $lastVersion ) || ( $sAppDocuUID != " " )) {
$aInputDocuments [] = $aFields ;
}
$oDataset -> next ();
}
2011-07-07 09:18:22 -04:00
2010-12-02 23:34:41 +00:00
global $_DBArray ;
$_DBArray [ 'inputDocuments' ] = $aInputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
2011-07-07 09:18:22 -04:00
G :: LoadClass ( 'ArrayPeer' );
2010-12-02 23:34:41 +00:00
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'inputDocuments' );
2011-07-07 09:18:22 -04:00
// $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_CREATE_DATE);
2010-12-02 23:34:41 +00:00
return $oCriteria ;
} catch ( exception $oException ) {
throw $oException ;
}
}
/*
* Return the input documents list to Review
*
* @ name getInputDocumentsCriteriaToRevise
* @ param string $sApplicationUID
* @ return object
*/
function getInputDocumentsCriteriaToRevise ( $sApplicationUID ) {
try {
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , array ( 'INPUT' , 'ATTACHED' ), CRITERIA :: IN );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aInputDocuments = array ();
$aInputDocuments [] = array ( 'APP_DOC_UID' => 'char' , 'DOC_UID' => 'char' , 'APP_DOC_COMMENT' => 'char' , 'APP_DOC_FILENAME' => 'char' , 'APP_DOC_INDEX' => 'integer' );
while ( $aRow = $oDataset -> getRow ()) {
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$aFields = array ( 'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ], 'DOC_UID' => $aAux [ 'DOC_UID' ], 'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ], 'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ], 'APP_DOC_INDEX' =>
$aAux [ 'APP_DOC_INDEX' ]);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'CREATE_DATE' ] = $aRow [ 'APP_DOC_CREATE_DATE' ];
$aFields [ 'TYPE' ] = $aRow [ 'APP_DOC_TYPE' ];
$aFields [ 'POSITION' ] = $_SESSION [ 'STEP_POSITION' ];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
$aInputDocuments [] = $aFields ;
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'inputDocuments' ] = $aInputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'inputDocuments' );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
return $oCriteria ;
} catch ( exception $oException ) {
throw $oException ;
}
}
/*
* Return the input documents list to Review
*
* @ name getInputDocumentsCriteriaToRevise
* @ param string $sApplicationUID
* @ return object
*/
function getOutputDocumentsCriteriaToRevise ( $sApplicationUID ) {
try {
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , 'OUTPUT' );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aOutputDocuments = array ();
$aOutputDocuments [] = array ( 'APP_DOC_UID' => 'char' , 'DOC_UID' => 'char' , 'APP_DOC_COMMENT' => 'char' , 'APP_DOC_FILENAME' => 'char' , 'APP_DOC_INDEX' => 'integer' , 'APP_DOC_CREATE_DATE' => 'char' );
while ( $aRow = $oDataset -> getRow ()) {
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$aFields = array ( 'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ], 'DOC_UID' => $aAux [ 'DOC_UID' ], 'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ], 'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ], 'APP_DOC_INDEX' =>
$aAux [ 'APP_DOC_INDEX' ], 'APP_DOC_CREATE_DATE' => $aRow [ 'APP_DOC_CREATE_DATE' ]);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aOutputDocuments [] = $aFields ;
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'outputDocuments' ] = $aOutputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'outputDocuments' );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
return $oCriteria ;
} catch ( exception $oException ) {
throw $oException ;
}
}
/*
* Return the ( Application ) Criteria object
*
* @ name getCriteriaProcessCases
* @ param string $status
* @ param string $PRO_UID
* @ return object
*/
function getCriteriaProcessCases ( $status , $PRO_UID ) {
$c = new Criteria ( 'workflow' );
$c -> add ( ApplicationPeer :: APP_STATUS , $status );
$c -> add ( ApplicationPeer :: PRO_UID , $PRO_UID );
return $c ;
}
/*
* pause a Case
*
* @ name pauseCase
* @ param string $sApplicationUID
* @ param string $iDelegation
* @ param string $sUserUID
* @ param string $sUnpauseDate
* @ return object
*/
function pauseCase ( $sApplicationUID , $iDelegation , $sUserUID , $sUnpauseDate = null ) {
$this -> CloseCurrentDelegation ( $sApplicationUID , $iDelegation );
$oApplication = new Application ();
$aFields = $oApplication -> Load ( $sApplicationUID );
//get the appthread row id ( APP_THREAD_INDEX' )
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> clearSelectColumns ();
$oCriteria -> addSelectColumn ( AppThreadPeer :: APP_THREAD_INDEX );
$oCriteria -> add ( AppThreadPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppThreadPeer :: DEL_INDEX , $iDelegation );
$oDataset = AppThreadPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
//now create a row in APP_DELAY with type PAUSE
$aData [ 'PRO_UID' ] = $aFields [ 'PRO_UID' ];
$aData [ 'APP_UID' ] = $sApplicationUID ;
$aData [ 'APP_THREAD_INDEX' ] = $aRow [ 'APP_THREAD_INDEX' ];
$aData [ 'APP_DEL_INDEX' ] = $iDelegation ;
$aData [ 'APP_TYPE' ] = 'PAUSE' ;
$aData [ 'APP_STATUS' ] = $aFields [ 'APP_STATUS' ];
$aData [ 'APP_DELEGATION_USER' ] = $sUserUID ;
$aData [ 'APP_ENABLE_ACTION_USER' ] = $sUserUID ;
$aData [ 'APP_ENABLE_ACTION_DATE' ] = date ( 'Y-m-d H:i:s' );
$aData [ 'APP_DISABLE_ACTION_DATE' ] = $sUnpauseDate ;
$oAppDelay = new AppDelay ();
$oAppDelay -> create ( $aData );
}
/*
* unpause a case
*
* @ name unpauseCase
* @ param string $sApplicationUID
* @ param string $iDelegation
* @ param string $sUserUID
* @ return object
*/
function unpauseCase ( $sApplicationUID , $iDelegation , $sUserUID ) {
//get information about current $iDelegation row
$oAppDelegation = new AppDelegation ();
$aFieldsDel = $oAppDelegation -> Load ( $sApplicationUID , $iDelegation );
//and creates a new AppDelegation row with the same user, task, process, etc.
$proUid = $aFieldsDel [ 'PRO_UID' ];
$appUid = $aFieldsDel [ 'APP_UID' ];
$tasUid = $aFieldsDel [ 'TAS_UID' ];
$usrUid = $aFieldsDel [ 'USR_UID' ];
$delThread = $aFieldsDel [ 'DEL_THREAD' ];
$iIndex = $oAppDelegation -> createAppDelegation ( $proUid , $appUid , $tasUid , $usrUid , $delThread );
//update other fields in the recent new appDelegation
$aData = array ();
$aData [ 'APP_UID' ] = $aFieldsDel [ 'APP_UID' ];
$aData [ 'DEL_INDEX' ] = $iIndex ;
$aData [ 'DEL_PREVIOUS' ] = $aFieldsDel [ 'DEL_PREVIOUS' ];
$aData [ 'DEL_TYPE' ] = $aFieldsDel [ 'DEL_TYPE' ];
$aData [ 'DEL_PRIORITY' ] = $aFieldsDel [ 'DEL_PRIORITY' ];
$aData [ 'DEL_DELEGATE_DATE' ] = $aFieldsDel [ 'DEL_DELEGATE_DATE' ];
$aData [ 'DEL_INIT_DATE' ] = date ( 'Y-m-d H:i:s' );
$aData [ 'DEL_FINISH_DATE' ] = null ;
$oAppDelegation -> update ( $aData );
//get the APP_DELAY row ( with app_uid, del_index and app_type=pause
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> clearSelectColumns ();
$oCriteria -> addSelectColumn ( AppDelayPeer :: APP_DELAY_UID );
$oCriteria -> addSelectColumn ( AppDelayPeer :: APP_THREAD_INDEX );
$oCriteria -> add ( AppDelayPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDelayPeer :: APP_DEL_INDEX , $iDelegation );
$oCriteria -> add ( AppDelayPeer :: APP_TYPE , 'PAUSE' );
$oCriteria -> add ( $oCriteria -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , null , Criteria :: ISNULL ) -> addOr ( $oCriteria -> getNewCriterion ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 )));
$oDataset = AppDelayPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
//update the DEL_INDEX ? in APP_THREAD table?
$aUpdate = array ( 'APP_UID' => $sApplicationUID , 'APP_THREAD_INDEX' => $aRow [ 'APP_THREAD_INDEX' ], 'DEL_INDEX' => $iIndex );
$oAppThread = new AppThread ();
$oAppThread -> update ( $aUpdate );
$aData [ 'APP_DELAY_UID' ] = $aRow [ 'APP_DELAY_UID' ];
$aData [ 'APP_DISABLE_ACTION_USER' ] = $sUserUID ;
$aData [ 'APP_DISABLE_ACTION_DATE' ] = date ( 'Y-m-d H:i:s' );
$oAppDelay = new AppDelay ();
$aFieldsDelay = $oAppDelay -> update ( $aData );
}
/*
* cancel a case
*
* @ name cancelCase
* @ param string $sApplicationUID
* @ param string $iIndex
* @ param string $user_logged
* @ return void
*/
function cancelCase ( $sApplicationUID , $iIndex , $user_logged ) {
$oApplication = new Application ();
$aFields = $oApplication -> load ( $sApplicationUID );
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
if ( AppDelegationPeer :: doCount ( $oCriteria ) == 1 ) {
$aFields [ 'APP_STATUS' ] = 'CANCELLED' ;
$oApplication -> update ( $aFields );
}
$this -> CloseCurrentDelegation ( $sApplicationUID , $iIndex );
$oAppDel = new AppDelegation ();
$oAppDel -> Load ( $sApplicationUID , $iIndex );
$aAppDel = $oAppDel -> toArray ( BasePeer :: TYPE_FIELDNAME );
$this -> closeAppThread ( $sApplicationUID , $aAppDel [ 'DEL_THREAD' ]);
$delay = new AppDelay ();
$array [ 'PRO_UID' ] = $aFields [ 'PRO_UID' ];
$array [ 'APP_UID' ] = $sApplicationUID ;
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( AppThreadPeer :: APP_THREAD_INDEX );
$c -> add ( AppThreadPeer :: APP_UID , $sApplicationUID );
$c -> add ( AppThreadPeer :: DEL_INDEX , $iIndex );
$oDataset = AppThreadPeer :: doSelectRS ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
$array [ 'APP_THREAD_INDEX' ] = $aRow [ 'APP_THREAD_INDEX' ];
$array [ 'APP_DEL_INDEX' ] = $iIndex ;
$array [ 'APP_TYPE' ] = 'CANCEL' ;
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
$c -> add ( ApplicationPeer :: APP_UID , $sApplicationUID );
$oDataset = ApplicationPeer :: doSelectRS ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow1 = $oDataset -> getRow ();
$array [ 'APP_STATUS' ] = $aRow1 [ 'APP_STATUS' ];
$array [ 'APP_DELEGATION_USER' ] = $user_logged ;
$array [ 'APP_ENABLE_ACTION_USER' ] = $user_logged ;
$array [ 'APP_ENABLE_ACTION_DATE' ] = date ( 'Y-m-d H:i:s' );
$delay -> create ( $array );
//Before cancel a case verify if is a child case
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( SubApplicationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( SubApplicationPeer :: SA_STATUS , 'ACTIVE' );
if ( SubApplicationPeer :: doCount ( $oCriteria2 ) > 0 ) {
G :: LoadClass ( 'derivation' );
$oDerivation = new Derivation ();
$oDerivation -> verifyIsCaseChild ( $sApplicationUID );
}
}
/*
* reactive a case
*
* @ name reactivateCase
* @ param string $sApplicationUID
* @ param string $iIndex
* @ param string $user_logged
* @ return void
*/
function reactivateCase ( $sApplicationUID , $iIndex , $user_logged ) {
$oApplication = new Application ();
$aFields = $oApplication -> load (( isset ( $_POST [ 'sApplicationUID' ]) ? $_POST [ 'sApplicationUID' ] : $_SESSION [ 'APPLICATION' ]));
$aFields [ 'APP_STATUS' ] = 'TO_DO' ;
$oApplication -> update ( $aFields );
$this -> ReactivateCurrentDelegation ( $sApplicationUID , $iIndex );
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( AppDelayPeer :: APP_DELAY_UID );
$c -> add ( AppDelayPeer :: APP_UID , $sApplicationUID );
$c -> add ( AppDelayPeer :: PRO_UID , $aFields [ 'PRO_UID' ]);
$c -> add ( AppDelayPeer :: APP_DEL_INDEX , $iIndex );
$c -> add ( AppDelayPeer :: APP_TYPE , 'CANCEL' );
$c -> add ( AppDelayPeer :: APP_DISABLE_ACTION_USER , 0 );
$c -> add ( AppDelayPeer :: APP_DISABLE_ACTION_DATE , null , Criteria :: ISNULL );
$oDataset = AppDelayPeer :: doSelectRS ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
//var_dump($aRow);
$aFields = array ();
$aFields [ 'APP_DELAY_UID' ] = $aRow [ 'APP_DELAY_UID' ];
$aFields [ 'APP_DISABLE_ACTION_USER' ] = $user_logged ;
$aFields [ 'APP_DISABLE_ACTION_DATE' ] = date ( 'Y-m-d H:i:s' );
$delay = new AppDelay ();
$delay -> update ( $aFields );
//$this->ReactivateCurrentDelegation($sApplicationUID);
$con = Propel :: getConnection ( 'workflow' );
$sql = " UPDATE APP_THREAD SET APP_THREAD_STATUS = 'OPEN' WHERE APP_UID = ' $sApplicationUID ' AND DEL_INDEX =' $iIndex ' " ;
$stmt = $con -> createStatement ();
$rs = $stmt -> executeQuery ( $sql , ResultSet :: FETCHMODE_ASSOC );
}
/*
* reassign a case
*
* @ name reassignCase
* @ param string $sApplicationUID
* @ param string $iDelegation
* @ param string $sUserUID
* @ param string $newUserUID
* @ param string $sType
* @ return true
*/
function reassignCase ( $sApplicationUID , $iDelegation , $sUserUID , $newUserUID , $sType = 'REASSIGN' ) {
$this -> CloseCurrentDelegation ( $sApplicationUID , $iDelegation );
$oAppDelegation = new AppDelegation ();
$aFieldsDel = $oAppDelegation -> Load ( $sApplicationUID , $iDelegation );
$iIndex = $oAppDelegation -> createAppDelegation ( $aFieldsDel [ 'PRO_UID' ], $aFieldsDel [ 'APP_UID' ], $aFieldsDel [ 'TAS_UID' ], $aFieldsDel [ 'USR_UID' ], $aFieldsDel [ 'DEL_THREAD' ]);
$aData = array ();
$aData [ 'APP_UID' ] = $aFieldsDel [ 'APP_UID' ];
$aData [ 'DEL_INDEX' ] = $iIndex ;
$aData [ 'DEL_PREVIOUS' ] = $aFieldsDel [ 'DEL_PREVIOUS' ];
$aData [ 'DEL_TYPE' ] = $aFieldsDel [ 'DEL_TYPE' ];
$aData [ 'DEL_PRIORITY' ] = $aFieldsDel [ 'DEL_PRIORITY' ];
$aData [ 'DEL_DELEGATE_DATE' ] = $aFieldsDel [ 'DEL_DELEGATE_DATE' ];
$aData [ 'USR_UID' ] = $newUserUID ;
$aData [ 'DEL_INIT_DATE' ] = null ;
$aData [ 'DEL_FINISH_DATE' ] = null ;
$oAppDelegation -> update ( $aData );
$oAppThread = new AppThread ();
$oAppThread -> update ( array ( 'APP_UID' => $sApplicationUID , 'APP_THREAD_INDEX' => $aFieldsDel [ 'DEL_THREAD' ], 'DEL_INDEX' => $iIndex ));
//Save in APP_DELAY
$oApplication = new Application ();
$aFields = $oApplication -> Load ( $sApplicationUID );
$aData [ 'PRO_UID' ] = $aFieldsDel [ 'PRO_UID' ];
$aData [ 'APP_UID' ] = $sApplicationUID ;
$aData [ 'APP_THREAD_INDEX' ] = $aFieldsDel [ 'DEL_THREAD' ];
$aData [ 'APP_DEL_INDEX' ] = $iDelegation ;
$aData [ 'APP_TYPE' ] = ( $sType != '' ? $sType : 'REASSIGN' );
$aData [ 'APP_STATUS' ] = $aFields [ 'APP_STATUS' ];
$aData [ 'APP_DELEGATION_USER' ] = $sUserUID ;
$aData [ 'APP_ENABLE_ACTION_USER' ] = $sUserUID ;
$aData [ 'APP_ENABLE_ACTION_DATE' ] = date ( 'Y-m-d H:i:s' );
$oAppDelay = new AppDelay ();
$oAppDelay -> create ( $aData );
return true ;
}
/*
* get all dynaforms that they have send it
*
* @ name getAllDynaformsStepsToRevise
* @ param string $APP_UID
* @ return object
*/
function getAllDynaformsStepsToRevise ( $APP_UID ) {
$aCase = $this -> loadCase ( $APP_UID );
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_UID );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: PRO_UID );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_TYPE_OBJ );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_UID_OBJ );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_POSITION );
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $aCase [ 'PRO_UID' ]);
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , 'DYNAFORM' );
$oCriteria -> addAscendingOrderByColumn ( StepSupervisorPeer :: STEP_POSITION );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
return $oDataset ;
}
/*
* get all inputs that they have send it
*
* @ name getAllInputsStepsToRevise
* @ param string $APP_UID
* @ return object
*/
function getAllInputsStepsToRevise ( $APP_UID ) {
$aCase = $this -> loadCase ( $APP_UID );
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_UID );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: PRO_UID );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_TYPE_OBJ );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_UID_OBJ );
$oCriteria -> addSelectColumn ( StepSupervisorPeer :: STEP_POSITION );
$oCriteria -> add ( StepSupervisorPeer :: PRO_UID , $aCase [ 'PRO_UID' ]);
$oCriteria -> add ( StepSupervisorPeer :: STEP_TYPE_OBJ , 'INPUT_DOCUMENT' );
$oCriteria -> addAscendingOrderByColumn ( StepSupervisorPeer :: STEP_POSITION );
$oDataset = StepSupervisorPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
return $oDataset ;
}
/*
* get all upload document that they have send it
*
* @ name getAllUploadedDocumentsCriteria
* @ param string $APP_UID
* @ return object
*/
function getAllUploadedDocumentsCriteria ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID ) {
//verifica si existe la tabla OBJECT_PERMISSION
$this -> verifyTable ();
$listing = false ;
$oPluginRegistry = & PMPluginRegistry :: getSingleton ();
if ( $oPluginRegistry -> existsTrigger ( PM_CASE_DOCUMENT_LIST )) {
$folderData = new folderData ( null , null , $sApplicationUID , null , $sUserUID );
$folderData -> PMType = " INPUT " ;
$folderData -> returnList = true ;
//$oPluginRegistry = & PMPluginRegistry::getSingleton();
$listing = $oPluginRegistry -> executeTriggers ( PM_CASE_DOCUMENT_LIST , $folderData );
}
$aObjectPermissions = $this -> getAllObjects ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID );
if ( ! is_array ( $aObjectPermissions )) {
$aObjectPermissions = array ( 'DYNAFORMS' => array ( - 1 ), 'INPUT_DOCUMENTS' => array ( - 1 ), 'OUTPUT_DOCUMENTS' => array ( - 1 ));
}
if ( ! isset ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
}
}
$aDelete = $this -> getAllObjectsFrom ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID , 'DELETE' );
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , array ( 'INPUT' ), Criteria :: IN );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
//$oCriteria->add(AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], Criteria::IN);
$oCriteria -> add ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: APP_DOC_UID , $aObjectPermissions [ 'INPUT_DOCUMENTS' ], Criteria :: IN ) -> addOr ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: USR_UID , array ( $sUserUID , '-1' ), Criteria :: IN )));
$aConditions = array ();
$aConditions [] = array ( AppDocumentPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDocumentPeer :: DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$oCriteria -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aInputDocuments = array ();
$aInputDocuments [] = array ( 'APP_DOC_UID' => 'char' , 'DOC_UID' => 'char' , 'APP_DOC_COMMENT' => 'char' , 'APP_DOC_FILENAME' => 'char' , 'APP_DOC_INDEX' => 'integer' );
$oUser = new Users ();
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
}
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$lastVersion = $oAppDocument -> getLastAppDocVersion ( $aRow [ 'APP_DOC_UID' ], $sApplicationUID );
try {
$aAux1 = $oUser -> load ( $aAux [ 'USR_UID' ]);
$sUser = $aAux1 [ 'USR_FIRSTNAME' ] . ' ' . $aAux1 [ 'USR_LASTNAME' ];
} catch ( Exception $oException ) {
//$sUser = '(USER DELETED)';
$sUser = '***' ;
}
$aFields = array ( 'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ], 'DOC_UID' => $aAux [ 'DOC_UID' ], 'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ], 'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ], 'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ], 'TYPE' => $aAux [ 'APP_DOC_TYPE' ], 'ORIGIN' => $aTask [ 'TAS_TITLE' ], 'CREATE_DATE' => $aAux [ 'APP_DOC_CREATE_DATE' ], 'CREATED_BY' => $sUser );
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'POSITION' ] = $_SESSION [ 'STEP_POSITION' ];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
if ( in_array ( $aRow [ 'APP_DOC_UID' ], $aDelete [ 'INPUT_DOCUMENTS' ])) {
$aFields [ 'ID_DELETE' ] = G :: LoadTranslation ( 'ID_DELETE' );
}
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_DOWNLOAD' );
$aFields [ 'DOWNLOAD_LINK' ] = " cases_ShowDocument?a= " . $aRow [ 'APP_DOC_UID' ] . " &v= " . $aRow [ 'DOC_VERSION' ];
$aFields [ 'DOC_VERSION' ] = $aRow [ 'DOC_VERSION' ];
if ( is_array ( $listing ))
foreach ( $listing as $folderitem ) {
if ( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) {
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' );
$aFields [ 'DOWNLOAD_LINK' ] = $folderitem -> downloadScript ;
continue ;
}
}
if ( $lastVersion == $aRow [ 'DOC_VERSION' ]) { //Show only last version
$aInputDocuments [] = $aFields ;
}
$oDataset -> next ();
}
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , array ( 'ATTACHED' ), Criteria :: IN );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> add ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: APP_DOC_UID , $aObjectPermissions [ 'INPUT_DOCUMENTS' ], Criteria :: IN ) -> addOr ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: USR_UID , array ( $sUserUID , '-1' ), Criteria :: IN )));
$aConditions = array ();
$aConditions [] = array ( AppDocumentPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDocumentPeer :: DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$oCriteria -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
}
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$lastVersion = $oAppDocument -> getLastAppDocVersion ( $aRow [ 'APP_DOC_UID' ], $sApplicationUID );
try {
$aAux1 = $oUser -> load ( $aAux [ 'USR_UID' ]);
$sUser = $aAux1 [ 'USR_FIRSTNAME' ] . ' ' . $aAux1 [ 'USR_LASTNAME' ];
} catch ( Exception $oException ) {
$sUser = '***' ;
}
$aFields = array ( 'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ], 'DOC_UID' => $aAux [ 'DOC_UID' ], 'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ], 'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ], 'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ], 'TYPE' => $aAux [ 'APP_DOC_TYPE' ], 'ORIGIN' => $aTask [ 'TAS_TITLE' ], 'CREATE_DATE' => $aAux [ 'APP_DOC_CREATE_DATE' ], 'CREATED_BY' => $sUser );
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'POSITION' ] = $_SESSION [ 'STEP_POSITION' ];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
if ( in_array ( $aRow [ 'APP_DOC_UID' ], $aDelete [ 'INPUT_DOCUMENTS' ])) {
$aFields [ 'ID_DELETE' ] = G :: LoadTranslation ( 'ID_DELETE' );
}
$aFields [ 'DOWNLOAD_LABEL' ] = G :: LoadTranslation ( 'ID_DOWNLOAD' );
$aFields [ 'DOWNLOAD_LINK' ] = " cases_ShowDocument?a= " . $aRow [ 'APP_DOC_UID' ];
if ( $lastVersion == $aRow [ 'DOC_VERSION' ]) { //Show only last version
$aInputDocuments [] = $aFields ;
}
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'inputDocuments' ] = $aInputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'inputDocuments' );
$oCriteria -> addDescendingOrderByColumn ( 'CREATE_DATE' );
return $oCriteria ;
}
/*
* get all generate document
*
* @ name getAllGeneratedDocumentsCriteria
* @ param string $sProcessUID
* @ param string $sApplicationUID
* @ param string $sTasKUID
* @ param string $sUserUID
* @ return object
*/
function getAllGeneratedDocumentsCriteria ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID ) {
//verifica si la tabla OBJECT_PERMISSION
$this -> verifyTable ();
$listing = false ;
$oPluginRegistry = & PMPluginRegistry :: getSingleton ();
if ( $oPluginRegistry -> existsTrigger ( PM_CASE_DOCUMENT_LIST )) {
$folderData = new folderData ( null , null , $sApplicationUID , null , $sUserUID );
$folderData -> PMType = " OUTPUT " ;
$folderData -> returnList = true ;
//$oPluginRegistry = & PMPluginRegistry::getSingleton();
$listing = $oPluginRegistry -> executeTriggers ( PM_CASE_DOCUMENT_LIST , $folderData );
}
$aObjectPermissions = $this -> getAllObjects ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID );
if ( ! is_array ( $aObjectPermissions )) {
$aObjectPermissions = array ( 'DYNAFORMS' => array ( - 1 ), 'INPUT_DOCUMENTS' => array ( - 1 ), 'OUTPUT_DOCUMENTS' => array ( - 1 ));
}
if ( ! isset ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
}
}
$aDelete = $this -> getAllObjectsFrom ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID , 'DELETE' );
2012-02-10 09:47:20 -04:00
2010-12-02 23:34:41 +00:00
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , 'OUTPUT' );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
//$oCriteria->add(AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['OUTPUT_DOCUMENTS'], Criteria::IN);
$oCriteria -> add ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: APP_DOC_UID , $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ], Criteria :: IN ) -> addOr ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: USR_UID , $sUserUID , Criteria :: EQUAL )));
$aConditions = array ();
$aConditions [] = array ( AppDocumentPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDocumentPeer :: DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$oCriteria -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aOutputDocuments = array ();
$aOutputDocuments [] = array ( 'APP_DOC_UID' => 'char' , 'DOC_UID' => 'char' , 'APP_DOC_COMMENT' => 'char' , 'APP_DOC_FILENAME' => 'char' , 'APP_DOC_INDEX' => 'integer' );
$oUser = new Users ();
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
}
$lastVersion = $oAppDocument -> getLastDocVersion ( $aRow [ 'DOC_UID' ], $sApplicationUID );
if ( $lastVersion == $aRow [ 'DOC_VERSION' ]) { //Only show last document Version
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
//Get output Document information
$oOutputDocument = new OutputDocument ();
$aGields = $oOutputDocument -> load ( $aRow [ 'DOC_UID' ]);
//OUTPUTDOCUMENT
$outDocTitle = $aGields [ 'OUT_DOC_TITLE' ];
switch ( $aGields [ 'OUT_DOC_GENERATE' ]) {
//G::LoadTranslation(ID_DOWNLOAD)
case " PDF " :
$fileDoc = 'javascript:alert("NO DOC")' ;
$fileDocLabel = " " ;
$filePdf = 'cases_ShowOutputDocument?a=' . $aRow [ 'APP_DOC_UID' ] . '&v=' . $aRow [ 'DOC_VERSION' ] . '&ext=pdf&random=' . rand ();
$filePdfLabel = " .pdf " ;
if ( is_array ( $listing ))
foreach ( $listing as $folderitem ) {
if (( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) && ( $folderitem -> type == " PDF " )) {
$filePdfLabel = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' ) . " .pdf " ;
$filePdf = $folderitem -> downloadScript ;
continue ;
}
}
break ;
case " DOC " :
$fileDoc = 'cases_ShowOutputDocument?a=' . $aRow [ 'APP_DOC_UID' ] . '&v=' . $aRow [ 'DOC_VERSION' ] . '&ext=doc&random=' . rand ();
$fileDocLabel = " .doc " ;
$filePdf = 'javascript:alert("NO PDF")' ;
$filePdfLabel = " " ;
if ( is_array ( $listing ))
foreach ( $listing as $folderitem ) {
if (( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) && ( $folderitem -> type == " DOC " )) {
$fileDocLabel = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' ) . " .doc " ;
$fileDoc = $folderitem -> downloadScript ;
continue ;
}
}
break ;
case " BOTH " :
$fileDoc = 'cases_ShowOutputDocument?a=' . $aRow [ 'APP_DOC_UID' ] . '&v=' . $aRow [ 'DOC_VERSION' ] . '&ext=doc&random=' . rand ();
$fileDocLabel = " .doc " ;
if ( is_array ( $listing ))
foreach ( $listing as $folderitem ) {
if (( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) && ( $folderitem -> type == " DOC " )) {
$fileDocLabel = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' ) . " .doc " ;
$fileDoc = $folderitem -> downloadScript ;
continue ;
}
}
$filePdf = 'cases_ShowOutputDocument?a=' . $aRow [ 'APP_DOC_UID' ] . '&v=' . $aRow [ 'DOC_VERSION' ] . '&ext=pdf&random=' . rand ();
$filePdfLabel = " .pdf " ;
if ( is_array ( $listing ))
foreach ( $listing as $folderitem ) {
if (( $folderitem -> filename == $aRow [ 'APP_DOC_UID' ]) && ( $folderitem -> type == " PDF " )) {
$filePdfLabel = G :: LoadTranslation ( 'ID_GET_EXTERNAL_FILE' ) . " .pdf " ;
$filePdf = $folderitem -> downloadScript ;
continue ;
}
}
break ;
}
try {
$aAux1 = $oUser -> load ( $aAux [ 'USR_UID' ]);
$sUser = $aAux1 [ 'USR_FIRSTNAME' ] . ' ' . $aAux1 [ 'USR_LASTNAME' ];
} catch ( Exception $oException ) {
$sUser = '(USER DELETED)' ;
}
//if both documents were generated, we choose the pdf one, only if doc was generate then choose the doc file.
$firstDocLink = $filePdf ;
$firstDocLabel = $filePdfLabel ;
if ( $aGields [ 'OUT_DOC_GENERATE' ] == 'DOC' ) {
$firstDocLink = $fileDoc ;
$firstDocLabel = $fileDocLabel ;
}
$aFields = array ( 'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ],
'DOC_UID' => $aAux [ 'DOC_UID' ],
'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ],
'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ],
'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ],
'ORIGIN' => $aTask [ 'TAS_TITLE' ],
'CREATE_DATE' => $aAux [ 'APP_DOC_CREATE_DATE' ],
'CREATED_BY' => $sUser ,
'FILEDOC' => $fileDoc ,
'FILEPDF' => $filePdf ,
'FILEDOCLABEL' => $fileDocLabel ,
'FILEPDFLABEL' => $filePdfLabel ,
'OUTDOCTITLE' => $outDocTitle ,
'DOC_VERSION' => $aAux [ 'DOC_VERSION' ],
'TYPE' => $aAux [ 'APP_DOC_TYPE' ] . ' ' . $aGields [ 'OUT_DOC_GENERATE' ],
'DOWNLOAD_LINK' => $firstDocLink ,
'DOWNLOAD_FILE' => $aAux [ 'APP_DOC_FILENAME' ] . $firstDocLabel
);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
$aFields [ 'POSITION' ] = $_SESSION [ 'STEP_POSITION' ];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
2011-06-02 17:31:43 -04:00
if ( in_array ( $aRow [ 'APP_DOC_UID' ], $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
2012-02-10 09:47:20 -04:00
if ( in_array ( $aRow [ 'APP_DOC_UID' ], $aDelete [ 'OUTPUT_DOCUMENTS' ]))
$aFields [ 'ID_DELETE' ] = G :: LoadTranslation ( 'ID_DELETE' );
2010-12-02 23:34:41 +00:00
}
$aOutputDocuments [] = $aFields ;
}
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'outputDocuments' ] = $aOutputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'outputDocuments' );
$oCriteria -> addDescendingOrderByColumn ( 'CREATE_DATE' );
return $oCriteria ;
}
/*
* get all dynaforms in a task
*
* @ name getallDynaformsCriteria
* @ param string $sProcessUID
* @ param string $sApplicationUID
* @ param string $sTasKUID
* @ param string $sUserUID
* @ return object
*/
function getallDynaformsCriteria ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID ) {
//check OBJECT_PERMISSION table
$this -> verifyTable ();
$aObjectPermissions = $this -> getAllObjects ( $sProcessUID , $sApplicationUID , $sTasKUID , $sUserUID );
if ( ! is_array ( $aObjectPermissions )) {
$aObjectPermissions = array ( 'DYNAFORMS' => array ( - 1 ), 'INPUT_DOCUMENTS' => array ( - 1 ), 'OUTPUT_DOCUMENTS' => array ( - 1 ));
}
if ( ! isset ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'DYNAFORMS' ])) {
$aObjectPermissions [ 'DYNAFORMS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'INPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'INPUT_DOCUMENTS' ] = array ( - 1 );
}
}
if ( ! isset ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
} else {
if ( ! is_array ( $aObjectPermissions [ 'OUTPUT_DOCUMENTS' ])) {
$aObjectPermissions [ 'OUTPUT_DOCUMENTS' ] = array ( - 1 );
}
}
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ApplicationPeer :: APP_UID , $sApplicationUID );
$oCriteria -> addJoin ( ApplicationPeer :: PRO_UID , StepPeer :: PRO_UID );
$oCriteria -> addJoin ( StepPeer :: STEP_UID_OBJ , DynaformPeer :: DYN_UID );
$oCriteria -> add ( StepPeer :: STEP_TYPE_OBJ , 'DYNAFORM' );
$oCriteria -> add ( StepPeer :: STEP_UID_OBJ , $aObjectPermissions [ 'DYNAFORMS' ], Criteria :: IN );
2011-01-04 20:37:31 +00:00
2011-01-19 16:06:11 +00:00
//These fields are missing now is completed
$oCriteria -> addSelectColumn ( DynaformPeer :: DYN_UID );
$oCriteria -> addSelectColumn ( DynaformPeer :: DYN_TYPE );
$oCriteria -> addSelectColumn ( DynaformPeer :: DYN_FILENAME );
$oCriteria -> addSelectColumn ( ApplicationPeer :: PRO_UID );
2011-01-04 20:37:31 +00:00
///-- Adding column STEP_POSITION for standardization
$oCriteria -> addSelectColumn ( StepPeer :: STEP_POSITION );
2010-12-02 23:34:41 +00:00
$oCriteria -> addAscendingOrderByColumn ( StepPeer :: STEP_POSITION );
$oCriteria -> setDistinct ();
2011-06-01 15:53:57 -04:00
2010-12-02 23:34:41 +00:00
$oDataset = DynaformPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aInputDocuments = array ();
$aInputDocuments [] = array (
'DYN_TITLE' => 'char'
);
while ( $aRow = $oDataset -> getRow ()) {
$o = new Dynaform ();
$o -> setDynUid ( $aRow [ 'DYN_UID' ]);
$aFields [ 'DYN_TITLE' ] = $o -> getDynTitle ();
$aFields [ 'DYN_UID' ] = $aRow [ 'DYN_UID' ];
$aFields [ 'EDIT' ] = G :: LoadTranslation ( 'ID_EDIT' );
$aFields [ 'PRO_UID' ] = $sProcessUID ;
$aFields [ 'APP_UID' ] = $sApplicationUID ;
$aFields [ 'TAS_UID' ] = $sTasKUID ;
$aInputDocuments [] = $aFields ;
$oDataset -> next ();
2011-06-01 15:53:57 -04:00
}
$distinctArray = $aInputDocuments ;
$distinctArrayBase = $aInputDocuments ;
$distinctOriginal = array ();
foreach ( $distinctArray as $distinctArrayKey => $distinctArrayValue ) {
$distinctOriginalPush = 1 ;
foreach ( $distinctOriginal as $distinctOriginalKey => $distinctOriginalValue ) {
if ( $distinctArrayValue == $distinctOriginalValue ){
$distinctOriginalPush = 0 ;
}
}
if ( $distinctOriginalPush == 1 ){
$distinctOriginal [] = $distinctArrayValue ;
}
}
$aInputDocuments = $distinctOriginal ;
2010-12-02 23:34:41 +00:00
global $_DBArray ;
$_DBArray [ 'Dynaforms' ] = $aInputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'Dynaforms' );
2011-06-01 15:53:57 -04:00
$oCriteria -> setDistinct ();
2010-12-02 23:34:41 +00:00
//$oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_CREATE_DATE);
return $oCriteria ;
}
/*
* This function sends notifications in a task
*
* @ name sendNotifications
* @ param string $sCurrentTask
* @ param array $aTasks
* @ param array $aFields
* @ param string $sApplicationUID
* @ param string $iDelegation
* @ param string $sFrom
* @ return void
*/
function sendNotifications ( $sCurrentTask , $aTasks , $aFields , $sApplicationUID , $iDelegation , $sFrom = '' ) {
try {
$oConfiguration = new Configuration ();
$sDelimiter = DBAdapter :: getStringDelimiter ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ConfigurationPeer :: CFG_UID , 'Emails' );
$oCriteria -> add ( ConfigurationPeer :: OBJ_UID , '' );
$oCriteria -> add ( ConfigurationPeer :: PRO_UID , '' );
$oCriteria -> add ( ConfigurationPeer :: USR_UID , '' );
$oCriteria -> add ( ConfigurationPeer :: APP_UID , '' );
if ( ConfigurationPeer :: doCount ( $oCriteria ) == 0 ) {
$oConfiguration -> create ( array ( 'CFG_UID' => 'Emails' , 'OBJ_UID' => '' , 'CFG_VALUE' => '' , 'PRO_UID' => '' , 'USR_UID' => '' , 'APP_UID' => '' ));
$aConfiguration = array ();
} else {
$aConfiguration = $oConfiguration -> load ( 'Emails' , '' , '' , '' , '' );
if ( $aConfiguration [ 'CFG_VALUE' ] != '' ) {
$aConfiguration = unserialize ( $aConfiguration [ 'CFG_VALUE' ]);
2011-12-22 10:16:52 -04:00
$passwd = $aConfiguration [ 'MESS_PASSWORD' ];
if ( strpos ( $passwd , 'hush:' ) !== false ){
list ( $hush , $pass ) = explode ( " : " , $passwd );
$aConfiguration [ 'MESS_PASSWORD' ] = G :: decrypt ( $pass , 'EMAILENCRYPT' );
}
2010-12-02 23:34:41 +00:00
} else {
$aConfiguration = array ();
}
}
2011-06-30 14:59:40 -04:00
if ( ! isset ( $aConfiguration [ 'MESS_ENABLED' ]) || $aConfiguration [ 'MESS_ENABLED' ] != '1' ) {
return false ;
}
//Send derivation notification - Start
$oTask = new Task ();
$aTaskInfo = $oTask -> load ( $sCurrentTask );
if ( $aTaskInfo [ 'TAS_SEND_LAST_EMAIL' ] != 'TRUE' ) {
return false ;
}
if ( $sFrom == '' ) {
$sFrom = '"ProcessMaker"' ;
}
if (( $aConfiguration [ 'MESS_ENGINE' ] != 'MAIL' ) && ( $aConfiguration [ 'MESS_ACCOUNT' ] != '' )) {
$sFrom .= ' <' . $aConfiguration [ 'MESS_ACCOUNT' ] . '>' ;
} else {
if (( $aConfiguration [ 'MESS_ENGINE' ] == 'MAIL' )) {
$sFrom .= ' <info@' . gethostbyaddr ( '127.0.0.1' ) . '>' ;
} else {
if ( $aConfiguration [ 'MESS_SERVER' ] != '' ) {
if (( $sAux = @ gethostbyaddr ( $aConfiguration [ 'MESS_SERVER' ]))) {
$sFrom .= ' <info@' . $sAux . '>' ;
2010-12-02 23:34:41 +00:00
} else {
2011-06-30 14:59:40 -04:00
$sFrom .= ' <info@' . $aConfiguration [ 'MESS_SERVER' ] . '>' ;
2010-12-02 23:34:41 +00:00
}
2011-04-25 09:58:04 -04:00
} else {
2011-06-30 14:59:40 -04:00
$sFrom .= ' <info@processmaker.com>' ;
2011-04-25 09:58:04 -04:00
}
2011-06-30 14:59:40 -04:00
}
}
if ( isset ( $aTaskInfo [ 'TAS_DEF_SUBJECT_MESSAGE' ]) && $aTaskInfo [ 'TAS_DEF_SUBJECT_MESSAGE' ] != '' ) {
$sSubject = G :: replaceDataField ( $aTaskInfo [ 'TAS_DEF_SUBJECT_MESSAGE' ], $aFields );
} else {
$sSubject = G :: LoadTranslation ( 'ID_MESSAGE_SUBJECT_DERIVATION' );
}
2011-04-25 09:58:04 -04:00
2011-06-30 14:59:40 -04:00
//erik: new behaviour for messages
G :: loadClass ( 'configuration' );
$oConf = new Configurations ;
$oConf -> loadConfig ( $x , 'TAS_EXTRA_PROPERTIES' , $aTaskInfo [ 'TAS_UID' ], '' , '' );
$conf = $oConf -> aConfig ;
if ( isset ( $conf [ 'TAS_DEF_MESSAGE_TYPE' ]) && isset ( $conf [ 'TAS_DEF_MESSAGE_TEMPLATE' ])
&& $conf [ 'TAS_DEF_MESSAGE_TYPE' ] == 'template' && $conf [ 'TAS_DEF_MESSAGE_TEMPLATE' ] != '' ) {
2011-04-25 09:58:04 -04:00
2011-06-30 14:59:40 -04:00
$pathEmail = PATH_DATA_SITE . 'mailTemplates' . PATH_SEP . $aTaskInfo [ 'PRO_UID' ] . PATH_SEP ;
$fileTemplate = $pathEmail . $conf [ 'TAS_DEF_MESSAGE_TEMPLATE' ];
2011-04-25 09:58:04 -04:00
2011-06-30 14:59:40 -04:00
if ( ! file_exists ( $fileTemplate ) ) {
throw new Exception ( " Template file ' $fileTemplate ' does not exist. " );
}
$sBody = G :: replaceDataField ( file_get_contents ( $fileTemplate ), $aFields );
} else {
$sBody = nl2br ( G :: replaceDataField ( $aTaskInfo [ 'TAS_DEF_MESSAGE' ], $aFields ));
}
G :: LoadClass ( 'spool' );
$oUser = new Users ();
foreach ( $aTasks as $aTask ) {
if ( isset ( $aTask [ 'USR_UID' ])) {
$aUser = $oUser -> load ( $aTask [ 'USR_UID' ]);
$sTo = ((( $aUser [ 'USR_FIRSTNAME' ] != '' ) || ( $aUser [ 'USR_LASTNAME' ] != '' )) ? $aUser [ 'USR_FIRSTNAME' ] . ' ' . $aUser [ 'USR_LASTNAME' ] . ' ' : '' ) . '<' . $aUser [ 'USR_EMAIL' ] . '>' ;
$oSpool = new spoolRun ();
$oSpool -> setConfig ( array ( 'MESS_ENGINE' => $aConfiguration [ 'MESS_ENGINE' ],
'MESS_SERVER' => $aConfiguration [ 'MESS_SERVER' ],
'MESS_PORT' => $aConfiguration [ 'MESS_PORT' ],
'MESS_ACCOUNT' => $aConfiguration [ 'MESS_ACCOUNT' ],
'MESS_PASSWORD' => $aConfiguration [ 'MESS_PASSWORD' ],
'SMTPAuth' => $aConfiguration [ 'MESS_RAUTH' ] == '1' ? true : false ,
'SMTPSecure' => isset ( $aConfiguration [ 'SMTPSecure' ]) ? $aConfiguration [ 'SMTPSecure' ] : ''
));
$oSpool -> create ( array ( 'msg_uid' => '' ,
'app_uid' => $sApplicationUID ,
'del_index' => $iDelegation ,
'app_msg_type' => 'DERIVATION' ,
'app_msg_subject' => $sSubject ,
'app_msg_from' => $sFrom ,
'app_msg_to' => $sTo ,
'app_msg_body' => $sBody ,
'app_msg_cc' => '' ,
'app_msg_bcc' => '' ,
'app_msg_attach' => '' ,
'app_msg_template' => '' ,
'app_msg_status' => 'pending'
));
if (( $aConfiguration [ 'MESS_BACKGROUND' ] == '' ) || ( $aConfiguration [ 'MESS_TRY_SEND_INMEDIATLY' ] == '1' )) {
$oSpool -> sendMail ();
2010-12-02 23:34:41 +00:00
}
}
}
2011-06-30 14:59:40 -04:00
//Send derivation notification - End
2010-12-02 23:34:41 +00:00
} catch ( Exception $oException ) {
throw $oException ;
}
}
/**
* Obtain all user permits for Dynaforms , Input and output documents
*
2011-02-03 11:13:21 +00:00
* function getAllObjects ( $PRO_UID , $APP_UID , $TAS_UID , $USR_UID )
2010-12-02 23:34:41 +00:00
* @ author Erik Amaru Ortiz < erik @ colosa . com >
* @ access public
* @ param Process ID , Application ID , Task ID and User ID
* @ return Array within all user permitions all objects ' types
*/
function getAllObjects ( $PRO_UID , $APP_UID , $TAS_UID = '' , $USR_UID ) {
2012-02-10 09:47:20 -04:00
$ACTIONS = Array ( 'VIEW' , 'BLOCK' , 'DELETE' ); //TO COMPLETE
2010-12-02 23:34:41 +00:00
$MAIN_OBJECTS = Array ();
$RESULT_OBJECTS = Array ();
foreach ( $ACTIONS as $action ) {
$MAIN_OBJECTS [ $action ] = $this -> getAllObjectsFrom ( $PRO_UID , $APP_UID , $TAS_UID , $USR_UID , $action );
}
/* ADDITIONAL OPERATIONS */
/* * * BETWEN VIEW AND BLOCK** */
$RESULT_OBJECTS [ 'DYNAFORMS' ] = G :: arrayDiff ( $MAIN_OBJECTS [ 'VIEW' ][ 'DYNAFORMS' ], $MAIN_OBJECTS [ 'BLOCK' ][ 'DYNAFORMS' ]);
$RESULT_OBJECTS [ 'INPUT_DOCUMENTS' ] = G :: arrayDiff ( $MAIN_OBJECTS [ 'VIEW' ][ 'INPUT_DOCUMENTS' ], $MAIN_OBJECTS [ 'BLOCK' ][ 'INPUT_DOCUMENTS' ]);
2012-02-10 09:47:20 -04:00
$RESULT_OBJECTS [ 'OUTPUT_DOCUMENTS' ] = array_merge_recursive ( G :: arrayDiff ( $MAIN_OBJECTS [ 'VIEW' ][ 'OUTPUT_DOCUMENTS' ], $MAIN_OBJECTS [ 'BLOCK' ][ 'OUTPUT_DOCUMENTS' ]) , G :: arrayDiff ( $MAIN_OBJECTS [ 'DELETE' ][ 'OUTPUT_DOCUMENTS' ], $MAIN_OBJECTS [ 'BLOCK' ][ 'OUTPUT_DOCUMENTS' ]));
2010-12-02 23:34:41 +00:00
array_push ( $RESULT_OBJECTS [ 'DYNAFORMS' ], - 1 );
array_push ( $RESULT_OBJECTS [ 'INPUT_DOCUMENTS' ], - 1 );
array_push ( $RESULT_OBJECTS [ 'OUTPUT_DOCUMENTS' ], - 1 );
return $RESULT_OBJECTS ;
}
/**
* Obtain all user permits for Dynaforms , Input and output documents from some action [ VIEW , BLOCK , etc ... ]
*
2011-02-03 11:13:21 +00:00
* function getAllObjectsFrom ( $PRO_UID , $APP_UID , $TAS_UID , $USR_UID , $ACTION )
2010-12-02 23:34:41 +00:00
* @ author Erik Amaru Ortiz < erik @ colosa . com >
* @ access public
* @ param Process ID , Application ID , Task ID , User ID , Action
* @ return Array within all user permitions all objects ' types
*/
function getAllObjectsFrom ( $PRO_UID , $APP_UID , $TAS_UID = '' , $USR_UID , $ACTION = '' ) {
$aCase = $this -> loadCase ( $APP_UID );
//if($aCase)
$USER_PERMISSIONS = Array ();
$GROUP_PERMISSIONS = Array ();
$RESULT = Array ( " DYNAFORM " => Array (), " INPUT " => Array (), " OUTPUT " => Array ());
//permissions per user
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( $oCriteria -> getNewCriterion ( ObjectPermissionPeer :: USR_UID , $USR_UID ) -> addOr ( $oCriteria -> getNewCriterion ( ObjectPermissionPeer :: USR_UID , '' )));
$oCriteria -> add ( ObjectPermissionPeer :: PRO_UID , $PRO_UID );
$oCriteria -> add ( ObjectPermissionPeer :: OP_ACTION , $ACTION );
$oCriteria -> add ( $oCriteria -> getNewCriterion ( ObjectPermissionPeer :: TAS_UID , $TAS_UID ) -> addOr ( $oCriteria -> getNewCriterion ( ObjectPermissionPeer :: TAS_UID , '' ) -> addOr ( $oCriteria -> getNewCriterion ( ObjectPermissionPeer :: OP_CASE_STATUS , '' )) -> addOr ( $oCriteria -> getNewCriterion ( ObjectPermissionPeer :: OP_CASE_STATUS , 'ALL' ))));
$rs = ObjectPermissionPeer :: doSelectRS ( $oCriteria );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
while ( $row = $rs -> getRow ()) {
if ((( $aCase [ 'APP_STATUS' ] == $row [ 'OP_CASE_STATUS' ]) || ( $row [ 'OP_CASE_STATUS' ] == '' ) || ( $row [ 'OP_CASE_STATUS' ] == 'ALL' )) || ( $row [ 'OP_CASE_STATUS' ] == '' )) {
array_push ( $USER_PERMISSIONS , $row );
}
$rs -> next ();
}
//permissions per group
G :: loadClass ( 'groups' );
$gr = new Groups ();
$records = $gr -> getActiveGroupsForAnUser ( $USR_UID );
foreach ( $records as $group ) {
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ObjectPermissionPeer :: USR_UID , $group );
$oCriteria -> add ( ObjectPermissionPeer :: PRO_UID , $PRO_UID );
$oCriteria -> add ( ObjectPermissionPeer :: OP_ACTION , $ACTION );
$oCriteria -> add ( $oCriteria -> getNewCriterion ( ObjectPermissionPeer :: TAS_UID , $TAS_UID ) -> addOr ( $oCriteria -> getNewCriterion ( ObjectPermissionPeer :: TAS_UID , '' ) -> addOr ( $oCriteria -> getNewCriterion ( ObjectPermissionPeer :: OP_CASE_STATUS , '' )) -> addOr ( $oCriteria -> getNewCriterion ( ObjectPermissionPeer :: OP_CASE_STATUS , 'ALL' ))));
$rs = ObjectPermissionPeer :: doSelectRS ( $oCriteria );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
while ( $rs -> next ()) {
array_push ( $GROUP_PERMISSIONS , $rs -> getRow ());
}
}
$PERMISSIONS = array_merge ( $USER_PERMISSIONS , $GROUP_PERMISSIONS );
foreach ( $PERMISSIONS as $row ) {
$USER = $row [ 'USR_UID' ];
$USER_RELATION = $row [ 'OP_USER_RELATION' ];
$TASK_SOURCE = $row [ 'OP_TASK_SOURCE' ];
$PARTICIPATE = $row [ 'OP_PARTICIPATE' ];
$O_TYPE = $row [ 'OP_OBJ_TYPE' ];
$O_UID = $row [ 'OP_OBJ_UID' ];
$ACTION = $row [ 'OP_ACTION' ];
$CASE_STATUS = $row [ 'OP_CASE_STATUS' ];
// here!,. we should verify $PARTICIPATE
$sw_participate = false ; // must be false for default
if (( $row [ 'OP_CASE_STATUS' ] != 'COMPLETED' ) && ( $row [ 'OP_CASE_STATUS' ] != '' )) {
if ( $PARTICIPATE == 1 ) {
$oCriteriax = new Criteria ( 'workflow' );
$oCriteriax -> add ( AppDelegationPeer :: USR_UID , $USR_UID );
$oCriteriax -> add ( AppDelegationPeer :: APP_UID , $APP_UID );
if ( AppDelegationPeer :: doCount ( $oCriteriax ) == 0 ) {
$sw_participate = true ;
}
}
}
if ( ! $sw_participate ) {
switch ( $O_TYPE ) {
case 'ANY' :
//for dynaforms
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ApplicationPeer :: APP_UID , $APP_UID );
$oCriteria -> addJoin ( ApplicationPeer :: PRO_UID , StepPeer :: PRO_UID );
$oCriteria -> addJoin ( StepPeer :: STEP_UID_OBJ , DynaformPeer :: DYN_UID );
if ( $aCase [ 'APP_STATUS' ] != 'COMPLETED' ) {
if ( $TASK_SOURCE != '' && $TASK_SOURCE != " 0 " && $TASK_SOURCE != 0 ) {
$oCriteria -> add ( StepPeer :: TAS_UID , $TASK_SOURCE );
}
}
$oCriteria -> add ( StepPeer :: STEP_TYPE_OBJ , 'DYNAFORM' );
$oCriteria -> addAscendingOrderByColumn ( StepPeer :: STEP_POSITION );
$oCriteria -> setDistinct ();
$oDataset = DynaformPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
while ( $aRow = $oDataset -> getRow ()) {
if ( ! in_array ( $aRow [ 'DYN_UID' ], $RESULT [ 'DYNAFORM' ])) {
array_push ( $RESULT [ 'DYNAFORM' ], $aRow [ 'DYN_UID' ]);
}
$oDataset -> next ();
}
//inputs
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_UID );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_TYPE );
$oCriteria -> add ( AppDelegationPeer :: APP_UID , $APP_UID );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $PRO_UID );
if ( $aCase [ 'APP_STATUS' ] != 'COMPLETED' ) {
if ( $TASK_SOURCE != '' && $TASK_SOURCE != " 0 " && $TASK_SOURCE != 0 ) {
$oCriteria -> add ( AppDelegationPeer :: TAS_UID , $TASK_SOURCE );
}
}
$oCriteria -> add ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: APP_DOC_TYPE , 'INPUT' ) -> addOr ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: APP_DOC_TYPE , 'OUTPUT' )) -> 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 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
while ( $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 ();
}
break ;
case 'DYNAFORM' :
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( ApplicationPeer :: APP_UID , $APP_UID );
if ( $aCase [ 'APP_STATUS' ] != 'COMPLETED' ) {
if ( $TASK_SOURCE != '' && $TASK_SOURCE != " 0 " ) {
$oCriteria -> add ( StepPeer :: TAS_UID , $TASK_SOURCE );
}
}
if ( $O_UID != '' ) {
$oCriteria -> add ( DynaformPeer :: DYN_UID , $O_UID );
}
$oCriteria -> addJoin ( ApplicationPeer :: PRO_UID , StepPeer :: PRO_UID );
$oCriteria -> addJoin ( StepPeer :: STEP_UID_OBJ , DynaformPeer :: DYN_UID );
$oCriteria -> add ( StepPeer :: STEP_TYPE_OBJ , 'DYNAFORM' );
$oCriteria -> addAscendingOrderByColumn ( StepPeer :: STEP_POSITION );
$oCriteria -> setDistinct ();
$oDataset = DynaformPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
while ( $aRow = $oDataset -> getRow ()) {
if ( ! in_array ( $aRow [ 'DYN_UID' ], $RESULT [ 'DYNAFORM' ])) {
array_push ( $RESULT [ 'DYNAFORM' ], $aRow [ 'DYN_UID' ]);
}
$oDataset -> next ();
}
break ;
case 'INPUT' :
case 'OUTPUT' :
if ( $row [ 'OP_OBJ_TYPE' ] == 'INPUT' ) {
$obj_type = 'INPUT' ;
} else {
$obj_type = 'OUTPUT' ;
}
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_UID );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_TYPE );
$oCriteria -> add ( AppDelegationPeer :: APP_UID , $APP_UID );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $PRO_UID );
if ( $aCase [ 'APP_STATUS' ] != 'COMPLETED' ) {
if ( $TASK_SOURCE != '' && $TASK_SOURCE != " 0 " && $TASK_SOURCE != 0 ) {
$oCriteria -> add ( AppDelegationPeer :: TAS_UID , $TASK_SOURCE );
}
}
if ( $O_UID != '' ) {
$oCriteria -> add ( AppDocumentPeer :: DOC_UID , $O_UID );
}
if ( $obj_type == 'INPUT' ) {
$oCriteria -> add ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: APP_DOC_TYPE , $obj_type ) -> addOr ( $oCriteria -> getNewCriterion ( AppDocumentPeer :: APP_DOC_TYPE , 'ATTACHED' )));
} else {
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , $obj_type );
}
$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 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
while ( $aRow = $oDataset -> getRow ()) {
if ( ! in_array ( $aRow [ 'APP_DOC_UID' ], $RESULT [ $obj_type ])) {
array_push ( $RESULT [ $obj_type ], $aRow [ 'APP_DOC_UID' ]);
}
$oDataset -> next ();
}
break ;
}
}
}
return Array ( " DYNAFORMS " => $RESULT [ 'DYNAFORM' ], " INPUT_DOCUMENTS " => $RESULT [ 'INPUT' ], " OUTPUT_DOCUMENTS " => $RESULT [ 'OUTPUT' ]);
}
/*
* to check the user External
* @ author Everth The Answer
*
* verifyCaseTracker ( $case , $pin )
* @ access public
* @ param $case , $pin
* @ return Array
*/
function verifyCaseTracker ( $case , $pin ) {
$pin = md5 ( $pin );
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_UID );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_PIN );
$oCriteria -> addSelectColumn ( ApplicationPeer :: PRO_UID );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_PROC_CODE );
//$oCriteria->add(ApplicationPeer::APP_NUMBER, $case);
$oCriteria -> add ( ApplicationPeer :: APP_PROC_CODE , $case );
$oDataset = DynaformPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
$sw = 0 ;
if ( is_array ( $aRow )) {
$PRO_UID = $aRow [ 'PRO_UID' ];
$APP_UID = $aRow [ 'APP_UID' ];
$PIN = $aRow [ 'APP_PIN' ];
} else {
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_UID );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_PIN );
$oCriteria -> addSelectColumn ( ApplicationPeer :: PRO_UID );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$oCriteria -> addSelectColumn ( ApplicationPeer :: APP_PROC_CODE );
$oCriteria -> add ( ApplicationPeer :: APP_NUMBER , $case );
$oDataseti = DynaformPeer :: doSelectRS ( $oCriteria );
$oDataseti -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataseti -> next ();
$aRowi = $oDataseti -> getRow ();
if ( is_array ( $aRowi )) {
$PRO_UID = $aRowi [ 'PRO_UID' ];
$APP_UID = $aRowi [ 'APP_UID' ];
$PIN = $aRowi [ 'APP_PIN' ];
} else {
$sw = 1 ;
}
}
$s = 0 ;
if ( $sw == 1 ) { //it isn't a case
return - 1 ;
} else {
$s ++ ;
}
if ( $PIN != $pin ) //the pin isn't correct
return - 2 ;
else
$s ++ ;
$res = array ();
$res [ 'PRO_UID' ] = $PRO_UID ;
$res [ 'APP_UID' ] = $APP_UID ;
if ( $s == 2 )
return $res ;
}
/*
* funcion permisos , by Everth
*
* @ name Permisos
* @ param string $PRO_UID
* @ return string
*/
function Permisos ( $PRO_UID ) {
$a = 0 ;
$b = 0 ;
$c = 0 ;
$d = 0 ;
$oCaseTracker = new CaseTracker ();
$aCaseTracker = $oCaseTracker -> load ( $PRO_UID );
if ( is_array ( $aCaseTracker )) {
if ( $aCaseTracker [ 'CT_MAP_TYPE' ] != 'NONE' )
$a = 1 ;
$oCriteria = new Criteria ();
$oCriteria -> add ( CaseTrackerObjectPeer :: PRO_UID , $PRO_UID );
if ( CaseTrackerObjectPeer :: doCount ( $oCriteria ) > 0 )
$b = 1 ;
if ( $aCaseTracker [ 'CT_DERIVATION_HISTORY' ] == 1 )
$c = 1 ;
if ( $aCaseTracker [ 'CT_MESSAGE_HISTORY' ] == 1 )
$d = 1 ;
}
return $a . '-' . $b . '-' . $c . '-' . $d ;
}
/*
* This funcion creates a temporally OBJECT_PERMISSION table
* by Everth The Answer
*
* @ name verifyTable
* @ param
* @ return object
*/
2011-01-04 20:37:31 +00:00
function verifyTable ()
{
2010-12-02 23:34:41 +00:00
$oCriteria = new Criteria ( 'workflow' );
$del = DBAdapter :: getStringDelimiter ();
2011-01-04 20:37:31 +00:00
$sDataBase = 'database_' . strtolower ( DB_ADAPTER );
if ( G :: LoadSystemExist ( $sDataBase )){
G :: LoadSystem ( $sDataBase );
$oDataBase = new database ();
$sql = $oDataBase -> createTableObjectPermission ();
}
/*
$sql = " CREATE TABLE IF NOT EXISTS `OBJECT_PERMISSION` (
2010-12-02 23:34:41 +00:00
`OP_UID` varchar ( 32 ) NOT NULL ,
`PRO_UID` varchar ( 32 ) NOT NULL ,
`TAS_UID` varchar ( 32 ) NOT NULL ,
`USR_UID` varchar ( 32 ) NOT NULL ,
`OP_USER_RELATION` int ( 1 ) NOT NULL default '1' ,
`OP_TASK_SOURCE` varchar ( 32 ) NOT NULL ,
`OP_PARTICIPATE` int ( 1 ) NOT NULL default '1' ,
`OP_OBJ_TYPE` varchar ( 15 ) NOT NULL default 'ANY' ,
`OP_OBJ_UID` varchar ( 32 ) NOT NULL ,
`OP_ACTION` varchar ( 10 ) NOT NULL default 'VIEW' ,
KEY `PRO_UID` ( `PRO_UID` , `TAS_UID` , `USR_UID` , `OP_TASK_SOURCE` , `OP_OBJ_UID` )
) ENGINE = MyISAM DEFAULT CHARSET = latin1 ; " ;
2011-01-04 20:37:31 +00:00
*/
2010-12-02 23:34:41 +00:00
$con = Propel :: getConnection ( " workflow " );
$stmt = $con -> prepareStatement ( $sql );
$rs = $stmt -> executeQuery ();
}
/*
* funcion input documents for case tracker
* by Everth The Answer
*
* @ name getAllUploadedDocumentsCriteriaTracker
* @ param string $sProcessUID
* @ param string $sApplicationUID
* @ param string $sDocUID
* @ return object
*/
function getAllUploadedDocumentsCriteriaTracker ( $sProcessUID , $sApplicationUID , $sDocUID ) {
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
//$oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), Criteria::IN);
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , 'INPUT' );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> add ( AppDocumentPeer :: DOC_UID , $sDocUID );
$aConditions = array ();
$aConditions [] = array ( AppDocumentPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDocumentPeer :: DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$oCriteria -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aInputDocuments = array ();
$aInputDocuments [] = array ( 'APP_DOC_UID' => 'char' , 'DOC_UID' => 'char' , 'APP_DOC_COMMENT' => 'char' , 'APP_DOC_FILENAME' => 'char' , 'APP_DOC_INDEX' => 'integer' );
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
}
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$aFields = array ( 'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ], 'DOC_UID' => $aAux [ 'DOC_UID' ], 'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ], 'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ], 'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ], 'TYPE' => $aAux [ 'APP_DOC_TYPE' ], 'ORIGIN' => $aTask [ 'TAS_TITLE' ]);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
//$aFields['POSITION'] = $_SESSION['STEP_POSITION'];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
$aInputDocuments [] = $aFields ;
$oDataset -> next ();
}
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
//$oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('ATTACHED'), Criteria::IN);
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , 'ATTACHED' );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
}
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$aFields = array ( 'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ], 'DOC_UID' => $aAux [ 'DOC_UID' ], 'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ], 'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ], 'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ], 'TYPE' => $aAux [ 'APP_DOC_TYPE' ], 'ORIGIN' => $aTask [ 'TAS_TITLE' ]);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
//$aFields['POSITION'] = $_SESSION['STEP_POSITION'];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
$aInputDocuments [] = $aFields ;
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'inputDocuments' ] = $aInputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'inputDocuments' );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_CREATE_DATE );
return $oCriteria ;
}
/*
* funcion output documents for case tracker
* by Everth The Answer
*
* @ name getAllGeneratedDocumentsCriteriaTracker
* @ param string $sProcessUID
* @ param string $sApplicationUID
* @ param string $sDocUID
* @ return object
*/
function getAllGeneratedDocumentsCriteriaTracker ( $sProcessUID , $sApplicationUID , $sDocUID ) {
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppDocumentPeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , 'OUTPUT' );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_STATUS , array ( 'ACTIVE' ), Criteria :: IN );
$oCriteria -> add ( AppDocumentPeer :: DOC_UID , $sDocUID );
$aConditions = array ();
$aConditions [] = array ( AppDocumentPeer :: APP_UID , AppDelegationPeer :: APP_UID );
$aConditions [] = array ( AppDocumentPeer :: DEL_INDEX , AppDelegationPeer :: DEL_INDEX );
$oCriteria -> addJoinMC ( $aConditions , Criteria :: LEFT_JOIN );
$oCriteria -> add ( AppDelegationPeer :: PRO_UID , $sProcessUID );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oDataset = AppDocumentPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aOutputDocuments = array ();
$aOutputDocuments [] = array ( 'APP_DOC_UID' => 'char' , 'DOC_UID' => 'char' , 'APP_DOC_COMMENT' => 'char' , 'APP_DOC_FILENAME' => 'char' , 'APP_DOC_INDEX' => 'integer' );
while ( $aRow = $oDataset -> getRow ()) {
$oCriteria2 = new Criteria ( 'workflow' );
$oCriteria2 -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$oCriteria2 -> add ( AppDelegationPeer :: DEL_INDEX , $aRow [ 'DEL_INDEX' ]);
$oDataset2 = AppDelegationPeer :: doSelectRS ( $oCriteria2 );
$oDataset2 -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset2 -> next ();
$aRow2 = $oDataset2 -> getRow ();
$oTask = new Task ();
if ( $oTask -> taskExists ( $aRow2 [ 'TAS_UID' ])) {
$aTask = $oTask -> load ( $aRow2 [ 'TAS_UID' ]);
} else {
$aTask = array ( 'TAS_TITLE' => '(TASK DELETED)' );
}
$aAux = $oAppDocument -> load ( $aRow [ 'APP_DOC_UID' ], $aRow [ 'DOC_VERSION' ]);
$aFields = array ( 'APP_DOC_UID' => $aAux [ 'APP_DOC_UID' ], 'DOC_UID' => $aAux [ 'DOC_UID' ], 'APP_DOC_COMMENT' => $aAux [ 'APP_DOC_COMMENT' ], 'APP_DOC_FILENAME' => $aAux [ 'APP_DOC_FILENAME' ], 'APP_DOC_INDEX' => $aAux [ 'APP_DOC_INDEX' ], 'ORIGIN' => $aTask [ 'TAS_TITLE' ]);
if ( $aFields [ 'APP_DOC_FILENAME' ] != '' ) {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_FILENAME' ];
} else {
$aFields [ 'TITLE' ] = $aFields [ 'APP_DOC_COMMENT' ];
}
//$aFields['POSITION'] = $_SESSION['STEP_POSITION'];
$aFields [ 'CONFIRM' ] = G :: LoadTranslation ( 'ID_CONFIRM_DELETE_ELEMENT' );
$aOutputDocuments [] = $aFields ;
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'outputDocuments' ] = $aOutputDocuments ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'outputDocuments' );
$oCriteria -> addAscendingOrderByColumn ( AppDocumentPeer :: APP_DOC_CREATE_DATE );
return $oCriteria ;
}
/*
* funcion History messages for case tracker
* by Everth The Answer
*
* @ name getHistoryMessagesTracker
* @ param string sApplicationUID
* @ return object
*/
function getHistoryMessagesTracker ( $sApplicationUID ) {
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppMessagePeer :: APP_UID , $sApplicationUID );
$oCriteria -> addAscendingOrderByColumn ( AppMessagePeer :: APP_MSG_DATE );
$oDataset = AppMessagePeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aMessages = array ();
$aMessages [] = array ( 'APP_MSG_UID' => 'char' ,
'APP_UID' => 'char' ,
'DEL_INDEX' => 'char' ,
'APP_MSG_TYPE' => 'char' ,
'APP_MSG_SUBJECT' => 'char' ,
'APP_MSG_FROM' => 'char' ,
'APP_MSG_TO' => 'char' ,
'APP_MSG_BODY' => 'char' ,
'APP_MSG_DATE' => 'char' ,
'APP_MSG_CC' => 'char' ,
'APP_MSG_BCC' => 'char' ,
'APP_MSG_TEMPLATE' => 'char' ,
'APP_MSG_STATUS' => 'char' ,
'APP_MSG_ATTACH' => 'char'
);
while ( $aRow = $oDataset -> getRow ()) {
$aMessages [] = array ( 'APP_MSG_UID' => $aRow [ 'APP_MSG_UID' ],
'APP_UID' => $aRow [ 'APP_UID' ],
'DEL_INDEX' => $aRow [ 'DEL_INDEX' ],
'APP_MSG_TYPE' => $aRow [ 'APP_MSG_TYPE' ],
'APP_MSG_SUBJECT' => $aRow [ 'APP_MSG_SUBJECT' ],
'APP_MSG_FROM' => $aRow [ 'APP_MSG_FROM' ],
'APP_MSG_TO' => $aRow [ 'APP_MSG_TO' ],
'APP_MSG_BODY' => $aRow [ 'APP_MSG_BODY' ],
'APP_MSG_DATE' => $aRow [ 'APP_MSG_DATE' ],
'APP_MSG_CC' => $aRow [ 'APP_MSG_CC' ],
'APP_MSG_BCC' => $aRow [ 'APP_MSG_BCC' ],
'APP_MSG_TEMPLATE' => $aRow [ 'APP_MSG_TEMPLATE' ],
'APP_MSG_STATUS' => $aRow [ 'APP_MSG_STATUS' ],
'APP_MSG_ATTACH' => $aRow [ 'APP_MSG_ATTACH' ]
);
$oDataset -> next ();
}
global $_DBArray ;
$_DBArray [ 'messages' ] = $aMessages ;
$_SESSION [ '_DBArray' ] = $_DBArray ;
G :: LoadClass ( 'ArrayPeer' );
$oCriteria = new Criteria ( 'dbarray' );
$oCriteria -> setDBArrayTable ( 'messages' );
return $oCriteria ;
}
/*
* funcion History messages for case tracker
* by Everth The Answer
*
* @ name getHistoryMessagesTrackerView
* @ param string sApplicationUID
* @ param string Msg_UID
* @ return array
*/
function getHistoryMessagesTrackerView ( $sApplicationUID , $Msg_UID ) {
$oAppDocument = new AppDocument ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> add ( AppMessagePeer :: APP_UID , $sApplicationUID );
$oCriteria -> add ( AppMessagePeer :: APP_MSG_UID , $Msg_UID );
$oCriteria -> addAscendingOrderByColumn ( AppMessagePeer :: APP_MSG_DATE );
$oDataset = AppMessagePeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aRow = $oDataset -> getRow ();
return $aRow ;
}
/*
* This function gets all data about APP_DOCUMENT
*
* @ name getAllObjectsFromProcess
* @ param string sApplicationUID
* @ param object OBJ_TYPE
* @ return array
*/
function getAllObjectsFromProcess ( $PRO_UID , $OBJ_TYPE = '%' ) {
$RESULT = Array ();
$oCriteria = new Criteria ( 'workflow' );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_UID );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_UID );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: DEL_INDEX );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: DOC_UID );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: USR_UID );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_TYPE );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_CREATE_DATE );
$oCriteria -> addSelectColumn ( AppDocumentPeer :: APP_DOC_INDEX );
$oCriteria -> add ( ApplicationPeer :: PRO_UID , $PRO_UID );
$oCriteria -> addJoin ( ApplicationPeer :: APP_UID , AppDocumentPeer :: APP_UID );
$oCriteria -> add ( AppDocumentPeer :: APP_DOC_TYPE , $OBJ_TYPE , Criteria :: LIKE );
$oDataset = DynaformPeer :: doSelectRS ( $oCriteria );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
while ( $oDataset -> next ()) {
$row = $oDataset -> getRow ();
$oAppDocument = new AppDocument ();
$oAppDocument -> Fields = $oAppDocument -> load ( $row [ 'APP_DOC_UID' ], $row [ 'DOC_VERSION' ]);
$row [ 'APP_DOC_FILENAME' ] = $oAppDocument -> Fields [ 'APP_DOC_FILENAME' ];
array_push ( $RESULT , $row );
}
return $RESULT ;
}
/*
* execute triggers after derivation
*
* @ name executeTriggersAfterExternal
* @ param string $sProcess
* @ param string $sTask
* @ param string $sApplication
* @ param string $iIndex
* @ param string $iStepPosition
* @ param array $aNewData
* @ return void
*/
function executeTriggersAfterExternal ( $sProcess , $sTask , $sApplication , $iIndex , $iStepPosition , $aNewData = array ()) {
//load the variables
$Fields = $this -> loadCase ( $sApplication );
$Fields [ 'APP_DATA' ] = array_merge ( $Fields [ 'APP_DATA' ], G :: getSystemConstants ());
$Fields [ 'APP_DATA' ] = array_merge ( $Fields [ 'APP_DATA' ], $aNewData );
//execute triggers
$oCase = new Cases ();
$aNextStep = $this -> getNextStep ( $sProcess , $sApplication , $iIndex , $iStepPosition - 1 );
$Fields [ 'APP_DATA' ] = $this -> ExecuteTriggers ( $sTask , 'EXTERNAL' , $aNextStep [ 'UID' ], 'AFTER' , $Fields [ 'APP_DATA' ]);
//save data
$aData = array ();
$aData [ 'APP_NUMBER' ] = $Fields [ 'APP_NUMBER' ];
$aData [ 'APP_PROC_STATUS' ] = $Fields [ 'APP_PROC_STATUS' ];
$aData [ 'APP_DATA' ] = $Fields [ 'APP_DATA' ];
$aData [ 'DEL_INDEX' ] = $iIndex ;
$aData [ 'TAS_UID' ] = $sTask ;
$this -> updateCase ( $sApplication , $aData );
}
/*
* this function gets the current user in a task
*
* @ name thisIsTheCurrentUser
* @ param string $sApplicationUID
* @ param string $iIndex
* @ param string $sUserUID
* @ param string $sAction
* @ param string $sURL
* @ return void
*/
function thisIsTheCurrentUser ( $sApplicationUID , $iIndex , $sUserUID , $sAction = '' , $sURL = '' ) {
$c = new Criteria ( 'workflow' );
$c -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iIndex );
$c -> add ( AppDelegationPeer :: USR_UID , $sUserUID );
switch ( $sAction ) {
case '' :
return ( boolean ) AppDelegationPeer :: doCount ( $c );
break ;
case 'REDIRECT' :
if ( ! ( boolean ) AppDelegationPeer :: doCount ( $c )) {
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$c -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$c -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$c -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iIndex );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$oDataset = AppDelegationPeer :: doSelectRs ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aData = $oDataset -> getRow ();
G :: SendMessageText ( G :: LoadTranslation ( 'ID_CASE_IS_CURRENTLY_WITH_ANOTHER_USER' ) . ': ' . $aData [ 'USR_FIRSTNAME' ] . ' ' . $aData [ 'USR_LASTNAME' ] . ' (' . $aData [ 'USR_USERNAME' ] . ')' , 'error' );
G :: header ( 'Location: ' . $sURL );
die ;
}
else {
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
if ( ! ( boolean ) AppDelegationPeer :: doCount ( $c )) {
G :: SendMessageText ( G :: LoadTranslation ( 'ID_CASE_ALREADY_DERIVATED' ), 'error' );
G :: header ( 'Location: ' . $sURL );
die ;
}
}
break ;
case 'SHOW_MESSAGE' :
if ( ! ( boolean ) AppDelegationPeer :: doCount ( $c )) {
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$c -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$c -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$c -> add ( AppDelegationPeer :: APP_UID , $sApplicationUID );
$c -> add ( AppDelegationPeer :: DEL_INDEX , $iIndex );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$oDataset = AppDelegationPeer :: doSelectRs ( $c );
$oDataset -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$oDataset -> next ();
$aData = $oDataset -> getRow ();
die ( '<strong>' . G :: LoadTranslation ( 'ID_CASE_ALREADY_DERIVATED' ) . ': ' . $aData [ 'USR_FIRSTNAME' ] . ' ' . $aData [ 'USR_LASTNAME' ] . ' (' . $aData [ 'USR_USERNAME' ] . ')</strong>' );
} else {
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
if ( ! ( boolean ) AppDelegationPeer :: doCount ( $c )) {
die ( '<strong>' . G :: LoadTranslation ( 'ID_CASE_ALREADY_DERIVATED' ) . '</strong>' );
}
}
break ;
}
}
/*
* this function gets the user in Case
*
* @ name getCriteriaUsersCases
* @ param string $status
* @ param string $USR_UID
* @ return object
*/
function getCriteriaUsersCases ( $status , $USR_UID ) {
$c = new Criteria ( 'workflow' );
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
$c -> add ( ApplicationPeer :: APP_STATUS , $status );
$c -> add ( AppDelegationPeer :: USR_UID , $USR_UID );
$c -> add ( AppDelegationPeer :: DEL_FINISH_DATE , null , Criteria :: ISNULL );
return $c ;
}
/*
* this function gets information in a search
*
* @ name getCriteriaUsersCases
* @ param string $sCase
* @ param string $sTask
* @ param string $sCurrentUser
* @ param string $sSentby
* @ param string $sLastModFrom
* @ param string $sLastModTo
* @ param string $status
* @ param string $permisse
* @ param string $userlogged
* @ param array $aSupervisor
* @ return object
*/
function getAdvancedSearch ( $sCase , $sProcess , $sTask , $sCurrentUser , $sSentby , $sLastModFrom , $sLastModTo , $sStatus , $permisse , $userlogged , $aSupervisor ) {
$sTypeList = '' ;
$sUIDUserLogged = '' ;
$c = new Criteria ( 'workflow' );
$c -> clearSelectColumns ();
$c -> addSelectColumn ( ApplicationPeer :: APP_UID );
$c -> addSelectColumn ( ApplicationPeer :: APP_NUMBER );
$c -> addSelectColumn ( ApplicationPeer :: APP_UPDATE_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_PRIORITY );
//$c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
$c -> addAsColumn ( 'DEL_TASK_DUE_DATE' , " IF ( " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " <= NOW(), CONCAT('<span style= \ 'color:red \ ';>', " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " , '</span>'), " . AppDelegationPeer :: DEL_TASK_DUE_DATE . " ) " );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INDEX );
$c -> addSelectColumn ( AppDelegationPeer :: TAS_UID );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_INIT_DATE );
$c -> addSelectColumn ( AppDelegationPeer :: DEL_FINISH_DATE );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addAsColumn ( 'APP_CURRENT_USER' , " CONCAT(USERS.USR_LASTNAME, ' ', USERS.USR_FIRSTNAME) " );
$c -> addSelectColumn ( ApplicationPeer :: APP_STATUS );
$c -> addAsColumn ( 'APP_TITLE' , 'APP_TITLE.CON_VALUE' );
$c -> addAsColumn ( 'APP_PRO_TITLE' , 'PRO_TITLE.CON_VALUE' );
$c -> addAsColumn ( 'APP_TAS_TITLE' , 'TAS_TITLE.CON_VALUE' );
//$c->addAsColumn('APP_DEL_PREVIOUS_USER', 'APP_LAST_USER.USR_USERNAME');
$c -> addAsColumn ( 'APP_DEL_PREVIOUS_USER' , " CONCAT(APP_LAST_USER.USR_LASTNAME, ' ', APP_LAST_USER.USR_FIRSTNAME) " );
$c -> addAlias ( " APP_TITLE " , 'CONTENT' );
$c -> addAlias ( " PRO_TITLE " , 'CONTENT' );
$c -> addAlias ( " TAS_TITLE " , 'CONTENT' );
$c -> addAlias ( " APP_PREV_DEL " , 'APP_DELEGATION' );
$c -> addAlias ( " APP_LAST_USER " , 'USERS' );
$c -> addJoin ( ApplicationPeer :: APP_UID , AppDelegationPeer :: APP_UID , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: TAS_UID , TaskPeer :: TAS_UID , Criteria :: LEFT_JOIN );
$appThreadConds [] = array ( ApplicationPeer :: APP_UID , AppThreadPeer :: APP_UID );
$appThreadConds [] = array ( AppDelegationPeer :: DEL_INDEX , AppThreadPeer :: DEL_INDEX );
$c -> addJoinMC ( $appThreadConds , Criteria :: LEFT_JOIN );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$del = DBAdapter :: getStringDelimiter ();
$appTitleConds = array ();
$appTitleConds [] = array ( ApplicationPeer :: APP_UID , 'APP_TITLE.CON_ID' );
$appTitleConds [] = array ( 'APP_TITLE.CON_CATEGORY' , $del . 'APP_TITLE' . $del );
$appTitleConds [] = array ( 'APP_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $appTitleConds , Criteria :: LEFT_JOIN );
$proTitleConds = array ();
$proTitleConds [] = array ( ApplicationPeer :: PRO_UID , 'PRO_TITLE.CON_ID' );
$proTitleConds [] = array ( 'PRO_TITLE.CON_CATEGORY' , $del . 'PRO_TITLE' . $del );
$proTitleConds [] = array ( 'PRO_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $proTitleConds , Criteria :: LEFT_JOIN );
$tasTitleConds = array ();
$tasTitleConds [] = array ( AppDelegationPeer :: TAS_UID , 'TAS_TITLE.CON_ID' );
$tasTitleConds [] = array ( 'TAS_TITLE.CON_CATEGORY' , $del . 'TAS_TITLE' . $del );
$tasTitleConds [] = array ( 'TAS_TITLE.CON_LANG' , $del . SYS_LANG . $del );
$c -> addJoinMC ( $tasTitleConds , Criteria :: LEFT_JOIN );
$prevConds = array ();
$prevConds [] = array ( ApplicationPeer :: APP_UID , 'APP_PREV_DEL.APP_UID' );
$prevConds [] = array ( 'APP_PREV_DEL.DEL_INDEX' , AppDelegationPeer :: DEL_PREVIOUS );
$c -> addJoinMC ( $prevConds , Criteria :: LEFT_JOIN );
$usrConds = array ();
$usrConds [] = array ( 'APP_PREV_DEL.USR_UID' , 'APP_LAST_USER.USR_UID' );
$c -> addJoinMC ( $usrConds , Criteria :: LEFT_JOIN );
$c -> add ( TaskPeer :: TAS_TYPE , 'SUBPROCESS' , Criteria :: NOT_EQUAL );
$c -> add ( $c -> getNewCriterion ( AppThreadPeer :: APP_THREAD_STATUS , 'OPEN' ) -> addOr ( $c -> getNewCriterion ( ApplicationPeer :: APP_STATUS , 'COMPLETED' ) -> addAnd ( $c -> getNewCriterion ( AppDelegationPeer :: DEL_PREVIOUS ,
0 ))));
if ( $sCase != '' )
$c -> add ( ApplicationPeer :: APP_NUMBER , $sCase );
if ( $sProcess != '' )
$c -> add ( ApplicationPeer :: PRO_UID , $sProcess );
if ( $sTask != '' && $sTask != " 0 " && $sTask != 0 )
$c -> add ( AppDelegationPeer :: TAS_UID , $sTask );
if ( $sCurrentUser != '' )
$c -> add ( ApplicationPeer :: APP_CUR_USER , $sCurrentUser );
if ( $sSentby != '' )
$c -> add ( 'APP_PREV_DEL.USR_UID' , $sSentby );
if ( $sLastModFrom != '0000-00-00' && $sLastModTo != '0000-00-00' && $sLastModFrom != '' && $sLastModTo != '' )
$c -> add ( $c -> getNewCriterion ( ApplicationPeer :: APP_UPDATE_DATE , $sLastModFrom . ' 00:00:00' , Criteria :: GREATER_EQUAL ) -> addAnd ( $c -> getNewCriterion ( ApplicationPeer :: APP_UPDATE_DATE , $sLastModTo . ' 23:59:59' , Criteria :: LESS_EQUAL )));
if ( $sStatus != '' ) {
if ( $sStatus != 'gral' )
$c -> add ( ApplicationPeer :: APP_STATUS , $sStatus );
}
if ( $permisse != 0 ) {
$c -> add ( $c -> getNewCriterion ( AppDelegationPeer :: USR_UID , $userlogged ) -> addOr ( $c -> getNewCriterion ( AppDelegationPeer :: PRO_UID , $aSupervisor , Criteria :: IN )));
}
$c -> addDescendingOrderByColumn ( ApplicationPeer :: APP_NUMBER );
return $c ;
}
//**DEPRECATED
/*
* this function gets a condition rule
*
* @ name getConditionCasesCount
* @ param string $type
* @ return int
*/
function getConditionCasesCount ( $type , $sumary = NULL ) {
$result = 0 ;
return $result ;
$nCount = 0 ;
list ( $aCriteria , $xmlfile ) = $this -> getConditionCasesList ( $type , $_SESSION [ 'USER_LOGGED' ], false );
$rs = ApplicationPeer :: doSelectRS ( $aCriteria );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
if ( isset ( $sumary ) && $sumary === true ) {
$sumary = Array ();
while ( $rs -> next ()) {
$nCount ++ ;
$row = $rs -> getRow ();
if ( isset ( $sumary [ $row [ 'PRO_UID' ]])) {
$sumary [ $row [ 'PRO_UID' ]][ 'count' ] += 1 ;
} else {
$sumary [ $row [ 'PRO_UID' ]][ 'count' ] = 1 ;
$sumary [ $row [ 'PRO_UID' ]][ 'name' ] = $row [ 'APP_PRO_TITLE' ];
}
}
return Array ( 'count' => $nCount , 'sumary' => $sumary );
} else {
while ( $rs -> next ())
$nCount ++ ;
return $nCount ;
}
}
//**DEPRECATED
/*
* this function gets all conditions rules
*
* @ name getAllConditionCasesCount
* @ param string $type
* @ return array
*/
function getAllConditionCasesCount ( $types , $sumary = NULL ) {
$aResult = Array ();
foreach ( $types as $type ) {
$aResult [ $type ] = $this -> getConditionCasesCount ( $type , $sumary );
}
return $aResult ;
}
/*
* this function gets a user that it is in a case
*
* @ name userParticipatedInCase
* @ param string $sAppUid
* @ param string $sUIDUserLogged
* @ return int
*/
function userParticipatedInCase ( $sAppUid , $sUIDUserLogged ) {
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( AppDelegationPeer :: APP_UID );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid );
$c -> add ( AppDelegationPeer :: USR_UID , $sUIDUserLogged );
$rs = ApplicationPeer :: doSelectRS ( $c );
$count = 0 ;
while ( $rs -> next ())
$count ++ ;
return $count ;
}
/*
* Get the current delegation of a case ( This is a clone of getCurrentDelegation but this will return
* the index with out filtering by user or status .
* @ name getCurrentDelegationCase
* @ param string $sApplicationUID
* @ return integer
*/
function getCurrentDelegationCase ( $sApplicationUID = '' ) {
$oSession = new DBSession ( new DBConnection ());
$oDataset = $oSession -> Execute ( '
SELECT
DEL_INDEX
FROM
APP_DELEGATION
WHERE
APP_UID = " ' . $sApplicationUID . ' "
ORDER BY DEL_DELEGATE_DATE DESC
' );
$aRow = $oDataset -> Read ();
return $aRow [ 'DEL_INDEX' ];
}
function clearCaseSessionData (){
if ( isset ( $_SESSION [ 'APPLICATION' ]) )
unset ( $_SESSION [ 'APPLICATION' ]);
if ( isset ( $_SESSION [ 'PROCESS' ]) )
unset ( $_SESSION [ 'PROCESS' ]);
if ( isset ( $_SESSION [ 'INDEX' ]) )
unset ( $_SESSION [ 'INDEX' ]);
if ( isset ( $_SESSION [ 'STEP_POSITION' ]) )
unset ( $_SESSION [ 'STEP_POSITION' ]);
}
/**
* Jump to the determinated case by its Application number
*
* @ param interger $APP_NUMBER
*/
function jumpToCase ( $APP_NUMBER ){
$_GET [ 'APP_UID' ] = $oCase -> getApplicationUIDByNumber ( $_GET [ 'APP_NUMBER' ]);
$_GET [ 'DEL_INDEX' ] = $oCase -> getCurrentDelegation ( $_GET [ 'APP_UID' ], $_SESSION [ 'USER_LOGGED' ]);
if ( is_null ( $_GET [ 'DEL_INDEX' ]) ) {
$participated = $oCase -> userParticipatedInCase ( $_GET [ 'APP_UID' ], $_SESSION [ 'USER_LOGGED' ]);
if ( $participated == 0 ) {
if ( is_null ( $_GET [ 'APP_UID' ]) ) {
G :: SendMessageText ( G :: LoadTranslation ( 'ID_CASE_DOES_NOT_EXISTS' ), 'info' );
} else {
G :: SendMessageText ( G :: LoadTranslation ( 'ID_CASE_IS_CURRENTLY_WITH_ANOTHER_USER' ), 'info' );
}
G :: header ( 'location: cases_List' );
}
}
}
2010-12-07 11:49:51 +00:00
function discriminateCases ( $aData ){
$siblingThreadData = $this -> GetAllOpenDelegation ( $aData );
foreach ( $siblingThreadData as $thread => $threadData )
{
$this -> closeAppThread ( $aData [ 'APP_UID' ], $threadData [ 'DEL_INDEX' ]); //Close Sibling AppThreads
$this -> CloseCurrentDelegation ( $aData [ 'APP_UID' ], $threadData [ 'DEL_INDEX' ]); //Close Sibling AppDelegations
}
}
/*
* We ' re getting all threads in a task
*
* @ name GetAllThreads of Particular Parent Thread
* @ param string $sAppUid
* @ param string $sAppParent
* @ return $aThreads
*/
function GetAllOpenDelegation ( $aData )
{
//('SELECT * FROM APP_THREAD WHERE APP_UID='".$aData['APP_UID']."' AND APP_THREAD_PARENT = '".$aData['APP_THREAD_PARENT']."'");
try {
$aThreads = array ();
$c = new Criteria ();
$c -> add ( AppDelegationPeer :: APP_UID , $aData [ 'APP_UID' ]);
$c -> add ( AppDelegationPeer :: DEL_PREVIOUS , $aData [ 'APP_THREAD_PARENT' ]);
$c -> add ( AppDelegationPeer :: DEL_THREAD_STATUS , 'OPEN' );
$rs = AppDelegationPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rs -> next ();
$row = $rs -> getRow ();
while ( is_array ( $row )) {
$aThreads [] = $row ;
$rs -> next ();
$row = $rs -> getRow ();
}
return $aThreads ;
}
catch ( exception $e ) {
throw ( $e );
}
}
2011-02-04 15:00:20 +00:00
function getUsersToReassign ( $TAS_UID , $USR_UID )
{
G :: LoadClass ( 'groups' );
G :: LoadClass ( 'tasks' );
$oTasks = new Tasks ();
$aAux = $oTasks -> getGroupsOfTask ( $TAS_UID , 1 );
$row = array ();
$groups = new Groups ();
foreach ( $aAux as $aGroup ) {
$aUsers = $groups -> getUsersOfGroup ( $aGroup [ 'GRP_UID' ]);
foreach ( $aUsers as $aUser ) {
if ( $aUser [ 'USR_UID' ] != $USR_UID ) {
$row [] = $aUser [ 'USR_UID' ];
}
}
}
$aAux = $oTasks -> getUsersOfTask ( $TAS_UID , 1 );
foreach ( $aAux as $aUser ) {
if ( $aUser [ 'USR_UID' ] != $USR_UID ) {
$row [] = $aUser [ 'USR_UID' ];
}
}
require_once 'classes/model/Users.php' ;
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( UsersPeer :: USR_UID );
$c -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$c -> addSelectColumn ( UsersPeer :: USR_FIRSTNAME );
$c -> addSelectColumn ( UsersPeer :: USR_LASTNAME );
$c -> add ( UsersPeer :: USR_UID , $row , Criteria :: IN );
$rs = UsersPeer :: doSelectRs ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rows = Array ();
while ( $rs -> next () ) {
$rows [] = $rs -> getRow ();
}
return $rows ;
}
2011-07-14 10:45:20 -04:00
/*
* this function gets all users that already participated in a case
*
* @ name getUsersParticipatedInCase
* @ param string $sAppUid
* @ return array ( criteria + array )
*/
function getUsersParticipatedInCase ( $sAppUid ) {
$c = new Criteria ( 'workflow' );
$c -> addSelectColumn ( AppDelegationPeer :: APP_UID );
$c -> addSelectColumn ( AppDelegationPeer :: USR_UID );
$c -> addSelectColumn ( UsersPeer :: USR_USERNAME );
$c -> addSelectColumn ( UsersPeer :: USR_EMAIL );
$c -> add ( AppDelegationPeer :: APP_UID , $sAppUid , CRITERIA :: EQUAL );
$c -> addJoin ( AppDelegationPeer :: USR_UID , UsersPeer :: USR_UID , Criteria :: LEFT_JOIN );
$rs = AppDelegationPeer :: doSelectRS ( $c );
$rs -> setFetchmode ( ResultSet :: FETCHMODE_ASSOC );
$rows = array ();
$rs -> next ();
while ( $row = $rs -> getRow ()){
$rows [ $row [ 'USR_UID' ]] = $row ;
$rs -> next ();
}
$response [ 'criteria' ] = $c ;
$response [ 'array' ] = $rows ;
return $response ;
}
2011-01-19 16:06:11 +00:00
}