diff --git a/spiffworkflow-backend/migrations/env.py b/spiffworkflow-backend/migrations/env.py
index 68feded2..630e381a 100644
--- a/spiffworkflow-backend/migrations/env.py
+++ b/spiffworkflow-backend/migrations/env.py
@@ -1,5 +1,3 @@
-from __future__ import with_statement
-
import logging
from logging.config import fileConfig
diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py
index c89f457b..935eb209 100644
--- a/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py
+++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/process_instance.py
@@ -26,6 +26,10 @@ class ProcessInstanceNotFoundError(Exception):
"""ProcessInstanceNotFoundError."""
+class ProcessInstanceTaskDataCannotBeUpdatedError(Exception):
+ """ProcessInstanceTaskDataCannotBeUpdatedError."""
+
+
class NavigationItemSchema(Schema):
"""NavigationItemSchema."""
diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py
index 294a6524..f5a070b7 100644
--- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py
+++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_api_blueprint.py
@@ -56,6 +56,9 @@ from spiffworkflow_backend.models.process_instance import ProcessInstanceApiSche
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
from spiffworkflow_backend.models.process_instance import ProcessInstanceModelSchema
from spiffworkflow_backend.models.process_instance import ProcessInstanceStatus
+from spiffworkflow_backend.models.process_instance import (
+ ProcessInstanceTaskDataCannotBeUpdatedError,
+)
from spiffworkflow_backend.models.process_instance_metadata import (
ProcessInstanceMetadataModel,
)
@@ -2110,6 +2113,11 @@ def update_task_data(
ProcessInstanceModel.id == int(process_instance_id)
).first()
if process_instance:
+ if process_instance.status != "suspended":
+ raise ProcessInstanceTaskDataCannotBeUpdatedError(
+ f"The process instance needs to be suspended to udpate the task-data. It is currently: {process_instance.status}"
+ )
+
process_instance_bpmn_json_dict = json.loads(process_instance.bpmn_json)
if "new_task_data" in body:
new_task_data_str: str = body["new_task_data"]
diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/git_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/git_service.py
index d94423a3..495603cf 100644
--- a/spiffworkflow-backend/src/spiffworkflow_backend/services/git_service.py
+++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/git_service.py
@@ -100,7 +100,7 @@ class GitService:
branch_name_to_use,
git_username,
git_email,
- current_app.config['GIT_USER_PASSWORD']
+ current_app.config["GIT_USER_PASSWORD"],
]
return cls.run_shell_command_to_get_stdout(shell_command)
diff --git a/spiffworkflow-frontend/src/interfaces.ts b/spiffworkflow-frontend/src/interfaces.ts
index b0ab6208..7805249b 100644
--- a/spiffworkflow-frontend/src/interfaces.ts
+++ b/spiffworkflow-frontend/src/interfaces.ts
@@ -52,6 +52,10 @@ export interface ProcessInstance {
id: number;
process_model_identifier: string;
process_model_display_name: string;
+ status: string;
+ start_in_seconds: number | null;
+ end_in_seconds: number | null;
+ bpmn_xml_file_contents?: string;
spiff_step?: number;
}
diff --git a/spiffworkflow-frontend/src/routes/ProcessInstanceShow.tsx b/spiffworkflow-frontend/src/routes/ProcessInstanceShow.tsx
index 88e5e3bb..119f7964 100644
--- a/spiffworkflow-frontend/src/routes/ProcessInstanceShow.tsx
+++ b/spiffworkflow-frontend/src/routes/ProcessInstanceShow.tsx
@@ -183,29 +183,23 @@ export default function ProcessInstanceShow() {
return taskIds;
};
- const currentSpiffStep = (processInstanceToUse: any) => {
- if (typeof params.spiff_step === 'undefined') {
- return processInstanceToUse.spiff_step;
+ const currentSpiffStep = () => {
+ if (processInstance && typeof params.spiff_step === 'undefined') {
+ return processInstance.spiff_step || 0;
}
return Number(params.spiff_step);
};
- const showingFirstSpiffStep = (processInstanceToUse: any) => {
- return currentSpiffStep(processInstanceToUse) === 1;
+ const showingFirstSpiffStep = () => {
+ return currentSpiffStep() === 1;
};
- const showingLastSpiffStep = (processInstanceToUse: any) => {
- return (
- currentSpiffStep(processInstanceToUse) === processInstanceToUse.spiff_step
- );
+ const showingLastSpiffStep = () => {
+ return processInstance && currentSpiffStep() === processInstance.spiff_step;
};
- const spiffStepLink = (
- processInstanceToUse: any,
- label: any,
- distance: number
- ) => {
+ const spiffStepLink = (label: any, distance: number) => {
const processIdentifier = searchParams.get('process_identifier');
let queryParams = '';
if (processIdentifier) {
@@ -217,32 +211,35 @@ export default function ProcessInstanceShow() {
data-qa="process-instance-step-link"
to={`/admin/process-instances/${params.process_model_id}/${
params.process_instance_id
- }/${currentSpiffStep(processInstanceToUse) + distance}${queryParams}`}
+ }/${currentSpiffStep() + distance}${queryParams}`}
>
{label}
);
};
- const previousStepLink = (processInstanceToUse: any) => {
- if (showingFirstSpiffStep(processInstanceToUse)) {
+ const previousStepLink = () => {
+ if (showingFirstSpiffStep()) {
return null;
}
- return spiffStepLink(processInstanceToUse,