From 58ddaa234781959f112a36f8a3658eaac743769a Mon Sep 17 00:00:00 2001 From: Gustavo Adolfo Cruz Laura Date: Fri, 8 Apr 2016 18:01:40 -0400 Subject: [PATCH] MT-122 --- workflow/engine/classes/class.processes.php | 20 +++++++++++++++ workflow/engine/classes/model/Route.php | 25 +++++++++++++++++++ .../Migrator/GranularExporter.php | 2 +- .../Migrator/ProcessDefinitionMigrator.php | 3 ++- 4 files changed, 48 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index 962e378ea..8f4159a21 100755 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -1502,6 +1502,26 @@ class Processes return $oTask->createRouteRows($aRoutes); } + /** + * This string replace duplicated routes based on the tasks origin and end + * if the route existed is removed and regenerated since probably the last + * data is an updated version and we need a different functionality than the + * createRouteRows method. + * @param $aRoutes array + * @return $oTask Tasks array + */ + public function replaceRouteRows($aRoutes) + { + foreach ($aRoutes as $routeData) { + $route = new \Route(); + foreach ($route->routeExistsFiltered($routeData) as $duplicatedRoute) { + $routeData = array_replace_recursive($duplicatedRoute, $routeData); + $route->remove($duplicatedRoute['ROU_UID']); + } + $route->create($routeData); + } + } + /** * Update Route Rows from a $aRoutes array data and returns those in an array. * diff --git a/workflow/engine/classes/model/Route.php b/workflow/engine/classes/model/Route.php index d9b775482..ff6775c6f 100755 --- a/workflow/engine/classes/model/Route.php +++ b/workflow/engine/classes/model/Route.php @@ -252,6 +252,31 @@ class Route extends BaseRoute } } + public function routeExistsFiltered($aData) + { + $con = Propel::getConnection( RoutePeer::DATABASE_NAME ); + try { + if (!empty($aData)) { + $c = new Criteria('workflow'); + $c->addSelectColumn("ROUTE.*"); + $c->add(RoutePeer::PRO_UID, $aData['PRO_UID'], Criteria::EQUAL); + $c->add(RoutePeer::TAS_UID, $aData['TAS_UID'], Criteria::EQUAL); + $c->add(RoutePeer::ROU_NEXT_TASK, $aData['ROU_NEXT_TASK'], Criteria::EQUAL); + } + + $query =$c->toString(); + $rs = RoutePeer::doSelectRS($c); + $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $routes = array(); + while ($rs->next()) { + $routes[] = $rs->getRow(); + } + return $routes; + } catch (Exception $oError) { + throw ($oError); + } + } + /** * Validate value for a variable that only accepts some determinated values * diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php index 5186c7e03..6edb1df5e 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php @@ -145,7 +145,7 @@ class GranularExporter protected function mergeData($migratorData) { $migratorData = $this->verifyConsistenceData($migratorData); - $this->data = array_merge_recursive($this->data, $migratorData); + $this->data = array_replace_recursive($migratorData, $this->data); } /** diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php index 473647831..571903dfe 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php @@ -56,12 +56,13 @@ class ProcessDefinitionMigrator implements Importable, Exportable //Workflow elements $this->processes->updateProcessRow($data['workflow']['process']); $this->processes->createTaskRows($data['workflow']['tasks']); - $this->processes->createTaskUserRows($data['workflow']['taskusers']); $this->processes->createRouteRows($data['workflow']['routes']); + $this->processes->replaceRouteRows($data['workflow']['routes']); $this->processes->createLaneRows($data['workflow']['lanes']); $this->processes->createGatewayRows($data['workflow']['gateways']); $this->processes->createStepRows($data['workflow']['steps']); $this->processes->createStepTriggerRows($data['workflow']['steptriggers']); + $this->processes->createTaskUserRows($data['workflow']['taskusers']); $this->processes->createSubProcessRows($data['workflow']['subProcess']); $this->processes->createCaseTrackerRows($data['workflow']['caseTracker']); $this->processes->createCaseTrackerObjectRows($data['workflow']['caseTrackerObject']);