From 835813918a717744fa19525e103db7d4839ef473 Mon Sep 17 00:00:00 2001 From: Corentin Forler Date: Tue, 9 Sep 2025 18:59:34 +0200 Subject: [PATCH] fix: Avoid loop when settings role profile from Customer Group --- erpnext/portal/utils.py | 15 ++++++++------- .../doctype/customer_group/customer_group.py | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/erpnext/portal/utils.py b/erpnext/portal/utils.py index e2497287b70..11bc7d9b956 100644 --- a/erpnext/portal/utils.py +++ b/erpnext/portal/utils.py @@ -6,7 +6,7 @@ def set_default_role(doc, method): if frappe.flags.setting_role or frappe.flags.in_migrate: return # Won't work in async task - if doc.get("role_profile") or doc.get("role_profiles"): + if doc.get("role_profile_name") or doc.get("role_profiles"): return # It's not possible to add the Customer/Supplier role roles = frappe.get_roles(doc.name) @@ -160,12 +160,13 @@ def update_linked_user(doctype, docname, doc): return frappe.get_doc("User", doc.user) def update_role_profile(user, role_profile): - if role_profile != user.role_profile_name: - user.role_profile_name = role_profile - try: - user.save(ignore_permissions=True) - except Exception: - frappe.log_error() + if user.get("role_profiles", {"role_profile": role_profile}): + return + user.append("role_profiles", {"role_profile": role_profile}) + try: + user.save(ignore_permissions=True) + except Exception: + frappe.log_error() user = get_linked_user(doc) dt_has_field = frappe.get_meta(doctype).has_field("role_profile_name") diff --git a/erpnext/setup/doctype/customer_group/customer_group.py b/erpnext/setup/doctype/customer_group/customer_group.py index 97770b54694..c82bebe6099 100644 --- a/erpnext/setup/doctype/customer_group/customer_group.py +++ b/erpnext/setup/doctype/customer_group/customer_group.py @@ -76,7 +76,7 @@ class CustomerGroup(NestedSet): self.update_user_role() def update_user_role(self): - customer_has_role_profile = frappe.get_meta("Supplier").has_field("role_profile_name") + customer_has_role_profile = frappe.get_meta("Customer").has_field("role_profile_name") fields = ["name", "role_profile_name"] if customer_has_role_profile else ["name"] for customer in frappe.get_all( "Customer", filters={"disabled": 0, "customer_group": self.name}, fields=fields -- GitLab