From 1a25eb2f05f26c5e93c7920673e7e814075af6dc Mon Sep 17 00:00:00 2001 From: Hector Cortez Date: Fri, 30 Aug 2013 11:50:54 -0400 Subject: [PATCH] BUG 11075 Adicion de triggers: UP-DOWN no funciona SOLVED MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - En la asignación de triggers a un Step, es difícil poder mover la posición de un trigger (en cualquiera de las opciones: Before, After, Before Assignment, Before Routing,etc)con el Down y Up. - Adjustment in generating task indices and re-indexed position by task. --- workflow/engine/classes/model/StepTrigger.php | 44 ++++++++++++++++++- workflow/engine/methods/steps/steps_Ajax.php | 12 ++++- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/workflow/engine/classes/model/StepTrigger.php b/workflow/engine/classes/model/StepTrigger.php index cb44b9fd7..389ea4131 100755 --- a/workflow/engine/classes/model/StepTrigger.php +++ b/workflow/engine/classes/model/StepTrigger.php @@ -173,13 +173,16 @@ class StepTrigger extends BaseStepTrigger } } - public function getNextPosition ($sStepUID, $sType) + public function getNextPosition ($sStepUID, $sType, $sTaskId = '') { try { $oCriteria = new Criteria( 'workflow' ); $oCriteria->addSelectColumn( '(COUNT(*) + 1) AS POSITION' ); $oCriteria->add( StepTriggerPeer::STEP_UID, $sStepUID ); $oCriteria->add( StepTriggerPeer::ST_TYPE, $sType ); + if ($sTaskId != '') { + $oCriteria->add( StepTriggerPeer::TAS_UID , $sTaskId ); + } $oDataset = StepTriggerPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); @@ -190,6 +193,44 @@ class StepTrigger extends BaseStepTrigger } } + /** + * + * + * @param type $sStepUID + * @param type $sTaskUID + * @param type $sType + * + * @throws Exception + */ + public function orderPosition ($sStepUID, $sTaskUID, $sType) + { + try { + $oCriteria = new Criteria( 'workflow' ); + $oCriteria->add( StepTriggerPeer::STEP_UID, $sStepUID ); + $oCriteria->add( StepTriggerPeer::TAS_UID, $sTaskUID ); + $oCriteria->add( StepTriggerPeer::ST_TYPE, $sType ); + $oCriteria->addAscendingOrderByColumn(StepTriggerPeer::ST_POSITION); + $oDataset = StepTriggerPeer::doSelectRS( $oCriteria ); + + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + $aRow = $oDataset->getRow(); + if ((int)$aRow['ST_POSITION'] > 1 ) { + $rowNro = 1; + while ($aRow = $oDataset->getRow()) { + $oStep = StepTriggerPeer::retrieveByPK( $aRow['STEP_UID'], $aRow['TAS_UID'], $aRow['TRI_UID'], $aRow['ST_TYPE'] ); + $oStep->setStPosition( $rowNro ); + $oStep->save(); + $oDataset->next(); + $rowNro++; + } + } + + } catch (Exception $oException) { + throw $oException; + } + } + public function reOrder ($sStepUID, $sTaskUID, $sType, $iPosition) { try { @@ -199,6 +240,7 @@ class StepTrigger extends BaseStepTrigger $oCriteria->add( StepTriggerPeer::ST_TYPE, $sType ); $oCriteria->add( StepTriggerPeer::ST_POSITION, $iPosition, '>' ); $oDataset = StepTriggerPeer::doSelectRS( $oCriteria ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { diff --git a/workflow/engine/methods/steps/steps_Ajax.php b/workflow/engine/methods/steps/steps_Ajax.php index 8c8303ebb..351506293 100755 --- a/workflow/engine/methods/steps/steps_Ajax.php +++ b/workflow/engine/methods/steps/steps_Ajax.php @@ -63,6 +63,10 @@ try { $oProcessMap = new ProcessMap(); global $G_PUBLISH; $G_PUBLISH = new Publisher(); + + $oStepTrigger = new StepTrigger(); + $oStepTrigger->orderPosition( $aData['sStep'], $_SESSION['TASK'], $aData['sType']); + if ($aData['sType'] == 'BEFORE') { $G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'steps/triggersBefore_List', $oProcessMap->getStepTriggersCriteria( $aData['sStep'], $_SESSION['TASK'], $aData['sType'] ), array ('STEP' => $aData['sStep']) ); } else { @@ -114,12 +118,16 @@ try { } break; case 'assignTrigger': - $aFields = array ('STEP_UID' => $aData['STEP_UID'],'TAS_UID' => $_SESSION['TASK'],'TRI_UID' => $aData['TRI_UID'],'ST_TYPE' => $aData['ST_TYPE'] + $aFields = array ( + 'STEP_UID' => $aData['STEP_UID'], + 'TAS_UID' => $_SESSION['TASK'], + 'TRI_UID' => $aData['TRI_UID'], + 'ST_TYPE' => $aData['ST_TYPE'] ); $oStepTrigger = new StepTrigger(); $oStepTrigger->create( $aFields ); $aFields['ST_CONDITION'] = $aData['ST_CONDITION']; - $aFields['ST_POSITION'] = ($oStepTrigger->getNextPosition( $aData['STEP_UID'], $aData['ST_TYPE'] ) - 1); + $aFields['ST_POSITION'] = ($oStepTrigger->getNextPosition( $aData['STEP_UID'], $aData['ST_TYPE'], $_SESSION['TASK'] ) - 1 ); $oStepTrigger->update( $aFields ); break; case 'editTriggerCondition':