From 08d5b59778c8ff15547474d0efcfb9c1d32bc454 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 21 Aug 2023 15:05:10 +0530 Subject: [PATCH] refactor: filter on `name` while fetching custom column (#22133) --- frappe/desk/query_report.py | 8 ++++++-- .../public/js/frappe/views/reports/query_report.js | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index 297f8393c1..20754ea665 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -459,12 +459,16 @@ def add_total_row(result, columns, meta=None, is_tree=False, parent_field=None): @frappe.whitelist() -def get_data_for_custom_field(doctype, field): +def get_data_for_custom_field(doctype, field, names=None): if not frappe.has_permission(doctype, "read"): frappe.throw(_("Not Permitted to read {0}").format(doctype), frappe.PermissionError) - return frappe._dict(frappe.get_all(doctype, fields=["name", field], as_list=1)) + filters = {} + if names: + filters.update({"name": ["in", json.loads(names)]}) + + return frappe._dict(frappe.get_list(doctype, filters=filters, fields=["name", field], as_list=1)) def get_data_for_custom_report(columns): diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index 052bef73ef..39c3431df8 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -1697,10 +1697,14 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { args: { field: values.field, doctype: values.doctype, + names: Array.from( + this.doctype_field_map[values.doctype].names + ), }, callback: (r) => { const custom_data = r.message; - const link_field = this.doctype_field_map[values.doctype]; + const link_field = + this.doctype_field_map[values.doctype].fieldname; this.add_custom_column( custom_columns, @@ -1838,7 +1842,13 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { ); doctypes.forEach((doc) => { - this.doctype_field_map[doc.doctype] = doc.fieldname; + this.doctype_field_map[doc.doctype] = { fieldname: doc.fieldname, names: new Set() }; + }); + + this.data.forEach((row) => { + doctypes.forEach((doc) => { + this.doctype_field_map[doc.doctype].names.add(row[doc.fieldname]); + }); }); return doctypes;