From cec40efb8accbb1783ca42f1bac688cc0adb18df Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Tue, 3 Apr 2012 18:40:30 -0400 Subject: [PATCH] BUG 8775 Add validation to prevent deletion of tasks... SOLVED - Problem, a task is deleted if you have or not cases - Added validation, that prevents a task is deleted if you have cases --- .../engine/js/processmap/core/processmap.js | 54 ++++++++++++++----- .../methods/processes/processes_Ajax.php | 34 ++++++++++++ 2 files changed, 74 insertions(+), 14 deletions(-) diff --git a/workflow/engine/js/processmap/core/processmap.js b/workflow/engine/js/processmap/core/processmap.js index ad03b4c3f..2013a2d4d 100755 --- a/workflow/engine/js/processmap/core/processmap.js +++ b/workflow/engine/js/processmap/core/processmap.js @@ -1511,22 +1511,48 @@ var processmap=function(){ },args:index})}, {image:"/images/delete.png",text:G_STRINGS.ID_PROCESSMAP_DELETE_TASK,launch:this.parent.closure({instance:this,method:function(index){ var data = this.data.db.task[index]; - new this.parent.module.app.confirm().make({ - label:G_STRINGS.ID_PROCESSMAP_CONFIRM_DELETE_TASK+" "+ data.label, - action:function() - { - data.object.drag.flush(); - this.dropables.derivation.unregister(data.object.dropIndex); - this.data.render.deleteDerivation(data.uid,true); - this.parent.dom.remove(data.object.elements); - var r = new leimnud.module.rpc.xmlhttp({ - url:this.options.dataServer, - args:"action=deleteTask&data="+{pro_uid:this.options.uid,tas_uid:data.uid}.toJSONString() - }); - r.make(); - }.extend(this) + + var r = new leimnud.module.rpc.xmlhttp({ + url: this.options.dataServer, + args: "action=taskCases&data=" + { + task_uid: data.uid + }.toJSONString() }); + r.callback = function (rpc) { + var rs = rpc.xmlhttp.responseText.parseJSON(); + var casesNumRec = rs.casesNumRec; + + if (casesNumRec == 0) { + new this.parent.module.app.confirm().make({ + label: G_STRINGS.ID_PROCESSMAP_CONFIRM_DELETE_TASK + " " + data.label, + action: function () { + data.object.drag.flush(); + this.dropables.derivation.unregister(data.object.dropIndex); + this.data.render.deleteDerivation(data.uid, true); + this.parent.dom.remove(data.object.elements); + var r2 = new leimnud.module.rpc.xmlhttp({ + url: this.options.dataServer, + args: "action=deleteTask&data=" + { + pro_uid: this.options.uid, + tas_uid: data.uid + }.toJSONString() + }); + r2.make(); + }.extend(this) + }); + } + else { + var msg = _("ID_TASK_CANT_DELETE"); + msg = msg.replace("{0}", data.label); + msg = msg.replace("{1}", casesNumRec); + + new this.parent.module.app.info().make({label: msg}); + } + }.extend(this); + r.make(); + return; + if(confirm(G_STRINGS.ID_PROCESSMAP_CONFIRM_DELETE_TASK+" "+ data.label)) { data.object.drag.flush(); diff --git a/workflow/engine/methods/processes/processes_Ajax.php b/workflow/engine/methods/processes/processes_Ajax.php index 85f07933f..c3cd4b32d 100755 --- a/workflow/engine/methods/processes/processes_Ajax.php +++ b/workflow/engine/methods/processes/processes_Ajax.php @@ -501,6 +501,40 @@ try { $G_PUBLISH->AddContent('xmlform', 'xmlform', 'processes/processes_FileEditCreateEmpty', ''); G::RenderPage('publish', 'raw'); break; + + case "taskCases": + require_once ("classes/model/Application.php"); + require_once ("classes/model/AppDelegation.php"); + require_once ("classes/model/AppDelay.php"); + + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn("COUNT(DISTINCT APPLICATION.APP_UID)"); + + $criteria->addJoin(ApplicationPeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::LEFT_JOIN); + $criteria->addJoin(ApplicationPeer::APP_UID, AppDelayPeer::APP_UID, Criteria::LEFT_JOIN); + + $criteria->add(AppDelegationPeer::TAS_UID, $oData->task_uid); + + $criteria->add( + $criteria->getNewCriterion(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL)->addOr( + $criteria->getNewCriterion(AppDelayPeer::APP_DELAY_UID, null, Criteria::ISNOTNULL)->addAnd( + $criteria->getNewCriterion(AppDelayPeer::APP_TYPE, array("REASSIGN", "ADHOC", "CANCEL"), Criteria::NOT_IN))->addAnd( + $criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, null, Criteria::ISNULL)->addOr( + $criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, 0)) + ) + ) + ); + + $rs = ApplicationPeer::doSelectRS($criteria); + + $rs->next(); + $row = $rs->getRow(); + + $response->casesNumRec = intval($row[0]); + + $json = new Services_JSON(); + $sOutput = $json->encode($response); + break; } if( isset($sOutput) ) die($sOutput);