From 908a1e0b289b78f85bec8b6aa573e583f13dfdd6 Mon Sep 17 00:00:00 2001 From: mcuiza Date: Wed, 2 Mar 2016 17:08:45 -0400 Subject: [PATCH] HOR-310: Add option to delete cases correccion de observaciones correcion de obsesrvaciones correcion observaciones correcion observaciones correccion de observaciones correccion observaciones --- workflow/engine/classes/class.case.php | 32 +++++--- workflow/engine/classes/model/Process.php | 65 +++++++++++++++ .../engine/methods/processes/mainInit.php | 7 ++ .../processes/processes_DeleteCases.php | 25 ++++++ workflow/engine/templates/processes/main.js | 80 +++++++++++++++++++ 5 files changed, 198 insertions(+), 11 deletions(-) create mode 100644 workflow/engine/methods/processes/processes_DeleteCases.php diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index c7fa8ce91..24e6a0ecf 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -1126,23 +1126,16 @@ class Cases * @return Fields */ - public function removeCase($sAppUid) + public function removeCase($sAppUid, $deleteDelegation = true) { try { $this->getExecuteTriggerProcess($sAppUid, 'DELETED'); - $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(); + if($deleteDelegation) { + //Delete the delegations of a application + $this->deleteDelegation($sAppUid); } //Delete the documents assigned to a application $oCriteria2 = new Criteria('workflow'); @@ -1237,6 +1230,9 @@ class Cases $oCriteria = new Criteria('workflow'); $oCriteria->add(ListParticipatedLastPeer::APP_UID, $sAppUid); ListParticipatedLastPeer::doDelete($oCriteria); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(ListPausedPeer::APP_UID, $sAppUid); + ListPausedPeer::doDelete($oCriteria); /*----------------------------------********---------------------------------*/ return $result; } catch (exception $e) { @@ -7253,5 +7249,19 @@ class Cases return $processList; } + public function deleteDelegation($sAppUid) + { + $oAppDelegation = new AppDelegation(); + $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(); + } + } + } diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php index d843f2544..bacade3b1 100755 --- a/workflow/engine/classes/model/Process.php +++ b/workflow/engine/classes/model/Process.php @@ -1052,5 +1052,70 @@ class Process extends BaseProcess } return $aProc; } + + public function deleteProcessCases($proUid) + { + try { + /*get cases by process uid*/ + $oCase = new Cases(); + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->addSelectColumn( ApplicationPeer::APP_UID); + $oCriteria->add( ApplicationPeer::PRO_UID, $proUid ); + $oDataset = ApplicationPeer::doSelectRS( $oCriteria, Propel::getDbConnection('workflow_ro') ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + while ($oDataset->next()) { + $row = $oDataset->getRow(); + $oCase->removeCase($row['APP_UID'], false); + } + } catch(Exception $e) { + throw ($e); + } + } + + public function refreshUserAllCountersByProcessesGroupUid($proUidArray) + { + $aTypes = array( + 'to_do', + 'draft', + 'cancelled', + 'sent', + 'paused', + 'completed', + 'selfservice' + ); + $usersArray = array(); + $users = new Users(); + $oCase = new Cases(); + $oCriteria = new Criteria(); + $oCriteria->addSelectColumn( AppDelegationPeer::APP_UID ); + $oCriteria->addSelectColumn( AppDelegationPeer::USR_UID ); + $oCriteria->setDistinct(); + $oCriteria->add( AppDelegationPeer::PRO_UID, $proUidArray, Criteria::IN ); + $oRuleSet = AppDelegationPeer::doSelectRS( $oCriteria ); + $oRuleSet->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + while($oRuleSet->next()) { + $row = $oRuleSet->getRow(); + if(isset($row['USR_UID'])) { + $usersArray[$row['USR_UID']] = $row['USR_UID']; + } + $oCase->deleteDelegation($row['APP_UID']); + } + + foreach($usersArray as $value) { + $oAppCache = new AppCacheView(); + $aCount = $oAppCache->getAllCounters( $aTypes, $value ); + $newData = array( + 'USR_UID' => $value, + 'USR_TOTAL_INBOX' => $aCount['to_do'], + 'USR_TOTAL_DRAFT' => $aCount['draft'], + 'USR_TOTAL_CANCELLED' => $aCount['cancelled'], + 'USR_TOTAL_PARTICIPATED' => $aCount['sent'], + 'USR_TOTAL_PAUSED' => $aCount['paused'], + 'USR_TOTAL_COMPLETED' => $aCount['completed'], + 'USR_TOTAL_UNASSIGNED' => $aCount['selfservice'] + ); + $users->update($newData); + } + } } diff --git a/workflow/engine/methods/processes/mainInit.php b/workflow/engine/methods/processes/mainInit.php index a8513b8cc..70f96ee8f 100755 --- a/workflow/engine/methods/processes/mainInit.php +++ b/workflow/engine/methods/processes/mainInit.php @@ -80,6 +80,13 @@ $oHeadPublisher->assign("arrayMenuNewOptionPlugin", $arrayMenuNewOptionPlugin); $oHeadPublisher->assign("arrayContextMenuOptionPlugin", $arrayContextMenuOptionPlugin); $oHeadPublisher->assign('extJsViewState', $oHeadPublisher->getExtJsViewState()); +$deleteCasesFlag = false; +global $RBAC; +if($RBAC->userCanAccess('DELETE_PROCESS_CASES') === 1) { + $deleteCasesFlag = true; +} +$oHeadPublisher->assign('deleteCasesFlag', $deleteCasesFlag); + $oPluginRegistry = & PMPluginRegistry::getSingleton(); $callBackFile = $oPluginRegistry->getImportProcessCallback(); $file = false; diff --git a/workflow/engine/methods/processes/processes_DeleteCases.php b/workflow/engine/methods/processes/processes_DeleteCases.php new file mode 100644 index 000000000..d90bf3810 --- /dev/null +++ b/workflow/engine/methods/processes/processes_DeleteCases.php @@ -0,0 +1,25 @@ +requirePermissions( 'DELETE_PROCESS_CASES', 'PM_FACTORY' ); + +try { + $uids = explode(',', $_POST['PRO_UIDS']); + $oProcess = new Process(); + foreach ($uids as $uid) { + $oProcess->deleteProcessCases($uid); + } + $oProcess->refreshUserAllCountersByProcessesGroupUid($uids); + + $resp = new StdClass(); + $resp->status = true; + $resp->msg = G::LoadTranslation('ID_ALL_RECORDS_DELETED_SUCESSFULLY'); + + echo G::json_encode($resp); + +} catch (Exception $e) { + $resp->status = false; + $resp->msg = $e->getMessage(); + echo G::json_encode($resp); +} + + diff --git a/workflow/engine/templates/processes/main.js b/workflow/engine/templates/processes/main.js index d2cca1855..30218cc00 100755 --- a/workflow/engine/templates/processes/main.js +++ b/workflow/engine/templates/processes/main.js @@ -360,6 +360,12 @@ Ext.onReady(function(){ importProcessGlobal.processFileType = "pm"; importProcess(); } + },{ + id: 'deleteCasesId', + text: _('ID_DELETE_CASES'), + iconCls: "button_menu_ext ss_sprite ss_cross", + handler: deleteCases, + hidden: true },{ xtype: 'tbfill' },{ @@ -429,6 +435,10 @@ Ext.onReady(function(){ } }); + if(deleteCasesFlag) { + Ext.getCmp("deleteCasesId").show(); + } + processesGrid.store.load({params: {"function": "languagesList", "start": 0, "limit": 25}}); processesGrid.addListener('rowcontextmenu', onMessageContextMenu,this); processesGrid.on('rowcontextmenu', function (grid, rowIndex, evt) { @@ -824,6 +834,76 @@ deleteProcess = function(){ } } +var deleteCases = function(){ + var rows = processesGrid.getSelectionModel().getSelections(), + totalCases = 0, + ids = Array(), + PRO_UIDS, + i; + if( rows.length > 0 ) { + for(i=0; i