From 5a73fd8219eeb8a76408eb11e90b8188849ede48 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 24 Apr 2024 12:26:00 +0530 Subject: [PATCH] refactor: filters for export on prepared report (backport #26106) (#26116) * fix: filters on prepared report export (cherry picked from commit 71a9fa4fe9289c6628e6630a0dabb2de97ef2e73) # Conflicts: # frappe/public/js/frappe/views/reports/query_report.js * refactor: Store prepared_report_name state on report obj (cherry picked from commit b5b6a5255959dfd8523cc16fc70ff472cb596a9c) # Conflicts: # frappe/core/doctype/prepared_report/prepared_report.js # frappe/public/js/frappe/views/reports/query_report.js --------- Co-authored-by: Rutwik Hiwalkar Co-authored-by: Ankush Menat --- .../prepared_report/prepared_report.js | 9 ++--- .../js/frappe/views/reports/query_report.js | 36 +++++++++---------- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/frappe/core/doctype/prepared_report/prepared_report.js b/frappe/core/doctype/prepared_report/prepared_report.js index 11f9caf8fd8..3a50d7782db 100644 --- a/frappe/core/doctype/prepared_report/prepared_report.js +++ b/frappe/core/doctype/prepared_report/prepared_report.js @@ -39,13 +39,8 @@ frappe.ui.form.on("Prepared Report", { if (frm.doc.status == "Completed") { frm.page.set_primary_action(__("Show Report"), () => { - frappe.set_route( - "query-report", - frm.doc.report_name, - frappe.utils.make_query_string({ - prepared_report_name: frm.doc.name, - }) - ); + frappe.route_options = { prepared_report_name: frm.doc.name }; + frappe.set_route("query-report", frm.doc.report_name); }); } }, diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index 53fa3b8946a..d4770756c1b 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -65,21 +65,22 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { } get_url_with_filters() { - const query_params = Object.entries(this.get_filter_values()) - .map(([field, value], _idx) => { + let query_params = new URLSearchParams(); + if (this.prepared_report_name) { + query_params.append("prepared_report_name", this.prepared_report_name); + } else { + Object.entries(this.get_filter_values()).map(([field, value], _idx) => { // multiselects if (Array.isArray(value)) { if (!value.length) return ""; value = JSON.stringify(value); } - return `${field}=${encodeURIComponent(value)}`; - }) - .filter(Boolean) - .join("&"); - + query_params.append(field, value); + }); + } let full_url = window.location.href.replace(window.location.search, ""); - if (query_params) { - full_url += "?" + query_params; + if (query_params.toString()) { + full_url += "?" + query_params.toString(); } return full_url; } @@ -377,6 +378,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { } refresh_report(route_options) { + this.prepared_report_name = null; // this should be set only if prepared report is EXPLICITLY requested this.toggle_message(true); this.toggle_report(false); @@ -579,6 +581,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { const fields = Object.keys(route_options); const filters_to_set = this.filters.filter((f) => fields.includes(f.df.fieldname)); + this.prepared_report_name = route_options.prepared_report_name; const promises = filters_to_set.map((f) => { return () => { @@ -630,10 +633,8 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { this.last_ajax.abort(); } - const query_params = this.get_query_params(); - - if (query_params.prepared_report_name) { - filters.prepared_report_name = query_params.prepared_report_name; + if (this.prepared_report_name) { + filters.prepared_report_name = this.prepared_report_name; } return new Promise((resolve) => { @@ -669,7 +670,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { this.prepared_report_document = data.doc; // If query_string contains prepared_report_name then set filters // to match the mentioned prepared report doc and disable editing - if (query_params.prepared_report_name) { + if (this.prepared_report_name) { this.prepared_report_action = "Edit"; const filters_from_report = JSON.parse(data.doc.filters); Object.values(this.filters).forEach(function (field) { @@ -1485,11 +1486,8 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { this.make_access_log("Export", file_format); let filters = this.get_filter_values(true); - if (frappe.urllib.get_dict("prepared_report_name")) { - filters = Object.assign( - frappe.urllib.get_dict("prepared_report_name"), - filters - ); + if (this.prepared_report_name) { + filters.prepared_report_name = this.prepared_report_name; } const visible_idx = this.datatable?.bodyRenderer.visibleRowIndices || [];