From c7c2439a71cca6664416d32fce6f7433865124f2 Mon Sep 17 00:00:00 2001 From: Brayan Pereyra Date: Mon, 9 Mar 2015 15:23:38 -0400 Subject: [PATCH 1/8] Adicion de contadores de bandeja (y tiempo de acces token) --- workflow/engine/classes/class.case.php | 13 +++- workflow/engine/classes/class.derivation.php | 5 +- .../engine/classes/model/ListCompleted.php | 8 ++ workflow/engine/classes/model/ListInbox.php | 70 ++++++++++++++--- .../classes/model/ListParticipatedLast.php | 18 +++++ workflow/engine/methods/cases/main_init.php | 78 +++++++++++++++++++ .../src/ProcessMaker/BusinessModel/Lists.php | 43 ++++++++++ .../src/ProcessMaker/Services/Api/System.php | 22 ++++++ .../ProcessMaker/Services/OAuth2/Server.php | 2 +- workflow/engine/templates/cases/main.js | 9 ++- 10 files changed, 250 insertions(+), 18 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 5b67922fa..5bce08ae8 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -1065,7 +1065,7 @@ class Cases $Fields['DEL_INDEX'] = 1; } $inbox = new ListInbox(); - $inbox->update($Fields); + $inbox->update($Fields); /*----------------------------------********---------------------------------*/ //Return @@ -1237,6 +1237,12 @@ class Cases $appAssignSelfServiceValue = new AppAssignSelfServiceValue(); $appAssignSelfServiceValue->remove($sAppUid, $iDelIndex); + /*----------------------------------********---------------------------------*/ + $aFields = $oAppDel->toArray(BasePeer::TYPE_FIELDNAME); + $aFields['APP_STATUS'] = 'TO_DO'; + $inbox = new ListInbox(); + $inbox->update($aFields, true); + /*----------------------------------********---------------------------------*/ } catch (exception $e) { throw ($e); } @@ -1981,7 +1987,7 @@ class Cases * @return Fields */ - public function startCase($sTasUid, $sUsrUid, $isSubprocess = false) + public function startCase($sTasUid, $sUsrUid, $isSubprocess = false, $dataPreviusApplication = array()) { if ($sTasUid != '') { try { @@ -2045,11 +2051,12 @@ class Cases $Fields['USR_UID'] = $sUsrUid; $Fields['DEL_INDEX'] = $iDelIndex; $Fields['APP_STATUS'] = 'TO_DO'; + $Fields['DEL_DELEGATE_DATE'] = $Fields['APP_INIT_DATE']; if(!$isSubprocess){ $Fields['APP_STATUS'] = 'DRAFT'; } $inbox = new ListInbox(); - $inbox->newRow($Fields, $sUsrUid); + $inbox->newRow($Fields, $sUsrUid, $isSubprocess, $dataPreviusApplication); /*----------------------------------********---------------------------------*/ } catch (exception $e) { throw ($e); diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 506c48c22..155aec556 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -748,14 +748,13 @@ class Derivation //SETS THE APP_PROC_CODE //if (isset($nextDel['TAS_DEF_PROC_CODE'])) //$appFields['APP_PROC_CODE'] = $nextDel['TAS_DEF_PROC_CODE']; - /*----------------------------------********---------------------------------*/ if (!empty($iNewDelIndex) && empty($aSP)) { $oAppDel = AppDelegationPeer::retrieveByPK( $appFields['APP_UID'], $iNewDelIndex ); $aFields = $oAppDel->toArray( BasePeer::TYPE_FIELDNAME ); $aFields['APP_STATUS'] = $currentDelegation['APP_STATUS']; $inbox = new ListInbox(); - $inbox->newRow($aFields, $nextDel['USR_UID']); + $inbox->newRow($aFields, $appFields['CURRENT_USER_UID'], false, array(), ($nextDel['TAS_ASSIGN_TYPE'] == 'SELF_SERVICE' ? true : false)); } /*----------------------------------********---------------------------------*/ unset( $aSP ); @@ -863,7 +862,7 @@ class Derivation if (isset( $aSP )) { //Create the new case in the sub-process // set the initial date to null the time its created - $aNewCase = $this->case->startCase( $aSP['TAS_UID'], $aSP['USR_UID'], true ); + $aNewCase = $this->case->startCase( $aSP['TAS_UID'], $aSP['USR_UID'], true, $appFields); //Copy case variables to sub-process case $aFields = unserialize( $aSP['SP_VARIABLES_OUT'] ); $aNewFields = array (); diff --git a/workflow/engine/classes/model/ListCompleted.php b/workflow/engine/classes/model/ListCompleted.php index 900d64baa..ddbbf299b 100644 --- a/workflow/engine/classes/model/ListCompleted.php +++ b/workflow/engine/classes/model/ListCompleted.php @@ -94,6 +94,14 @@ class ListCompleted extends BaseListCompleted $criteriaSet->add(ListParticipatedLastPeer::APP_STATUS, 'COMPLETED'); BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); + $users = new Users(); + $users->refreshTotal($data['USR_UID'], 'add', 'completed'); + if ($data['DEL_PREVIOUS'] != 0) { + $users->refreshTotal($data['USR_UID'], 'remove', 'inbox'); + } else { + $users->refreshTotal($data['USR_UID'], 'remove', 'draft'); + } + $con = Propel::getConnection( ListCompletedPeer::DATABASE_NAME ); try { $this->fromArray( $data, BasePeer::TYPE_FIELDNAME ); diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index 2ad27b9c2..b30d7c3c1 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -23,7 +23,7 @@ class ListInbox extends BaseListInbox * @return type * */ - public function create($data) + public function create($data, $isSelfService = false) { $con = Propel::getConnection( ListInboxPeer::DATABASE_NAME ); try { @@ -48,12 +48,14 @@ class ListInbox extends BaseListInbox $listMyInbox->refresh($data); // remove and create participated last - $listParticipatedLast = new ListParticipatedLast(); - $listParticipatedLast->remove($data['APP_UID'], $data['USR_UID']); - $listParticipatedLast = new ListParticipatedLast(); - $listParticipatedLast->create($data); - $listParticipatedLast = new ListParticipatedLast(); - $listParticipatedLast->refresh($data); + if (!$isSelfService) { + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->remove($data['APP_UID'], $data['USR_UID']); + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->create($data); + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->refresh($data); + } return $result; } catch(Exception $e) { @@ -69,8 +71,12 @@ class ListInbox extends BaseListInbox * @return type * @throws type */ - public function update($data) + public function update($data, $addCountInbox = false) { + if ($addCountInbox) { + $users = new Users(); + $users->refreshTotal($data['USR_UID'], 'add', 'inbox'); + } $con = Propel::getConnection( ListInboxPeer::DATABASE_NAME ); try { $con->begin(); @@ -141,7 +147,7 @@ class ListInbox extends BaseListInbox } } - public function newRow ($data, $delPreviusUsrUid) + public function newRow ($data, $delPreviusUsrUid, $isInitSubprocess = false, $dataPreviusApplication = array(), $isSelfService = false) { $data['DEL_PREVIOUS_USR_UID'] = $delPreviusUsrUid; if (isset($data['DEL_TASK_DUE_DATE'])) { @@ -211,7 +217,51 @@ class ListInbox extends BaseListInbox $data['DEL_PREVIOUS_USR_LASTNAME'] = $aRow['USR_LASTNAME']; } - self::create($data); + $users = new Users(); + $criteria = new Criteria(); + $criteria->addSelectColumn(SubApplicationPeer::DEL_INDEX_PARENT); + $criteria->add( SubApplicationPeer::APP_PARENT, $data['APP_UID'], Criteria::EQUAL ); + $dataset = SubApplicationPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + if ($dataset->next()) { + $aSub = $dataset->getRow(); + if ($aSub['DEL_INDEX_PARENT'] == $data['DEL_PREVIOUS'] && !$isSelfService) { + $users->refreshTotal($data['USR_UID'], 'add', 'inbox'); + self::create($data, $isSelfService); + return 1; + } + } + + if (!$isInitSubprocess) { + if ($data['APP_STATUS'] == 'DRAFT') { + $users->refreshTotal($data['USR_UID'], 'add', 'draft'); + } else { + if ($data['DEL_INDEX'] == 2) { + $criteria = new Criteria(); + $criteria->addSelectColumn(SubApplicationPeer::APP_UID); + $criteria->add( SubApplicationPeer::APP_UID, $data['APP_UID'], Criteria::EQUAL ); + $dataset = SubApplicationPeer::doSelectRS($criteria); + if ($dataset->next()) { + $users->refreshTotal($delPreviusUsrUid, 'remove', 'inbox'); + } else { + $users->refreshTotal($delPreviusUsrUid, 'remove', 'draft'); + } + } else { + $users->refreshTotal($delPreviusUsrUid, 'remove', 'inbox'); + } + if (!$isSelfService) { + $users->refreshTotal($data['USR_UID'], 'add', 'inbox'); + } + } + } else { + $users->refreshTotal($data['USR_UID'], 'add', 'inbox'); + if ($dataPreviusApplication['APP_STATUS'] == 'DRAFT') { + $users->refreshTotal($dataPreviusApplication['CURRENT_USER_UID'], 'remove', 'draft'); + } else { + $users->refreshTotal($dataPreviusApplication['CURRENT_USER_UID'], 'remove', 'inbox'); + } + } + self::create($data, $isSelfService); } public function loadFilters (&$criteria, $filters) diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index e6432b170..ba1cadf12 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -48,6 +48,19 @@ class ListParticipatedLast extends BaseListParticipatedLast $aRow = $dataset->getRow(); $data['APP_STATUS'] = $aRow['APP_STATUS']; + //Update - WHERE + $criteriaWhere = new Criteria("workflow"); + $criteriaWhere->add(ListParticipatedLastPeer::APP_UID, $data["APP_UID"], Criteria::EQUAL); + //Update - SET + $criteriaSet = new Criteria("workflow"); + $criteriaSet->add(ListParticipatedLastPeer::DEL_CURRENT_USR_USERNAME, $data['DEL_CURRENT_USR_USERNAME']); + $criteriaSet->add(ListParticipatedLastPeer::DEL_CURRENT_USR_FIRSTNAME, $data['DEL_CURRENT_USR_FIRSTNAME']); + $criteriaSet->add(ListParticipatedLastPeer::DEL_CURRENT_USR_LASTNAME, $data['DEL_CURRENT_USR_LASTNAME']); + BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); + + $users = new Users(); + $users->refreshTotal($data['USR_UID'], 'add', 'participated'); + $con = Propel::getConnection( ListParticipatedLastPeer::DATABASE_NAME ); try { $this->fromArray( $data, BasePeer::TYPE_FIELDNAME ); @@ -132,6 +145,11 @@ class ListParticipatedLast extends BaseListParticipatedLast */ public function remove ($app_uid, $usr_uid) { + $existField = ListParticipatedLastPeer::retrieveByPK($app_uid, $usr_uid); + if (! is_null( $existField )) { + $users = new Users(); + $users->refreshTotal($usr_uid, 'removed', 'participated'); + } $con = Propel::getConnection( ListParticipatedLastPeer::DATABASE_NAME ); try { $this->setAppUid($app_uid); diff --git a/workflow/engine/methods/cases/main_init.php b/workflow/engine/methods/cases/main_init.php index e3097328b..2914007aa 100755 --- a/workflow/engine/methods/cases/main_init.php +++ b/workflow/engine/methods/cases/main_init.php @@ -80,9 +80,49 @@ if ($oServerConf->isRtl( SYS_LANG )) { $regionTreePanel = 'west'; $regionDebug = 'east'; } + +$urlProxy = 'casesMenuLoader?action=getAllCounters&r='; +/*----------------------------------********---------------------------------*/ +$urlProxy = '/api/1.0/' . SYS_SYS . '/system/counters-lists?r='; +$clientId = 'x-pm-local-client'; +$client = getClientCredentials($clientId); +$authCode = getAuthorizationCode($client); +$debug = false; //System::isDebugMode(); + +$loader = Maveriks\Util\ClassLoader::getInstance(); +$loader->add(PATH_TRUNK . 'vendor/bshaffer/oauth2-server-php/src/', "OAuth2"); + +$request = array( + 'grant_type' => 'authorization_code', + 'code' => $authCode +); +$server = array( + 'REQUEST_METHOD' => 'POST' +); +$headers = array( + "PHP_AUTH_USER" => $client['CLIENT_ID'], + "PHP_AUTH_PW" => $client['CLIENT_SECRET'], + "Content-Type" => "multipart/form-data;", + "Authorization" => "Basic " . base64_encode($client['CLIENT_ID'] . ":" . $client['CLIENT_SECRET']) +); + +$request = new \OAuth2\Request(array(), $request, array(), array(), array(), $server, null, $headers); +$oauthServer = new \ProcessMaker\Services\OAuth2\Server(); +$response = $oauthServer->postToken($request, true); + +$clientToken = $response->getParameters(); +$clientToken["client_id"] = $client['CLIENT_ID']; +$clientToken["client_secret"] = $client['CLIENT_SECRET']; +/*----------------------------------********---------------------------------*/ + + $oHeadPublisher->assign( 'regionTreePanel', $regionTreePanel ); $oHeadPublisher->assign( 'regionDebug', $regionDebug ); $oHeadPublisher->assign( "defaultOption", $defaultOption ); //User menu permissions +$oHeadPublisher->assign( 'urlProxy', $urlProxy ); //sending the urlProxy to make +/*----------------------------------********---------------------------------*/ +$oHeadPublisher->assign( 'credentials', $clientToken ); +/*----------------------------------********---------------------------------*/ $oHeadPublisher->assign( "_nodeId", isset( $confDefaultOption ) ? $confDefaultOption : "PM_USERS" ); //User menu permissions $oHeadPublisher->assign( "FORMATS", $conf->getFormats() ); @@ -90,3 +130,41 @@ $_SESSION["current_ux"] = "NORMAL"; G::RenderPage( "publish", "extJs" ); + +/*----------------------------------********---------------------------------*/ +function getClientCredentials($clientId) +{ + $oauthQuery = new ProcessMaker\Services\OAuth2\PmPdo(getDsn()); + return $oauthQuery->getClientDetails($clientId); +} + +function getDsn() +{ + list($host, $port) = strpos(DB_HOST, ':') !== false ? explode(':', DB_HOST) : array(DB_HOST, ''); + $port = empty($port) ? '' : ";port=$port"; + $dsn = DB_ADAPTER.':host='.$host.';dbname='.DB_NAME.$port; + + return array('dsn' => $dsn, 'username' => DB_USER, 'password' => DB_PASS); +} + + +function getAuthorizationCode($client) +{ + \ProcessMaker\Services\OAuth2\Server::setDatabaseSource(getDsn()); + \ProcessMaker\Services\OAuth2\Server::setPmClientId($client['CLIENT_ID']); + + $oauthServer = new \ProcessMaker\Services\OAuth2\Server(); + $userId = $_SESSION['USER_LOGGED']; + $authorize = true; + $_GET = array_merge($_GET, array( + 'response_type' => 'code', + 'client_id' => $client['CLIENT_ID'], + 'scope' => implode(' ', $oauthServer->getScope()) + )); + + $response = $oauthServer->postAuthorize($authorize, $userId, true); + $code = substr($response->getHttpHeader('Location'), strpos($response->getHttpHeader('Location'), 'code=')+5, 40); + + return $code; +} +/*----------------------------------********---------------------------------*/ \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php b/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php index 0c70c0e1d..6ed830437 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php @@ -1,6 +1,8 @@ @@ -180,4 +182,45 @@ class Lists { } return $response; } + + /** + * Get counters for lists + * + * @access public + * @param array $userId, User Uid + * @return array + * + * @author Brayan Pereyra (Cochalo) + * @copyright Colosa - Bolivia + */ + public function getCounters($userId) + { + $criteria = new Criteria(); + $criteria->addSelectColumn(UsersPeer::USR_TOTAL_INBOX); + $criteria->addSelectColumn(UsersPeer::USR_TOTAL_DRAFT); + $criteria->addSelectColumn(UsersPeer::USR_TOTAL_CANCELLED); + $criteria->addSelectColumn(UsersPeer::USR_TOTAL_PARTICIPATED); + $criteria->addSelectColumn(UsersPeer::USR_TOTAL_PAUSED); + $criteria->addSelectColumn(UsersPeer::USR_TOTAL_COMPLETED); + $criteria->add( UsersPeer::USR_UID, $userId, Criteria::EQUAL ); + $dataset = UsersPeer::doSelectRS($criteria); + $dataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + $aRow = $dataset->getRow(); + + $oAppCache = new \AppCacheView(); + $totalUnassigned = $oAppCache->getListCounters('selfservice', $userId, false); + + $response = array( + array('count' => $aRow['USR_TOTAL_INBOX'], 'item' => 'CASES_INBOX'), + array('count' => $aRow['USR_TOTAL_DRAFT'], 'item' => 'CASES_DRAFT'), + array('count' => $aRow['USR_TOTAL_CANCELLED'], 'item' => 'CASES_CANCELLED'), + array('count' => $aRow['USR_TOTAL_PARTICIPATED'], 'item' => 'CASES_SENT'), + array('count' => $aRow['USR_TOTAL_PAUSED'], 'item' => 'CASES_PAUSED'), + array('count' => $aRow['USR_TOTAL_COMPLETED'], 'item' => 'CASES_COMPLETED'), + array('count' => $totalUnassigned, 'item' => 'CASES_SELFSERVICE') + ); + + return $response; + } } \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Services/Api/System.php b/workflow/engine/src/ProcessMaker/Services/Api/System.php index aba83efad..ab2dc0298 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/System.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/System.php @@ -29,5 +29,27 @@ class System extends Api throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } + + /** + * Get count for all lists + * + * @return array + * + * @author Brayan Pereyra (Cochalo) + * @copyright Colosa - Bolivia + * + * @url GET /counters-lists + */ + public function doGetCountersLists() + { + try { + $userId = $this->getUserId(); + $lists = new \ProcessMaker\BusinessModel\Lists(); + $response = $lists->getCounters($userId); + return $response; + } catch (\Exception $e) { + throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + } + } } diff --git a/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php b/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php index 6ff57df53..9a85d0a5a 100644 --- a/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php +++ b/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php @@ -57,7 +57,7 @@ class Server implements iAuthenticate } // Pass a storage object or array of storage objects to the OAuth2 server class - $this->server = new \OAuth2\Server($this->storage, array('allow_implicit' => true)); + $this->server = new \OAuth2\Server($this->storage, array('allow_implicit' => true, 'access_lifetime' => 86400)); $this->server->setConfig('enforce_state', false); diff --git a/workflow/engine/templates/cases/main.js b/workflow/engine/templates/cases/main.js index e9dd0ac25..8fc08d81e 100755 --- a/workflow/engine/templates/cases/main.js +++ b/workflow/engine/templates/cases/main.js @@ -573,7 +573,14 @@ function updateCasesTree() { ReloadTreeMenuItemDetail({item:currentSelectedTreeMenuItem}); } Ext.Ajax.request({ - url: 'casesMenuLoader?action=getAllCounters&r='+Math.random(), + url: urlProxy + Math.random(), + /*----------------------------------********---------------------------------*/ + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer ' + credentials.access_token + }, + method: 'GET', + /*----------------------------------********---------------------------------*/ success: function(response){ result = Ext.util.JSON.decode(response.responseText); From e692b14f84853203c22d733153454627c6cbce90 Mon Sep 17 00:00:00 2001 From: Brayan Pereyra Date: Wed, 11 Mar 2015 16:04:13 -0400 Subject: [PATCH 2/8] Adicion de contadores para bandejas CANCELED y PAUSED --- workflow/engine/classes/class.case.php | 3 ++- .../engine/classes/model/ListCanceled.php | 4 ++++ workflow/engine/classes/model/ListPaused.php | 22 ++++++++++++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 5bce08ae8..f7faef704 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -4048,8 +4048,9 @@ class Cases $this->getExecuteTriggerProcess($sApplicationUID, "UNPAUSE"); /*----------------------------------********---------------------------------*/ + $aData = array_merge($aFieldsDel, $aData); $oListPaused = new ListPaused(); - $oListPaused->remove($sApplicationUID, $iDelegation, true); + $oListPaused->remove($sApplicationUID, $iDelegation, $aData); /*----------------------------------********---------------------------------*/ } diff --git a/workflow/engine/classes/model/ListCanceled.php b/workflow/engine/classes/model/ListCanceled.php index 1871e6f25..f00fb46d7 100644 --- a/workflow/engine/classes/model/ListCanceled.php +++ b/workflow/engine/classes/model/ListCanceled.php @@ -103,6 +103,10 @@ class ListCanceled extends BaseListCanceled { $oListInbox = new ListInbox(); $oListInbox->removeAll($data['APP_UID']); + $users = new Users(); + $users->refreshTotal($data['USR_UID'], 'removed', 'inbox'); + $users->refreshTotal($data['USR_UID'], 'add', 'canceled'); + $con = Propel::getConnection( ListCanceledPeer::DATABASE_NAME ); try { $this->fromArray( $data, BasePeer::TYPE_FIELDNAME ); diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index b9539d64a..b029ba692 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -118,6 +118,14 @@ class ListPaused extends BaseListPaused { $oListInbox = new ListInbox(); $oListInbox->remove($data['APP_UID'], $data['DEL_INDEX']); + $users = new Users(); + if ($data['APP_STATUS'] == 'DRAFT') { + $users->refreshTotal($data['USR_UID'], 'removed', 'draft'); + } else { + $users->refreshTotal($data['USR_UID'], 'removed', 'inbox'); + } + $users->refreshTotal($data['USR_UID'], 'add', 'paused'); + $con = Propel::getConnection( ListPausedPeer::DATABASE_NAME ); try { $this->fromArray( $data, BasePeer::TYPE_FIELDNAME ); @@ -172,8 +180,20 @@ class ListPaused extends BaseListPaused { * @throws type * */ - public function remove ($app_uid, $del_index) + public function remove ($app_uid, $del_index, $data_inbox) { + $users = new Users(); + $users->refreshTotal($data_inbox['USR_UID'], 'removed', 'paused'); + + $oRow = ApplicationPeer::retrieveByPK($app_uid); + $aFields = $oRow->toArray( BasePeer::TYPE_FIELDNAME ); + $data_inbox['APP_STATUS'] = $aFields['APP_STATUS']; + if ($data_inbox['APP_STATUS'] == 'TO_DO') { + $users->refreshTotal($data_inbox['USR_UID'], 'add', 'inbox'); + } + $listInbox = new ListInbox(); + $listInbox->newRow($data_inbox, $data_inbox['USR_UID']); + $con = Propel::getConnection( ListPausedPeer::DATABASE_NAME ); try { $this->setAppUid($app_uid); From 19641bbca7ee01a43009aaebabfafc4bc8a92419 Mon Sep 17 00:00:00 2001 From: Brayan Pereyra Date: Wed, 11 Mar 2015 17:16:57 -0400 Subject: [PATCH 3/8] Validacion en caso de Caso Pauseado en DRAFT --- workflow/engine/classes/model/ListInbox.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index b30d7c3c1..d0e8dae5a 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -236,7 +236,9 @@ class ListInbox extends BaseListInbox if ($data['APP_STATUS'] == 'DRAFT') { $users->refreshTotal($data['USR_UID'], 'add', 'draft'); } else { - if ($data['DEL_INDEX'] == 2) { + $oRow = ApplicationPeer::retrieveByPK($data['APP_UID']); + $aFields = $oRow->toArray( BasePeer::TYPE_FIELDNAME ); + if ($data['DEL_INDEX'] == 2 || $aFields['APP_STATUS'] == 'DRAFT') { $criteria = new Criteria(); $criteria->addSelectColumn(SubApplicationPeer::APP_UID); $criteria->add( SubApplicationPeer::APP_UID, $data['APP_UID'], Criteria::EQUAL ); From 9597adc22c819e72ca794880dec7e5292166c68b Mon Sep 17 00:00:00 2001 From: Brayan Pereyra Date: Thu, 12 Mar 2015 11:58:48 -0400 Subject: [PATCH 4/8] Correccion de Contador PARTICIPATED en caso de SELF SERVICES --- workflow/engine/classes/model/ListInbox.php | 33 +++++++- .../classes/model/ListParticipatedLast.php | 80 +++++++++---------- 2 files changed, 71 insertions(+), 42 deletions(-) diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index d0e8dae5a..4ceee2a01 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -55,6 +55,19 @@ class ListInbox extends BaseListInbox $listParticipatedLast->create($data); $listParticipatedLast = new ListParticipatedLast(); $listParticipatedLast->refresh($data); + } else { + $data['USR_UID'] = $data['DEL_PREVIOUS_USR_UID']; + $data['DEL_CURRENT_USR_LASTNAME'] = ''; + $data['DEL_CURRENT_USR_USERNAME'] = ''; + $data['DEL_CURRENT_USR_FIRSTNAME'] = ''; + + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->refresh($data, $isSelfService); + $data['USR_UID'] = 'SELF_SERVICES'; + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->create($data); + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->refresh($data, $isSelfService); } return $result; @@ -71,11 +84,27 @@ class ListInbox extends BaseListInbox * @return type * @throws type */ - public function update($data, $addCountInbox = false) + public function update($data, $isSelfService = false) { - if ($addCountInbox) { + if ($isSelfService) { $users = new Users(); $users->refreshTotal($data['USR_UID'], 'add', 'inbox'); + + //Update - WHERE + $criteriaWhere = new Criteria("workflow"); + $criteriaWhere->add(ListParticipatedLastPeer::APP_UID, $data["APP_UID"], Criteria::EQUAL); + $criteriaWhere->add(ListParticipatedLastPeer::USR_UID, 'SELF_SERVICES', Criteria::EQUAL); + $criteriaWhere->add(ListParticipatedLastPeer::DEL_INDEX, $data["DEL_INDEX"], Criteria::EQUAL); + + //Update - SET + $criteriaSet = new Criteria("workflow"); + $criteriaSet->add(ListParticipatedLastPeer::USR_UID, $data['USR_UID']); + BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); + + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->refresh($data); + $users = new Users(); + $users->refreshTotal($data['USR_UID'], 'add', 'participated'); } $con = Propel::getConnection( ListInboxPeer::DATABASE_NAME ); try { diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index ba1cadf12..ebcf6d959 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -26,19 +26,6 @@ class ListParticipatedLast extends BaseListParticipatedLast */ public function create($data) { - $criteria = new Criteria(); - $criteria->addSelectColumn(UsersPeer::USR_USERNAME); - $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $criteria->add( UsersPeer::USR_UID, $data['USR_UID'], Criteria::EQUAL ); - $dataset = UsersPeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - $aRow = $dataset->getRow(); - $data['DEL_CURRENT_USR_USERNAME'] = $aRow['USR_USERNAME']; - $data['DEL_CURRENT_USR_FIRSTNAME'] = $aRow['USR_FIRSTNAME']; - $data['DEL_CURRENT_USR_LASTNAME'] = $aRow['USR_LASTNAME']; - $criteria = new Criteria(); $criteria->addSelectColumn(ApplicationPeer::APP_STATUS); $criteria->add( ApplicationPeer::APP_UID, $data['APP_UID'], Criteria::EQUAL ); @@ -48,18 +35,23 @@ class ListParticipatedLast extends BaseListParticipatedLast $aRow = $dataset->getRow(); $data['APP_STATUS'] = $aRow['APP_STATUS']; - //Update - WHERE - $criteriaWhere = new Criteria("workflow"); - $criteriaWhere->add(ListParticipatedLastPeer::APP_UID, $data["APP_UID"], Criteria::EQUAL); - //Update - SET - $criteriaSet = new Criteria("workflow"); - $criteriaSet->add(ListParticipatedLastPeer::DEL_CURRENT_USR_USERNAME, $data['DEL_CURRENT_USR_USERNAME']); - $criteriaSet->add(ListParticipatedLastPeer::DEL_CURRENT_USR_FIRSTNAME, $data['DEL_CURRENT_USR_FIRSTNAME']); - $criteriaSet->add(ListParticipatedLastPeer::DEL_CURRENT_USR_LASTNAME, $data['DEL_CURRENT_USR_LASTNAME']); - BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); + if ($data['USR_UID'] != 'SELF_SERVICES') { + $criteria = new Criteria(); + $criteria->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); + $criteria->add( UsersPeer::USR_UID, $data['USR_UID'], Criteria::EQUAL ); + $dataset = UsersPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + $aRow = $dataset->getRow(); + $data['DEL_CURRENT_USR_USERNAME'] = $aRow['USR_USERNAME']; + $data['DEL_CURRENT_USR_FIRSTNAME'] = $aRow['USR_FIRSTNAME']; + $data['DEL_CURRENT_USR_LASTNAME'] = $aRow['USR_LASTNAME']; - $users = new Users(); - $users->refreshTotal($data['USR_UID'], 'add', 'participated'); + $users = new Users(); + $users->refreshTotal($data['USR_UID'], 'add', 'participated'); + } $con = Propel::getConnection( ListParticipatedLastPeer::DATABASE_NAME ); try { @@ -115,24 +107,32 @@ class ListParticipatedLast extends BaseListParticipatedLast * @throws type * */ - public function refresh ($data) + public function refresh ($data, $isSelfService = false) { $data['APP_STATUS'] = (empty($data['APP_STATUS'])) ? 'TO_DO' : $data['APP_STATUS']; - $criteria = new Criteria(); - $criteria->addSelectColumn(UsersPeer::USR_USERNAME); - $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); - $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $criteria->add( UsersPeer::USR_UID, $data['USR_UID'], Criteria::EQUAL ); - $dataset = UsersPeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - $aRow = $dataset->getRow(); - - $data['DEL_CURRENT_USR_UID'] = $data['USR_UID']; - $data['DEL_CURRENT_USR_USERNAME'] = $aRow['USR_USERNAME']; - $data['DEL_CURRENT_USR_FIRSTNAME'] = $aRow['USR_FIRSTNAME']; - $data['DEL_CURRENT_USR_LASTNAME'] = $aRow['USR_LASTNAME']; - $this->update($data); + if (!$isSelfService) { + $criteria = new Criteria(); + $criteria->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); + $criteria->add( UsersPeer::USR_UID, $data['USR_UID'], Criteria::EQUAL ); + $dataset = UsersPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + $aRow = $dataset->getRow(); + + //Update - WHERE + $criteriaWhere = new Criteria("workflow"); + $criteriaWhere->add(ListParticipatedLastPeer::APP_UID, $data["APP_UID"], Criteria::EQUAL); + //Update - SET + $criteriaSet = new Criteria("workflow"); + $criteriaSet->add(ListParticipatedLastPeer::DEL_CURRENT_USR_USERNAME, $aRow['USR_USERNAME']); + $criteriaSet->add(ListParticipatedLastPeer::DEL_CURRENT_USR_FIRSTNAME, $aRow['USR_FIRSTNAME']); + $criteriaSet->add(ListParticipatedLastPeer::DEL_CURRENT_USR_LASTNAME, $aRow['USR_LASTNAME']); + BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); + + } + $this->update($data); } /** From 71d88faf4011a5f9e9a27247920625f515ab82b5 Mon Sep 17 00:00:00 2001 From: Brayan Pereyra Date: Thu, 12 Mar 2015 16:03:04 -0400 Subject: [PATCH 5/8] Actualizacion de PARTICIPATED cuando obtiene un SELF_SERVICE --- workflow/engine/classes/model/ListInbox.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index 4ceee2a01..05e2cd51f 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -90,6 +90,9 @@ class ListInbox extends BaseListInbox $users = new Users(); $users->refreshTotal($data['USR_UID'], 'add', 'inbox'); + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->remove($data['APP_UID'], $data['USR_UID']); + //Update - WHERE $criteriaWhere = new Criteria("workflow"); $criteriaWhere->add(ListParticipatedLastPeer::APP_UID, $data["APP_UID"], Criteria::EQUAL); From 36f2bba73af20419a61937107145ec77c455cb5c Mon Sep 17 00:00:00 2001 From: Brayan Pereyra Date: Thu, 12 Mar 2015 17:55:58 -0400 Subject: [PATCH 6/8] Eliminiacion de caso en estado DRAFT --- workflow/engine/classes/class.case.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index f7faef704..117d34823 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -1175,7 +1175,25 @@ class Cases if ($this->appSolr != null) { $this->appSolr->deleteApplicationSearchIndex($sAppUid); } + /*----------------------------------********---------------------------------*/ + $criteria = new Criteria(); + $criteria->addSelectColumn( ListInboxPeer::USR_UID ); + $criteria->add( ListInboxPeer::APP_UID, $sAppUid, Criteria::EQUAL ); + $dataset = ApplicationPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + while($dataset->next()) { + $aRow = $dataset->getRow(); + $users = new Users(); + $users->refreshTotal($aRow['USR_UID'], 'remove', 'draft'); + } + $oCriteria = new Criteria('workflow'); + $oCriteria->add(ListInboxPeer::APP_UID, $sAppUid); + ListInboxPeer::doDelete($oCriteria); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(ListParticipatedLastPeer::APP_UID, $sAppUid); + ListParticipatedLastPeer::doDelete($oCriteria); + /*----------------------------------********---------------------------------*/ return $result; } catch (exception $e) { throw ($e); From ba2cf9bc40e786af091e90ba41a846fc30f7827e Mon Sep 17 00:00:00 2001 From: Brayan Pereyra Date: Fri, 13 Mar 2015 08:40:59 -0400 Subject: [PATCH 7/8] Corrercion de eliminacion en contador PARTICIPATED al eliminar correccion --- workflow/engine/classes/class.case.php | 1 + 1 file changed, 1 insertion(+) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 117d34823..667b7f96e 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -1185,6 +1185,7 @@ class Cases $aRow = $dataset->getRow(); $users = new Users(); $users->refreshTotal($aRow['USR_UID'], 'remove', 'draft'); + $users->refreshTotal($aRow['USR_UID'], 'remove', 'participated'); } $oCriteria = new Criteria('workflow'); From fd9d0e8ca62b63b5bd74f2a6bcaf976835e8eb40 Mon Sep 17 00:00:00 2001 From: Brayan Pereyra Date: Fri, 13 Mar 2015 15:53:14 -0400 Subject: [PATCH 8/8] Correccion de errores en reasignacion --- workflow/engine/classes/class.case.php | 28 ++++++++++++++++--- .../engine/methods/cases/casesList_Ajax.php | 2 ++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 667b7f96e..18d797232 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -1930,11 +1930,11 @@ class Cases $c->add(AppDelegationPeer::APP_UID, $sAppUid); $c->add(AppDelegationPeer::DEL_INDEX, $iDelIndex); $rowObj = AppDelegationPeer::doSelect($c); - G::LoadClass('dates'); - $oDates = new dates(); + $user = ''; foreach ($rowObj as $appDel) { $appDel->setDelThreadStatus('CLOSED'); $appDel->setDelFinishDate('now'); + $user = $appDel->getUsrUid(); if ($appDel->Validate()) { $appDel->Save(); } else { @@ -1951,7 +1951,7 @@ class Cases $data['DEL_THREAD_STATUS'] = 'CLOSED'; $data['APP_UID'] = $sAppUid; $data['DEL_INDEX'] = $iDelIndex; - $data['USR_UID'] = $appDel->getUsrUid(); + $data['USR_UID'] = $user; $listParticipatedLast = new ListParticipatedLast(); $listParticipatedLast->refresh($data); /*----------------------------------********---------------------------------*/ @@ -4281,6 +4281,27 @@ class Cases $this->appSolr->updateApplicationSearchIndex($sApplicationUID); } + /*----------------------------------********---------------------------------*/ + $oCriteria = new Criteria('workflow'); + $oCriteria->add(ListParticipatedLastPeer::APP_UID, $aData['APP_UID']); + $oCriteria->add(ListParticipatedLastPeer::USR_UID, $sUserUID); + $oCriteria->add(ListParticipatedLastPeer::DEL_INDEX, $iDelegation); + ListParticipatedLastPeer::doDelete($oCriteria); + $users = new Users(); + $users->refreshTotal($sUserUID, 'remove', 'participated'); + + $aFieldsDel = array_merge($aData, $aFieldsDel); + $aFieldsDel['USR_UID'] = $newUserUID; + $inbox = new ListInbox(); + $inbox->newRow($aFieldsDel, $sUserUID); + $users = new Users(); + if ($aFields['APP_STATUS'] == 'DRAFT') { + $users->refreshTotal($sUserUID, 'remove', 'draft'); + } else if ($iDelegation == 2) { + $users->refreshTotal($sUserUID, 'add', 'draft'); + $users->refreshTotal($sUserUID, 'remove', 'inbox'); + } + /*----------------------------------********---------------------------------*/ $this->getExecuteTriggerProcess($sApplicationUID, 'REASSIGNED'); return true; } @@ -6673,7 +6694,6 @@ class Cases } } - require_once 'classes/model/Users.php'; $c = new Criteria('workflow'); $c->addSelectColumn(UsersPeer::USR_UID); $c->addSelectColumn(UsersPeer::USR_USERNAME); diff --git a/workflow/engine/methods/cases/casesList_Ajax.php b/workflow/engine/methods/cases/casesList_Ajax.php index ed5a00827..8a4b48504 100755 --- a/workflow/engine/methods/cases/casesList_Ajax.php +++ b/workflow/engine/methods/cases/casesList_Ajax.php @@ -216,6 +216,7 @@ if ($actionAjax == "getUsersToReassign") { G::LoadClass( 'tasks' ); $task = new Task(); $tasks = $task->load($_SESSION['TASK']); + $result = new stdclass(); $result->data = $case->getUsersToReassign( $_SESSION['TASK'], $_SESSION['USER_LOGGED'], $tasks['PRO_UID'] ); print G::json_encode( $result ); } @@ -240,6 +241,7 @@ if ($actionAjax == 'reassignCase') { //print_r($caseData); $data['APP_NUMBER'] = $caseData['APP_NUMBER']; $data['USER'] = $userData['USR_LASTNAME'] . ' ' . $userData['USR_FIRSTNAME']; //TODO change with the farmated username from environment conf + $result = new stdclass(); $result->status = 0; $result->msg = G::LoadTranslation( 'ID_REASSIGNMENT_SUCCESS', SYS_LANG, $data ); } catch (Exception $e) {