diff --git a/frappe/public/js/frappe/form/controls/dynamic_link.js b/frappe/public/js/frappe/form/controls/dynamic_link.js index 650ab175cd..fcb1fbf272 100644 --- a/frappe/public/js/frappe/form/controls/dynamic_link.js +++ b/frappe/public/js/frappe/form/controls/dynamic_link.js @@ -7,13 +7,19 @@ frappe.ui.form.ControlDynamicLink = frappe.ui.form.ControlLink.extend({ //for dialog box return cur_dialog.get_value(this.df.options); } - if (cur_frm==null && cur_list){ - //for list page - let list_filter = cur_list.wrapper.find("input[data-fieldname*="+this.df.options+"]"); - if(list_filter.length > 0) { - return list_filter.val(); + if (!cur_frm) { + const selector = `input[data-fieldname="${this.df.options}"]`; + let input = null; + if (cur_list) { + // for list page + input = cur_list.wrapper.find(selector); + } + if (cur_page) { + input = $(cur_page.page).find(selector); + } + if (input) { + return input.val(); } - return $(cur_page.page).find("input[data-fieldname*="+this.df.options+"]").val(); } var options = frappe.model.get_value(this.df.parent, this.docname, this.df.options); // if(!options) { diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index 1c820d9f85..92d88c451b 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -335,34 +335,45 @@ frappe.views.QueryReport = Class.extend({ var $filters = $(this.parent).find('.page-form .filters'); $(this.parent).find('.page-form').toggle($filters.length ? true : false); + // set the field 'query_report_filters_by_name' first as they can be used in + // setting/triggering the filters + this.set_filters_by_name(); + this.setting_filters = true; this.set_route_filters(); this.setting_filters = false; - this.set_filters_by_name(); this.flags.filters_set = true; }, clear_filters: function() { this.filters = []; $(this.parent).find('.page-form .filters').remove(); }, + set_filters_by_name: function() { + frappe.query_report_filters_by_name = {}; + for(var i in this.filters) { + frappe.query_report_filters_by_name[this.filters[i].df.fieldname] = this.filters[i]; + } + }, set_route_filters: function() { var me = this; if(frappe.route_options) { - $.each(this.filters || [], function(i, f) { - if(frappe.route_options[f.df.fieldname]!=null) { - f.set_value(frappe.route_options[f.df.fieldname]); + const fields = Object.keys(frappe.route_options); + const filters_to_set = this.filters.filter(f => fields.includes(f.df.fieldname)); + + const promises = filters_to_set.map(f => { + return () => { + const value = frappe.route_options[f.df.fieldname]; + return f.set_value(value); } }); - } - frappe.route_options = null; - }, - set_filters_by_name: function() { - frappe.query_report_filters_by_name = {}; + promises.push(() => { + frappe.route_options = null; + }); - for(var i in this.filters) { - frappe.query_report_filters_by_name[this.filters[i].df.fieldname] = this.filters[i]; + return frappe.run_serially(promises); } + }, refresh: function() { // throttle