From b250d19153703d9defecc1637c85c5d5be98b7bf Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Thu, 21 Nov 2024 12:20:18 +0530 Subject: [PATCH 1/3] fix: user_query --- frappe/core/doctype/user/user.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index 32fdb38027..ac37d75a2a 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -1084,9 +1084,13 @@ def user_query(doctype, txt, searchfield, start, page_len, filters): "enabled": 1, "docstatus": ["<", 2], "name": ["not in", STANDARD_USERS], - searchfield: ["like", f"%{txt}%"], } + name_fields = ["first_name", "middle_name", "last_name"] + or_filters = [ + [searchfield, "like", f"%{txt}%"], + ] + [[field, "like", f"%{txt}%"] for field in name_fields] + if filters: if not (filters.get("ignore_user_type") and frappe.session.data.user_type == "System User"): list_filters["user_type"] = ["!=", "Website User"] @@ -1103,6 +1107,7 @@ def user_query(doctype, txt, searchfield, start, page_len, filters): limit_start=start, limit_page_length=page_len, order_by="name asc", + or_filters=or_filters, ) ] From 1a8d9d1122de7b3b1277f8c0fa9530afe0c63c98 Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Thu, 21 Nov 2024 17:48:52 +0530 Subject: [PATCH 2/3] refactor(user_query): simplify with `as_list=True` Signed-off-by: Akhil Narang --- frappe/core/doctype/user/user.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index ac37d75a2a..8ac3efa0ae 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -1098,18 +1098,16 @@ def user_query(doctype, txt, searchfield, start, page_len, filters): filters.pop("ignore_user_type", None) list_filters.update(filters) - return [ - (user.name, user.full_name) - for user in frappe.get_list( - doctype, - filters=list_filters, - fields=["name", "full_name"], - limit_start=start, - limit_page_length=page_len, - order_by="name asc", - or_filters=or_filters, - ) - ] + return frappe.get_list( + doctype, + filters=list_filters, + fields=["name", "full_name"], + limit_start=start, + limit_page_length=page_len, + order_by="name asc", + or_filters=or_filters, + as_list=True, + ) def get_total_users(): From a350b5c6deb505da0f6a32b941fc56ba6663e8b7 Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Thu, 21 Nov 2024 17:48:09 +0530 Subject: [PATCH 3/3] refactor(user_query): adjust query, only check fields if required Signed-off-by: Akhil Narang --- frappe/core/doctype/user/user.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index 8ac3efa0ae..3cfc901827 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -1083,13 +1083,12 @@ def user_query(doctype, txt, searchfield, start, page_len, filters): list_filters = { "enabled": 1, "docstatus": ["<", 2], - "name": ["not in", STANDARD_USERS], } - name_fields = ["first_name", "middle_name", "last_name"] - or_filters = [ - [searchfield, "like", f"%{txt}%"], - ] + [[field, "like", f"%{txt}%"] for field in name_fields] + # Check if we have a search term, and decide the filters depending on the search term + or_filters = [[searchfield, "like", f"%{txt}%"]] + if "name" in searchfield: + or_filters += [[field, "like", f"%{txt}%"] for field in ("first_name", "middle_name", "last_name")] if filters: if not (filters.get("ignore_user_type") and frappe.session.data.user_type == "System User"):