From 9b8a8c155d3f1a06987552ec533c07da01ca5baf Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 8 Jan 2024 19:15:19 +0530 Subject: [PATCH] fix: Correct logic for can_cancel (#24196) You can cancel a document IFF: - Document has no workflow - Document has workflow but it doesn't have state with docstatus=2. closes https://github.com/frappe/frappe/issues/19075 --- frappe/model/workflow.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/frappe/model/workflow.py b/frappe/model/workflow.py index cc51a55d90..c089b8fa74 100644 --- a/frappe/model/workflow.py +++ b/frappe/model/workflow.py @@ -150,12 +150,13 @@ def apply_workflow(doc, action): @frappe.whitelist() def can_cancel_document(doctype): workflow = get_workflow(doctype) - for state_doc in workflow.states: - if state_doc.doc_status == "2": - for transition in workflow.transitions: - if transition.next_state == state_doc.state: - return False - return True + cancelling_states = [s.state for s in workflow.states if s.doc_status == "2"] + if not cancelling_states: + return True + + for transition in workflow.transitions: + if transition.next_state in cancelling_states: + return False return True