diff --git a/ProcessMaker/Http/Controllers/Api/ProcessController.php b/ProcessMaker/Http/Controllers/Api/ProcessController.php index b9b14d3f11..8a8d73562e 100644 --- a/ProcessMaker/Http/Controllers/Api/ProcessController.php +++ b/ProcessMaker/Http/Controllers/Api/ProcessController.php @@ -483,6 +483,7 @@ public function update(Request $request, Process $process) $lastVersion = $process->getDraftOrPublishedLatestVersion(); $process->bpmn = $lastVersion->bpmn; $process->alternative = $lastVersion->alternative; + $process->stages = $lastVersion->stages; $rules = Process::rules($process); if (!$request->has('name')) { @@ -2066,24 +2067,22 @@ public function saveStages(Request $request, Process $process) $stages = $request->input('stages'); if ($alternative === 'B') { - - // Get or create alternative B version - $alternativeVersion = ProcessVersion::where('process_id', $process->id) + ProcessVersion::where('process_id', $process->id) ->where('alternative', 'B') - ->first(); - - // Save stages to alternative B version - $alternativeVersion->stages = $stages; - $alternativeVersion->save(); - - return new ApiCollection($alternativeVersion->stages); + ->update([ + 'stages' => $stages, + ]); } else { - // Save stages to main process (alternative A) + ProcessVersion::where('process_id', $process->id) + ->where('alternative', 'A') + ->update([ + 'stages' => $stages, + ]); $process->stages = $stages; $process->save(); - - return new ApiCollection($process->stages); } + + return new ApiCollection($stages); } /** diff --git a/ProcessMaker/Traits/HasVersioning.php b/ProcessMaker/Traits/HasVersioning.php index 5556cc5bab..ef3d73ba89 100644 --- a/ProcessMaker/Traits/HasVersioning.php +++ b/ProcessMaker/Traits/HasVersioning.php @@ -11,6 +11,7 @@ use ProcessMaker\Models\Process; use ProcessMaker\Models\ProcessMakerModel; use ProcessMaker\Models\ProcessRequest; +use ProcessMaker\Models\ProcessVersion; trait HasVersioning { @@ -77,10 +78,19 @@ public function saveVersion() public function saveDraft(string $alternative = null) { $attributes = $this->getModelAttributes(); + $attributes['draft'] = true; if ($this->hasAlternative()) { $alternative = $alternative ?: $this->alternative; $attributes['alternative'] = $alternative; + + $processVersion = ProcessVersion::where('process_id', $this->id) + ->where('alternative', $attributes['alternative']) + ->where('draft', 1) + ->first(); + if ($processVersion) { + $attributes['stages'] = $processVersion->stages; + } } return $this->versions()->updateOrCreate( diff --git a/resources/js/processes/modeler/components/ModelerApp.vue b/resources/js/processes/modeler/components/ModelerApp.vue index e9dec921ea..d2936c2c83 100644 --- a/resources/js/processes/modeler/components/ModelerApp.vue +++ b/resources/js/processes/modeler/components/ModelerApp.vue @@ -173,6 +173,7 @@ export default { }, }, mounted() { + window.$modelerApp = this; ProcessMaker.$modeler = this.$refs.modeler; window.ProcessMaker.EventBus.$emit("modeler-app-init", this); diff --git a/resources/js/processes/modeler/components/inspector/StageManager.vue b/resources/js/processes/modeler/components/inspector/StageManager.vue index c54164b541..d6038d9d5e 100644 --- a/resources/js/processes/modeler/components/inspector/StageManager.vue +++ b/resources/js/processes/modeler/components/inspector/StageManager.vue @@ -73,6 +73,10 @@ const getHighlightedNode = () => getModeler().highlightedNode; const getDefinition = () => getHighlightedNode().definition; +const saveProcess = () => { + window.$modelerApp?.autosaveApiCall?.(); +} + const getConfigFromDefinition = (definition) => { let config = {}; try { @@ -146,18 +150,22 @@ const removeStageToFlow = () => { const onChange = (stages) => { updateStagesForAllFlowConfigs(stages); saveStagesToApi(stages); + saveProcess(); }; const onUpdate = (stages, index, val, Oldal) => { updateStagesForAllFlowConfigs(stages); + saveProcess(); }; const onRemove = (stages, index, removed) => { removeStageInAllFlowConfig(removed); + saveProcess(); }; const onClickCheckbox = (stage) => { applyStageToFlow(stage); + saveProcess(); }; const onClickSelected = (stage) => {