From 73b51d76d4413075ab43b512620dfc7c4350eecc Mon Sep 17 00:00:00 2001 From: jasquat Date: Tue, 3 Jan 2023 17:26:01 -0500 Subject: [PATCH] added new page to create process models using english text w/ burnettk --- .../routes/process_instances_controller.py | 2 + .../routes/process_models_controller.py | 18 +++-- .../process_instance_report_service.py | 1 + .../integration/test_process_api.py | 3 +- .../src/routes/AdminRoutes.tsx | 5 ++ .../routes/ProcessModelNewExperimental.tsx | 73 +++++++++++++++++++ 6 files changed, 93 insertions(+), 9 deletions(-) create mode 100644 spiffworkflow-frontend/src/routes/ProcessModelNewExperimental.tsx 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 c1c4c1b0..3f7da50c 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_instances_controller.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_instances_controller.py @@ -396,6 +396,7 @@ def process_instance_report_update( report_id: int, body: Dict[str, Any], ) -> flask.wrappers.Response: + """Process_instance_report_update.""" process_instance_report = ProcessInstanceReportModel.query.filter_by( id=report_id, created_by_id=g.user.id, @@ -416,6 +417,7 @@ def process_instance_report_update( def process_instance_report_delete( report_id: int, ) -> flask.wrappers.Response: + """Process_instance_report_delete.""" process_instance_report = ProcessInstanceReportModel.query.filter_by( id=report_id, created_by_id=g.user.id, diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_models_controller.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_models_controller.py index 3c3a7382..467062be 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_models_controller.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_models_controller.py @@ -2,7 +2,6 @@ import json import os from spiffworkflow_backend.models.process_instance_report import ProcessInstanceReportModel -from spiffworkflow_backend.services.file_system_service import FileSystemService import re from typing import Any from typing import Dict @@ -366,16 +365,17 @@ def process_model_create_with_natural_language( ) ProcessModelService.add_process_model(process_model_info) - bpmn_process_identifier = f"{process_model_info.id}_process" + bpmn_process_identifier = f"{process_model_identifier}_process" bpmn_template_contents = '' with open(bpmn_template_file, encoding="utf-8") as f: bpmn_template_contents = f.read() - bpmn_template_contents = bpmn_template_contents.replace('natural_language_process_id_template', bpmn_process_identifier) - bpmn_template_contents = bpmn_template_contents.replace('form-identifier-id-template-', form_identifier) + bpmn_template_contents = bpmn_template_contents.replace( + 'natural_language_process_id_template', bpmn_process_identifier) + bpmn_template_contents = bpmn_template_contents.replace('form-identifier-id-template', form_identifier) form_uischema_json: dict = { - "ui:order": [] + "ui:order": columns } form_properties: dict = {} @@ -392,8 +392,10 @@ def process_model_create_with_natural_language( } SpecFileService.add_file(process_model_info, f"{process_model_identifier}.bpmn", str.encode(bpmn_template_contents)) - SpecFileService.add_file(process_model_info, f"{form_identifier}-schema.json", str.encode(json.dumps(form_schema_json))) - SpecFileService.add_file(process_model_info, f"{form_identifier}-uischema.json", str.encode(json.dumps(form_uischema_json))) + SpecFileService.add_file(process_model_info, f"{form_identifier}-schema.json", + str.encode(json.dumps(form_schema_json))) + SpecFileService.add_file( + process_model_info, f"{form_identifier}-uischema.json", str.encode(json.dumps(form_uischema_json))) _commit_and_push_to_git( f"User: {g.user.username} created process model via natural language:" @@ -403,7 +405,7 @@ def process_model_create_with_natural_language( default_report_metadata = ProcessInstanceReportService.system_metadata_map('default') for column in columns: default_report_metadata['columns'].append({ - "Header": column, "accessor": column + "Header": column, "accessor": column, "filterable": True }) ProcessInstanceReportModel.create_report( identifier=process_model_identifier, diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_report_service.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_report_service.py index 2ae12769..cd72ccfa 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_report_service.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_report_service.py @@ -86,6 +86,7 @@ class ProcessInstanceReportService: @classmethod def system_metadata_map(cls, metadata_key: str) -> dict[str, Any]: + """System_metadata_map.""" # TODO replace with system reports that are loaded on launch (or similar) temp_system_metadata_map = { "default": { diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py index 7096499e..d058f901 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py @@ -221,7 +221,8 @@ class TestProcessApi(BaseTest): process_instance_report = ProcessInstanceReportModel.query.filter_by(identifier='bug-tracker').first() assert process_instance_report is not None report_column_accessors = [i['accessor'] for i in process_instance_report.report_metadata['columns']] - expected_column_accessors = ['id', 'process_model_display_name', 'start_in_seconds', 'end_in_seconds', 'username', 'status', 'summary', 'description', 'priority'] + expected_column_accessors = ['id', 'process_model_display_name', 'start_in_seconds', + 'end_in_seconds', 'username', 'status', 'summary', 'description', 'priority'] assert report_column_accessors == expected_column_accessors def test_primary_process_id_updates_via_xml( diff --git a/spiffworkflow-frontend/src/routes/AdminRoutes.tsx b/spiffworkflow-frontend/src/routes/AdminRoutes.tsx index cc120c51..2d61439b 100644 --- a/spiffworkflow-frontend/src/routes/AdminRoutes.tsx +++ b/spiffworkflow-frontend/src/routes/AdminRoutes.tsx @@ -22,6 +22,7 @@ import ProcessInstanceLogList from './ProcessInstanceLogList'; import MessageInstanceList from './MessageInstanceList'; import Configuration from './Configuration'; import JsonSchemaFormBuilder from './JsonSchemaFormBuilder'; +import ProcessModelNewExperimental from './ProcessModelNewExperimental'; export default function AdminRoutes() { const location = useLocation(); @@ -50,6 +51,10 @@ export default function AdminRoutes() { path="process-models/:process_group_id/new" element={} /> + } + /> } diff --git a/spiffworkflow-frontend/src/routes/ProcessModelNewExperimental.tsx b/spiffworkflow-frontend/src/routes/ProcessModelNewExperimental.tsx new file mode 100644 index 00000000..af8be822 --- /dev/null +++ b/spiffworkflow-frontend/src/routes/ProcessModelNewExperimental.tsx @@ -0,0 +1,73 @@ +import { useState } from 'react'; +import { useNavigate, useParams } from 'react-router-dom'; +// @ts-ignore +import { TextArea, Button, Form } from '@carbon/react'; +import ProcessBreadcrumb from '../components/ProcessBreadcrumb'; +import { ProcessModel } from '../interfaces'; +import { modifyProcessIdentifierForPathParam } from '../helpers'; +import HttpService from '../services/HttpService'; + +export default function ProcessModelNewExperimental() { + const params = useParams(); + const navigate = useNavigate(); + const [processModelDescriptiveText, setProcessModelDescriptiveText] = + useState(''); + + const helperText = + 'Create a bug tracker process model with a bug-details form that collects summary, description, and priority'; + + const navigateToProcessModel = (result: ProcessModel) => { + if ('id' in result) { + const modifiedProcessModelPathFromResult = + modifyProcessIdentifierForPathParam(result.id); + navigate(`/admin/process-models/${modifiedProcessModelPathFromResult}`); + } + }; + + const handleFormSubmission = (event: any) => { + event.preventDefault(); + HttpService.makeCallToBackend({ + path: `/process-models-natural-language/${params.process_group_id}`, + successCallback: navigateToProcessModel, + httpMethod: 'POST', + postBody: { natural_language_text: processModelDescriptiveText }, + }); + }; + + const ohYeeeeaah = () => { + setProcessModelDescriptiveText(helperText); + }; + + return ( + <> + + {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */} +

+ Add Process Model +

+
+