@@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json | |||||
from .exceptions import * | from .exceptions import * | ||||
from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template | 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" | __title__ = "Frappe Framework" | ||||
local = Local() | local = Local() | ||||
@@ -1,12 +1,14 @@ | |||||
<div> | <div> | ||||
{% if limits.expiry %} | |||||
{% if limits.upgrade_url %} | |||||
<div class="upgrade-message padding" style="border-bottom: 1px solid #d0d8dc;"> | <div class="upgrade-message padding" style="border-bottom: 1px solid #d0d8dc;"> | ||||
<h4>{{ __("You have {0} days left in your subscription", [days_to_expiry]) }}</h4> | |||||
{% if limits.expiry %} | |||||
<h4>{{ __("You have {0} days left in your subscription", [days_to_expiry]) }}</h4> | |||||
{%elif%} | |||||
<h4>{{ __("You have subscribed for one user free plan") }}</h4> | |||||
{% endif %} | |||||
{% if limits.upgrade_url %} | |||||
<p>Upgrade to a premium plan with more users, storage and priority support.</p> | <p>Upgrade to a premium plan with more users, storage and priority support.</p> | ||||
<button class="btn btn-primary btn-sm primary-action">Upgrade</button> | <button class="btn btn-primary btn-sm primary-action">Upgrade</button> | ||||
{% endif %} | |||||
</div> | </div> | ||||
{% endif %} | {% endif %} | ||||
@@ -7,13 +7,19 @@ frappe.ui.form.ControlDynamicLink = frappe.ui.form.ControlLink.extend({ | |||||
//for dialog box | //for dialog box | ||||
return cur_dialog.get_value(this.df.options); | 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); | var options = frappe.model.get_value(this.df.parent, this.docname, this.df.options); | ||||
// if(!options) { | // if(!options) { | ||||
@@ -335,34 +335,45 @@ frappe.views.QueryReport = Class.extend({ | |||||
var $filters = $(this.parent).find('.page-form .filters'); | var $filters = $(this.parent).find('.page-form .filters'); | ||||
$(this.parent).find('.page-form').toggle($filters.length ? true : false); | $(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.setting_filters = true; | ||||
this.set_route_filters(); | this.set_route_filters(); | ||||
this.setting_filters = false; | this.setting_filters = false; | ||||
this.set_filters_by_name(); | |||||
this.flags.filters_set = true; | this.flags.filters_set = true; | ||||
}, | }, | ||||
clear_filters: function() { | clear_filters: function() { | ||||
this.filters = []; | this.filters = []; | ||||
$(this.parent).find('.page-form .filters').remove(); | $(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() { | set_route_filters: function() { | ||||
var me = this; | var me = this; | ||||
if(frappe.route_options) { | 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() { | refresh: function() { | ||||
// throttle | // throttle | ||||