From 3f70cebf65a8c000a176750b0b22969e41e42609 Mon Sep 17 00:00:00 2001 From: Dany Robert Date: Mon, 13 Nov 2023 13:00:14 +0000 Subject: [PATCH 1/2] feat: workflow state wise status override --- frappe/public/js/frappe/model/indicator.js | 13 ++++++++--- frappe/public/js/frappe/model/workflow.js | 8 +++++++ .../workflow_document_state.json | 23 +++++++++++++++---- .../workflow_document_state.py | 2 ++ 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/frappe/public/js/frappe/model/indicator.js b/frappe/public/js/frappe/model/indicator.js index d5c42c3799..6ae40c1f05 100644 --- a/frappe/public/js/frappe/model/indicator.js +++ b/frappe/public/js/frappe/model/indicator.js @@ -36,11 +36,18 @@ frappe.get_indicator = function (doc, doctype, show_workflow_state) { var settings = frappe.listview_settings[doctype] || {}; - var is_submittable = frappe.model.is_submittable(doctype), - workflow_fieldname = frappe.workflow.get_state_fieldname(doctype); + var is_submittable = frappe.model.is_submittable(doctype); + let workflow_fieldname = frappe.workflow.get_state_fieldname(doctype); + let avoid_status_override = (frappe.workflow.avoid_status_override[doctype] || []).includes( + doc[workflow_fieldname] + ); // workflow - if (workflow_fieldname && (!without_workflow || show_workflow_state)) { + if ( + workflow_fieldname && + (!without_workflow || show_workflow_state) && + !avoid_status_override + ) { var value = doc[workflow_fieldname]; if (value) { let colour = ""; diff --git a/frappe/public/js/frappe/model/workflow.js b/frappe/public/js/frappe/model/workflow.js index db4c2b25ae..11643b878d 100644 --- a/frappe/public/js/frappe/model/workflow.js +++ b/frappe/public/js/frappe/model/workflow.js @@ -6,11 +6,19 @@ frappe.provide("frappe.workflow"); frappe.workflow = { state_fields: {}, workflows: {}, + avoid_status_override: {}, setup: function (doctype) { var wf = frappe.get_list("Workflow", { document_type: doctype }); if (wf.length) { frappe.workflow.workflows[doctype] = wf[0]; frappe.workflow.state_fields[doctype] = wf[0].workflow_state_field; + frappe.workflow.avoid_status_override[doctype] = frappe.workflow.workflows[ + doctype + ].states + .filter((row) => { + if (row.avoid_status_override) return true; + }) + .map((d) => d.state); } else { frappe.workflow.state_fields[doctype] = null; } diff --git a/frappe/workflow/doctype/workflow_document_state/workflow_document_state.json b/frappe/workflow/doctype/workflow_document_state/workflow_document_state.json index d3d325adf4..465f72d9b9 100644 --- a/frappe/workflow/doctype/workflow_document_state/workflow_document_state.json +++ b/frappe/workflow/doctype/workflow_document_state/workflow_document_state.json @@ -1,4 +1,5 @@ { + "actions": [], "creation": "2013-02-22 01:27:36", "description": "Represents the states allowed in one document and role assigned to change the state.", "doctype": "DocType", @@ -12,6 +13,7 @@ "update_value", "column_break_4", "is_optional_state", + "avoid_status_override", "next_action_email_template", "allow_edit", "section_break_9", @@ -91,19 +93,30 @@ "fieldtype": "Section Break" }, { - "fieldname": "workflow_builder_id", - "fieldtype": "Data", - "hidden": 1, - "label": "Workflow Builder ID" + "fieldname": "workflow_builder_id", + "fieldtype": "Data", + "hidden": 1, + "label": "Workflow Builder ID" + }, + { + "default": "0", + "description": "If Checked workflow status will not override status in list view", + "fieldname": "avoid_status_override", + "fieldtype": "Check", + "label": "Don't Override Status" } ], "idx": 1, "istable": 1, - "modified": "2019-06-14 11:43:20.271091", + "links": [], + "modified": "2023-11-13 18:27:08.633239", "modified_by": "Administrator", "module": "Workflow", "name": "Workflow Document State", "owner": "Administrator", "permissions": [], + "sort_field": "modified", + "sort_order": "DESC", + "states": [], "track_changes": 1 } \ No newline at end of file diff --git a/frappe/workflow/doctype/workflow_document_state/workflow_document_state.py b/frappe/workflow/doctype/workflow_document_state/workflow_document_state.py index 2484e8c49c..d1644578d8 100644 --- a/frappe/workflow/doctype/workflow_document_state/workflow_document_state.py +++ b/frappe/workflow/doctype/workflow_document_state/workflow_document_state.py @@ -15,6 +15,7 @@ class WorkflowDocumentState(Document): from frappe.types import DF allow_edit: DF.Link + avoid_status_override: DF.Check doc_status: DF.Literal["0", "1", "2"] is_optional_state: DF.Check message: DF.Text | None @@ -25,5 +26,6 @@ class WorkflowDocumentState(Document): state: DF.Link update_field: DF.Literal update_value: DF.Data | None + workflow_builder_id: DF.Data | None # end: auto-generated types pass From 978b9f4f30619504d6f403e49bdd0ba0bf699512 Mon Sep 17 00:00:00 2001 From: Shariq Ansari <30859809+shariquerik@users.noreply.github.com> Date: Mon, 20 Nov 2023 15:38:25 +0530 Subject: [PATCH 2/2] chore: cleaner code --- frappe/public/js/frappe/model/workflow.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/frappe/public/js/frappe/model/workflow.js b/frappe/public/js/frappe/model/workflow.js index 11643b878d..359b9ba310 100644 --- a/frappe/public/js/frappe/model/workflow.js +++ b/frappe/public/js/frappe/model/workflow.js @@ -12,12 +12,8 @@ frappe.workflow = { if (wf.length) { frappe.workflow.workflows[doctype] = wf[0]; frappe.workflow.state_fields[doctype] = wf[0].workflow_state_field; - frappe.workflow.avoid_status_override[doctype] = frappe.workflow.workflows[ - doctype - ].states - .filter((row) => { - if (row.avoid_status_override) return true; - }) + frappe.workflow.avoid_status_override[doctype] = wf[0].states + .filter((row) => row.avoid_status_override) .map((d) => d.state); } else { frappe.workflow.state_fields[doctype] = null;