From f1e399c87d8eebe5aaca5a47fa84c3258020c998 Mon Sep 17 00:00:00 2001 From: jasquat Date: Fri, 6 Jan 2023 12:00:24 -0500 Subject: [PATCH] highlight tasks even if they are in subprocesses of called activities w/ burnettk --- .../routes/process_instances_controller.py | 4 ++++ .../services/process_instance_processor.py | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/spiffworkflow_backend/routes/process_instances_controller.py b/src/spiffworkflow_backend/routes/process_instances_controller.py index 5fbaecdf..31cd66a3 100644 --- a/src/spiffworkflow_backend/routes/process_instances_controller.py +++ b/src/spiffworkflow_backend/routes/process_instances_controller.py @@ -548,6 +548,10 @@ def process_instance_task_list( spiff_tasks = processor.get_all_user_tasks() subprocesses_by_child_task_ids = processor.get_subprocesses_by_child_task_ids() + processor.get_highest_level_subprocesses_by_child_task_ids( + subprocesses_by_child_task_ids + ) + tasks = [] for spiff_task in spiff_tasks: calling_subprocess_task_id = subprocesses_by_child_task_ids.get( diff --git a/src/spiffworkflow_backend/services/process_instance_processor.py b/src/spiffworkflow_backend/services/process_instance_processor.py index 5ef4baf0..9c30e1c8 100644 --- a/src/spiffworkflow_backend/services/process_instance_processor.py +++ b/src/spiffworkflow_backend/services/process_instance_processor.py @@ -646,6 +646,23 @@ class ProcessInstanceProcessor: subprocesses_by_child_task_ids[task_id] = subprocess_id return subprocesses_by_child_task_ids + def get_highest_level_subprocesses_by_child_task_ids( + self, subprocesses_by_child_task_ids: dict + ) -> dict: + """Ensure task ids point to the top level subprocess id. + + This is done by checking if a subprocess is also a task until the subprocess is no longer a task. + """ + for task_id, subprocess_id in subprocesses_by_child_task_ids.items(): + if subprocess_id in subprocesses_by_child_task_ids: + subprocesses_by_child_task_ids[task_id] = ( + subprocesses_by_child_task_ids[subprocess_id] + ) + self.get_highest_level_subprocesses_by_child_task_ids( + subprocesses_by_child_task_ids + ) + return subprocesses_by_child_task_ids + def save(self) -> None: """Saves the current state of this processor to the database.""" self.process_instance_model.bpmn_json = self.serialize()