From c1d1a3bab19ece71d0e8e502f36b5194fbf7df6d Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Fri, 28 Jun 2024 18:45:22 +0200 Subject: [PATCH 1/2] fix: don't add empty multiselect to filters object The convention is that if a filter is not set, then it does not exist in the dictionary. However, empty multiselects used to appear as an empty list, breaking this convention. Now we filter out empty lists just like other falsy values. --- frappe/public/js/frappe/views/reports/query_report.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index ced2dbe3da..36f90f527b 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -1330,7 +1330,14 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { raise && this.toggle_message(false); return this.filters - .filter((f) => f.get_value()) + .filter((f) => { + const filter_value = f.get_value(); + if (typeof filter_value === "object") { + return filter_value.length > 0; + } else { + return filter_value; + } + }) .map((f) => { var v = f.get_value(); // hidden fields dont have $input From ff70fece72ce8efc20f48544ec7f3bdec78252de Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Fri, 28 Jun 2024 18:48:59 +0200 Subject: [PATCH 2/2] fix: layout of printed report filters --- .../js/frappe/views/reports/query_report.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index 36f90f527b..b23bd4809c 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -1480,16 +1480,23 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { get_filters_html_for_print() { const applied_filters = this.get_filter_values(); - return Object.keys(applied_filters) + const filter_html = Object.keys(applied_filters) .map((fieldname) => { const docfield = frappe.query_report.get_filter(fieldname).df; const value = applied_filters[fieldname]; - return `
${__(docfield.label, null, docfield.parent)}: ${frappe.format( - value, - docfield - )}
`; + return `
+ ${__(docfield.label, null, docfield.parent)}: ${frappe.format(value, docfield)} +
`; }) .join(""); + + return `
${filter_html}
+ `; } export_report() {