diff --git a/frappe/core/doctype/test_runner/test_runner.js b/frappe/core/doctype/test_runner/test_runner.js index 243c2804ca..0c305e7014 100644 --- a/frappe/core/doctype/test_runner/test_runner.js +++ b/frappe/core/doctype/test_runner/test_runner.js @@ -62,7 +62,6 @@ frappe.ui.form.on('Test Runner', { QUnit.done(({ total, failed, passed, runtime }) => { // flag for selenium that test is done - $('
').appendTo($('body')); console.log( `Total: ${total}, Failed: ${failed}, Passed: ${passed}, Runtime: ${runtime}` ); // eslint-disable-line @@ -72,6 +71,9 @@ frappe.ui.form.on('Test Runner', { console.log('Tests Passed'); // eslint-disable-line } frappe.set_route('Form', 'Test Runner', 'Test Runner'); + + $('
').appendTo($('body')); + }); }); diff --git a/frappe/desk/calendar.py b/frappe/desk/calendar.py index fa01b3f8de..d9cd03004a 100644 --- a/frappe/desk/calendar.py +++ b/frappe/desk/calendar.py @@ -19,16 +19,8 @@ def update_event(args, field_map): def get_event_conditions(doctype, filters=None): """Returns SQL conditions with user permissions and filters for event queries""" - from frappe.desk.reportview import build_match_conditions + from frappe.desk.reportview import get_filters_cond if not frappe.has_permission(doctype): frappe.throw(_("Not Permitted"), frappe.PermissionError) - conditions = build_match_conditions(doctype) - conditions = conditions and (" and " + conditions) or "" - if filters: - filters = json.loads(filters) - for key in filters: - if filters[key]: - conditions += 'and `{0}` = "{1}"'.format(frappe.db.escape(key), frappe.db.escape(filters[key])) - - return conditions + return get_filters_cond(doctype, filters, [], with_match_conditions = True) diff --git a/frappe/desk/reportview.py b/frappe/desk/reportview.py index 920fb7f36b..26c81bdbeb 100644 --- a/frappe/desk/reportview.py +++ b/frappe/desk/reportview.py @@ -334,7 +334,7 @@ def build_match_conditions(doctype, as_condition=True): else: return match_conditions -def get_filters_cond(doctype, filters, conditions, ignore_permissions=None): +def get_filters_cond(doctype, filters, conditions, ignore_permissions=None, with_match_conditions=False): if filters: flt = filters if isinstance(filters, dict): @@ -350,6 +350,10 @@ def get_filters_cond(doctype, filters, conditions, ignore_permissions=None): query = DatabaseQuery(doctype) query.filters = flt query.conditions = conditions + + if with_match_conditions: + query.build_match_conditions() + query.build_filter_conditions(flt, conditions, ignore_permissions) cond = ' and ' + ' and '.join(query.conditions) diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index 714d474ae5..5a5a3ac725 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -113,13 +113,20 @@ frappe.ui.Page = Class.extend({ }, set_action: function(btn, opts) { + let me = this; if (opts.icon) { opts.label = this.get_icon_label(opts.icon, opts.label); } this.clear_action_of(btn); - btn.removeClass("hide").prop("disabled", false).html(opts.label).on("click", opts.click); + btn.removeClass("hide") + .prop("disabled", false) + .html(opts.label) + .on("click", function() { + let response = opts.click.apply(this); + me.btn_disable_enable(btn, response); + }); if (opts.working_label) { btn.attr("data-working-label", opts.working_label); @@ -250,31 +257,35 @@ frappe.ui.Page = Class.extend({ this.get_inner_group_button(label).find("button").removeClass("btn-default").addClass("btn-primary"); }, + btn_disable_enable: function(btn, response) { + if (response && response.then) { + btn.prop('disabled', true); + response.then(() => { + btn.prop('disabled', false); + }) + } else if (response && response.always) { + btn.prop('disabled', true); + response.always(() => { + btn.prop('disabled', false); + }); + } + }, + add_inner_button: function(label, action, group) { let _action = function() { let btn = $(this); - let _ret = action(); - if (_ret && _ret.then) { - // returns a promise - btn.attr('disabled', true); - _ret.then(() => { - btn.attr('disabled', false); - }) - } - if (_ret && _ret.always) { - // returns frappe.call ($.ajax) - btn.attr('disabled', true); - _ret.always(() => { - btn.attr('disabled', false); - }); - } - } + let response = action(); + this.btn_disable_enable(btn, response); + }; if(group) { var $group = this.get_inner_group_button(group); - return $('
  • '+label+'
  • ').on('click', _action).appendTo($group.find(".dropdown-menu")); + return $('
  • '+label+'
  • ') + .on('click', _action) + .appendTo($group.find(".dropdown-menu")); } else { return $('