From df5451685f65ae85d3f6aff9fb5984b25aa5d51d Mon Sep 17 00:00:00 2001 From: jasquat Date: Wed, 8 Feb 2023 17:31:20 -0500 Subject: [PATCH] updated controller to use spiff step details to find correct task data to show w/ burnettk --- .../migrations/versions/e05ca5cdc312_.py | 2 + .../models/spiff_step_details.py | 5 ++- .../routes/process_instances_controller.py | 37 ++++++++++++------- .../services/process_instance_processor.py | 3 +- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/spiffworkflow-backend/migrations/versions/e05ca5cdc312_.py b/spiffworkflow-backend/migrations/versions/e05ca5cdc312_.py index 8e9313244..ab6d1b643 100644 --- a/spiffworkflow-backend/migrations/versions/e05ca5cdc312_.py +++ b/spiffworkflow-backend/migrations/versions/e05ca5cdc312_.py @@ -18,6 +18,7 @@ depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### + op.add_column('spiff_step_details', sa.Column('task_state', sa.String(length=50), nullable=False)) op.add_column('spiff_step_details', sa.Column('task_id', sa.String(length=50), nullable=False)) op.add_column('spiff_step_details', sa.Column('bpmn_task_identifier', sa.String(length=255), nullable=False)) op.add_column('spiff_step_details', sa.Column('engine_step_start_in_seconds', sa.DECIMAL(precision=17, scale=6), nullable=True)) @@ -33,4 +34,5 @@ def downgrade(): op.drop_column('spiff_step_details', 'engine_step_start_in_seconds') op.drop_column('spiff_step_details', 'bpmn_task_identifier') op.drop_column('spiff_step_details', 'task_id') + op.drop_column('spiff_step_details', 'task_state') # ### end Alembic commands ### diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/spiff_step_details.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/spiff_step_details.py index 5a844329b..6f9761816 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/spiff_step_details.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/spiff_step_details.py @@ -27,8 +27,9 @@ class SpiffStepDetailsModel(SpiffworkflowBaseDBModel): ) spiff_step: int = db.Column(db.Integer, nullable=False) task_json: dict = deferred(db.Column(db.JSON, nullable=False)) # type: ignore - task_id: str | None = db.Column(db.String(50), nullable=False) - bpmn_task_identifier: str | None = db.Column(db.String(255), nullable=False) + task_id: str = db.Column(db.String(50), nullable=False) + task_state: str = db.Column(db.String(50), nullable=False) + bpmn_task_identifier: str = db.Column(db.String(255), nullable=False) # timestamp: float = db.Column(db.DECIMAL(17, 6), nullable=False) engine_step_start_in_seconds: float | None = db.Column(db.DECIMAL(17, 6)) diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_instances_controller.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_instances_controller.py index a2e68bf3d..0ca0ada1f 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_instances_controller.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_instances_controller.py @@ -556,20 +556,31 @@ def process_instance_task_list( get_task_data: bool = False, ) -> flask.wrappers.Response: """Process_instance_task_list.""" - if spiff_step > 0: - step_detail = ( - db.session.query(SpiffStepDetailsModel) - .filter( - SpiffStepDetailsModel.process_instance_id == process_instance.id, - SpiffStepDetailsModel.spiff_step == spiff_step, - ) - .first() + step_detail_query = ( + db.session.query(SpiffStepDetailsModel) + .filter( + SpiffStepDetailsModel.process_instance_id == process_instance.id, ) - if step_detail is not None and process_instance.bpmn_json is not None: - bpmn_json = json.loads(process_instance.bpmn_json) - bpmn_json["tasks"] = step_detail.task_json["tasks"] - bpmn_json["subprocesses"] = step_detail.task_json["subprocesses"] - process_instance.bpmn_json = json.dumps(bpmn_json) + ) + + if spiff_step > 0: + step_detail_query = step_detail_query.filter(SpiffStepDetailsModel.spiff_step <= spiff_step) + + step_details = step_detail_query.all() + bpmn_json = json.loads(process_instance.bpmn_json) + tasks = bpmn_json['tasks'] + + # if step_detail is not None and process_instance.bpmn_json is not None: + for step_detail in step_details: + print(f"step_detail.task_id: {step_detail.task_id}") + print(f"step_detail.bpmn_task_identifier: {step_detail.bpmn_task_identifier}") + if step_detail.task_id in tasks: + task_data = step_detail.task_json['task_data'] | step_detail.task_json['python_env'] + if task_data is None: + task_data = {} + tasks[step_detail.task_id]['data'] = task_data + + process_instance.bpmn_json = json.dumps(bpmn_json) processor = ProcessInstanceProcessor(process_instance) diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py index 1641f213c..d8bfeba78 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py @@ -716,7 +716,8 @@ class ProcessInstanceProcessor: "spiff_step": self.process_instance_model.spiff_step or 1, "task_json": task_json, "task_id": str(spiff_task.id), - "bpmn_task_identifier": spiff_task.task_spec.id, + "task_state": spiff_task.state, + "bpmn_task_identifier": spiff_task.task_spec.name, "engine_step_start_in_seconds": start_in_seconds, "engine_step_end_in_seconds": end_in_seconds, }