From 6a977612ad5726fb34d2ddbaffca6bb63c731d88 Mon Sep 17 00:00:00 2001 From: davidcallizaya Date: Mon, 6 Mar 2017 17:17:48 -0400 Subject: [PATCH] HOR-2809 Preserve PRO_ID and TAS_ID in granular process import. --- workflow/engine/classes/class.processes.php | 12 +++---- workflow/engine/classes/model/Process.php | 3 ++ workflow/engine/classes/model/Task.php | 3 ++ .../Migrator/ProcessDefinitionMigrator.php | 2 +- .../src/ProcessMaker/Importer/Importer.php | 3 ++ .../Project/Adapter/BpmnWorkflow.php | 33 ++++++++++++++++--- .../src/ProcessMaker/Project/Workflow.php | 3 ++ 7 files changed, 47 insertions(+), 12 deletions(-) diff --git a/workflow/engine/classes/class.processes.php b/workflow/engine/classes/class.processes.php index b7942ed06..1d998e61d 100644 --- a/workflow/engine/classes/class.processes.php +++ b/workflow/engine/classes/class.processes.php @@ -5605,26 +5605,26 @@ class Processes public function loadIdsFromData($oData) { if (is_array($oData)) { - $this->loadIdsFor( + $oData['process'] = $this->loadIdsFor( Process::class, ProcessPeer::PRO_UID, ProcessPeer::PRO_ID, $oData['process'] ); - $this->loadIdsFor( + $oData['tasks'] = $this->loadIdsFor( Task::class, TaskPeer::TAS_UID, TaskPeer::TAS_ID, $oData['tasks'] ); } else { - $this->loadIdsFor( + $oData->process = $this->loadIdsFor( Process::class, ProcessPeer::PRO_UID, ProcessPeer::PRO_ID, $oData->process ); - $this->loadIdsFor( + $oData->tasks = $this->loadIdsFor( Task::class, TaskPeer::TAS_UID, TaskPeer::TAS_ID, @@ -5701,10 +5701,10 @@ class Processes BasePeer::TYPE_COLNAME); } else { //$data is an array of row - foreach ($data as &$dataRow) { + foreach ($data as $i => $dataRow) { $model = new $modelClass(); $row = $model->load($dataRow[$uidField]); - $dataRow[$idField] = $model->getByName($idTableField, + $data[$i][$idField] = $model->getByName($idTableField, BasePeer::TYPE_COLNAME); } } diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php index e761f0f10..500fe35a9 100644 --- a/workflow/engine/classes/model/Process.php +++ b/workflow/engine/classes/model/Process.php @@ -165,6 +165,9 @@ class Process extends BaseProcess } while ($this->processExists( $sNewProUid )); } else { $sNewProUid = $aData['PRO_UID']; + if (!empty($aData['PRO_ID'])) { + $this->setProId($aData['PRO_ID']); + } } $this->setProUid( $sNewProUid ); diff --git a/workflow/engine/classes/model/Task.php b/workflow/engine/classes/model/Task.php index 28110cc98..890f1a86d 100644 --- a/workflow/engine/classes/model/Task.php +++ b/workflow/engine/classes/model/Task.php @@ -410,6 +410,9 @@ class Task extends BaseTask $this->setTasPosy(""); $this->setTasColor(""); $this->setTasGroupVariable(""); + if (!$generateUid && !empty($aData['TAS_ID'])) { + $this->setTasId($aData['TAS_ID']); + } $this->fromArray($aData,BasePeer::TYPE_FIELDNAME); if ($this->validate()) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php index 1036c09a0..464eedc9d 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/ProcessDefinitionMigrator.php @@ -36,7 +36,7 @@ class ProcessDefinitionMigrator implements Importable, Exportable { try { //Bpmn elements - $pjrUid = $this->bpmn->createFromStruct($data['bpmn'], false); + $pjrUid = $this->bpmn->createFromStruct($data['bpmn'], false, $data); //Import workflow elements } catch (\Exception $e) { $exception = new ImportException($e->getMessage()); diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index b83c7fde0..b03643944 100644 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -235,6 +235,9 @@ abstract class Importer $this->importData["tables"]["bpmn"]["project"][0]["prj_name"] = $name; $this->importData["tables"]["bpmn"]["diagram"][0]["dia_name"] = $name; $this->importData["tables"]["bpmn"]["process"][0]["pro_name"] = $name; + if (!empty($this->importData["tables"]["workflow"]["process"][0]['PRO_ID'])) { + $this->importData["tables"]["bpmn"]["process"][0]["pro_id"] = $this->importData["tables"]["workflow"]["process"][0]['PRO_ID']; + } $this->importData["tables"]["workflow"]["process"][0]["PRO_TITLE"] = $name; if ($this->importData["tables"]["workflow"]["process"][0]["PRO_UPDATE_DATE"] . "" == "") { diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index dc5751410..44e8ce79b 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -86,6 +86,10 @@ class BpmnWorkflow extends Project\Bpmn $wpData["PRO_CATEGORY"] = $data["PRJ_CATEGORY"]; } + if (array_key_exists("PRO_ID", $data)) { + $wpData["PRO_ID"] = $data["PRO_ID"]; + } + $this->wp = new Project\Workflow(); $this->wp->create($wpData); @@ -131,7 +135,7 @@ class BpmnWorkflow extends Project\Bpmn } $arrayData["PRO_UPDATE_DATE"] = date("Y-m-d H:i:s"); - +//Dave: Aca se actualiza el PROCESS $this->wp->update($arrayData); } @@ -185,6 +189,9 @@ class BpmnWorkflow extends Project\Bpmn $actUid = parent::addActivity($data); $taskData["TAS_UID"] = $actUid; + if (!empty($data["TAS_ID"])) { + $taskData["TAS_ID"] = $data["TAS_ID"]; + } if (array_key_exists("ACT_NAME", $data)) { $taskData["TAS_TITLE"] = $data["ACT_NAME"]; @@ -1254,7 +1261,7 @@ class BpmnWorkflow extends Project\Bpmn $this->wp->remove($flagRemoveCases, $onlyDiagram); } - public static function createFromStruct(array $projectData, $generateUid = true) + public static function createFromStruct(array $projectData, $generateUid = true, $allData = null) { $projectData["prj_name"] = trim($projectData["prj_name"]); if ($projectData["prj_name"] == '') { @@ -1300,6 +1307,10 @@ class BpmnWorkflow extends Project\Bpmn $data["PRJ_CATEGORY"] = $projectData["prj_category"]; } + if (isset($projectData["process"]["pro_id"])) { + $data["PRO_ID"] = $projectData["process"]["pro_id"]; + } + $bwp->create($data); $diagramData = $processData = array(); @@ -1329,7 +1340,7 @@ class BpmnWorkflow extends Project\Bpmn $bwp->addProcess($processData); - $mappedUid = array_merge($result, self::updateFromStruct($bwp->prjUid, $projectData, $generateUid, true)); + $mappedUid = array_merge($result, self::updateFromStruct($bwp->prjUid, $projectData, $generateUid, true, $allData)); return $generateUid ? $mappedUid : $bwp->getUid(); } @@ -1456,10 +1467,15 @@ class BpmnWorkflow extends Project\Bpmn * * @param $prjUid * @param $projectData + * @param $allData All data from import file * @return array */ - public static function updateFromStruct($prjUid, $projectData, $generateUid = true, $forceInsert = false) - { + public static function updateFromStruct( + $prjUid, $projectData, + $generateUid = true, + $forceInsert = false, + $allData = null + ) { $diagram = isset($projectData["diagrams"]) && isset($projectData["diagrams"][0]) ? $projectData["diagrams"][0] : array(); $diagram["activities"] = isset($diagram["activities"])? $diagram["activities"]: array(); $diagram["artifacts"] = isset($diagram["artifacts"])? $diagram["artifacts"]: array(); @@ -1614,6 +1630,13 @@ class BpmnWorkflow extends Project\Bpmn "old_uid" => $uidOld, "new_uid" => $activityData["ACT_UID"] ); + } else { + foreach ($allData['workflow']['tasks'] as $task) { + if (!empty($task['TAS_ID']) && $activityData["ACT_UID"] === $task['TAS_UID']) { + $activityData["TAS_ID"] = $task['TAS_ID']; + break; + } + } } $bwp->addActivity($activityData); diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php index 9c98e058d..7d0f5ad9a 100644 --- a/workflow/engine/src/ProcessMaker/Project/Workflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php @@ -178,6 +178,9 @@ class Workflow extends Handler { // Setting defaults $taskData['TAS_UID'] = array_key_exists('TAS_UID', $taskData) ? $taskData['TAS_UID'] : Common::generateUID(); + if (array_key_exists('TAS_ID', $taskData)) { + $taskData['TAS_ID'] = $taskData['TAS_ID']; + } $taskData['PRO_UID'] = $this->proUid; try {