From 7e8965c6be48298d34acbf9a504dfd3123c9d2a4 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Wed, 24 Jun 2026 20:37:35 +0530 Subject: [PATCH] refactor: parse native JSON request args in utilities/bulk_transaction.py Use frappe.parse_json instead of json.loads so the whitelisted endpoints accept native JSON types (list/dict/bool) in addition to JSON strings. --- erpnext/utilities/bulk_transaction.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/erpnext/utilities/bulk_transaction.py b/erpnext/utilities/bulk_transaction.py index 0b6cbdbb830..33a0fa7f73f 100644 --- a/erpnext/utilities/bulk_transaction.py +++ b/erpnext/utilities/bulk_transaction.py @@ -13,13 +13,9 @@ def transaction_processing( frappe.has_permission(from_doctype, "read", throw=True) frappe.has_permission(to_doctype, "create", throw=True) - if isinstance(data, str): - deserialized_data = json.loads(data) - else: - deserialized_data = data + deserialized_data = frappe.parse_json(data) - if isinstance(args, str): - args = frappe._dict(json.loads(args)) + args = frappe._dict(frappe.parse_json(args)) skipped_records = [d for d in deserialized_data if d.get("status") in ("On Hold", "Closed")]