diff --git a/frappe/__init__.py b/frappe/__init__.py
index 0d170fa833..a5a4a05491 100644
--- a/frappe/__init__.py
+++ b/frappe/__init__.py
@@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json
from .exceptions import *
from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template
-__version__ = '9.2.16'
+__version__ = '9.2.17'
__title__ = "Frappe Framework"
local = Local()
diff --git a/frappe/core/page/usage_info/usage_info.html b/frappe/core/page/usage_info/usage_info.html
index 0b85862622..cdc2e3e7d2 100644
--- a/frappe/core/page/usage_info/usage_info.html
+++ b/frappe/core/page/usage_info/usage_info.html
@@ -1,12 +1,14 @@
- {% if limits.expiry %}
+ {% if limits.upgrade_url %}
-
{{ __("You have {0} days left in your subscription", [days_to_expiry]) }}
+ {% if limits.expiry %}
+
{{ __("You have {0} days left in your subscription", [days_to_expiry]) }}
+ {%elif%}
+
{{ __("You have subscribed for one user free plan") }}
+ {% endif %}
- {% if limits.upgrade_url %}
Upgrade to a premium plan with more users, storage and priority support.
- {% endif %}
{% endif %}
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