From 6a4afd1733a939bf6c1aafaf799a3d3de198c025 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Wed, 24 Jun 2026 20:55:01 +0530 Subject: [PATCH] fix: parse native JSON contacts args in CRM prospect/customer endpoints create_prospect_against_crm_deal and create_customer read `contacts` from form_dict (json.loads(doc.contacts) / customer_data.get("contacts")), which arrives as a native list under JSON body mode. Use frappe.parse_json. --- erpnext/crm/frappe_crm_api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/crm/frappe_crm_api.py b/erpnext/crm/frappe_crm_api.py index 27b44222b44..0230dda7925 100644 --- a/erpnext/crm/frappe_crm_api.py +++ b/erpnext/crm/frappe_crm_api.py @@ -33,7 +33,7 @@ def create_prospect_against_crm_deal(): pass if doc.contacts and len(doc.contacts): - create_contacts(json.loads(doc.contacts), prospect.company_name, "Prospect", prospect_name) + create_contacts(frappe.parse_json(doc.contacts), prospect.company_name, "Prospect", prospect_name) create_address("Prospect", prospect_name, doc.address) frappe.response["message"] = prospect_name @@ -152,7 +152,7 @@ def create_customer(customer_data: dict | None = None): customer.insert(ignore_permissions=True) customer_name = customer.name - contacts = json.loads(customer_data.get("contacts")) + contacts = frappe.parse_json(customer_data.get("contacts")) create_contacts(contacts, customer_name, "Customer", customer_name) create_address("Customer", customer_name, customer_data.get("address")) return customer_name