diff --git a/frappe/boot.py b/frappe/boot.py index b63935d4c8..f1877c35c1 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -104,9 +104,16 @@ def get_allowed_pages(): def load_translations(bootinfo): if frappe.local.lang != 'en': - bootinfo["__messages"] = frappe.get_lang_dict("boot") + messages = frappe.get_lang_dict("boot") + bootinfo["lang"] = frappe.lang + # load translated report names + for name in bootinfo.user.all_reports: + messages[name] = frappe._(name) + + bootinfo["__messages"] = messages + def get_fullnames(): """map of user fullnames""" ret = frappe.db.sql("""select name, diff --git a/frappe/change_log/current/readme.md b/frappe/change_log/current/readme.md new file mode 100644 index 0000000000..e93bb75396 --- /dev/null +++ b/frappe/change_log/current/readme.md @@ -0,0 +1,3 @@ +Leave change log files in this folder for user release notes. + +(this file is just a place holder, don't delete it) diff --git a/frappe/change_log/current/report_in_search.md b/frappe/change_log/current/report_in_search.md new file mode 100644 index 0000000000..4f6808a20b --- /dev/null +++ b/frappe/change_log/current/report_in_search.md @@ -0,0 +1 @@ +- Report can now be selected from search bar (Awesome bar) diff --git a/frappe/public/js/frappe/ui/toolbar/awesome_bar.js b/frappe/public/js/frappe/ui/toolbar/awesome_bar.js index 3040217455..91b7a8b070 100644 --- a/frappe/public/js/frappe/ui/toolbar/awesome_bar.js +++ b/frappe/public/js/frappe/ui/toolbar/awesome_bar.js @@ -27,14 +27,14 @@ frappe.search = { response(frappe.search.options); }, - open: function() { - frappe.search.autocomplete_open = true; + open: function(event, ui) { + frappe.search.autocomplete_open = event.target; }, - close: function() { + close: function(event, ui) { frappe.search.autocomplete_open = false; }, select: function(event, ui) { - if(ui.item.route_options) { + if(ui.item._options) { frappe.route_options = ui.item.route_options; } @@ -48,16 +48,6 @@ frappe.search = { } }; - var render_item = function(ul, d) { - var html = "" + __(d.label || d.value) + ""; - if(d.description && d.value!==d.description) { - html += '
' + __(d.description) + ''; - } - return $('
  • ') - .data('item.autocomplete', d) - .html('

    ' + html + '

    ') - .appendTo(ul); - }; var open_recent = function() { if (!frappe.search.autocomplete_open) { @@ -67,15 +57,27 @@ frappe.search = { $("#navbar-search") .on("focus", open_recent) - .autocomplete(opts).data('ui-autocomplete')._renderItem = render_item; + .autocomplete(opts).data('ui-autocomplete')._renderItem = + frappe.search.render_item; $("#sidebar-search") .on("focus", open_recent) - .autocomplete(opts).data('ui-autocomplete')._renderItem = render_item; + .autocomplete(opts).data('ui-autocomplete')._renderItem = + frappe.search.render_item; frappe.search.make_page_title_map(); frappe.search.setup_recent(); }, + render_item: function(ul, d) { + var html = "" + __(d.label || d.value) + ""; + if(d.description && d.value!==d.description) { + html += '
    ' + __(d.description) + ''; + } + return $('
  • ') + .data('item.autocomplete', d) + .html('

    ' + html + '

    ') + .appendTo(ul); + }, add_help: function() { frappe.search.options.push({ label: __("Help on Search"), @@ -208,6 +210,18 @@ frappe.search.verbs = [ }); }, + // reports + function(txt) { + frappe.search.find(keys(frappe.boot.user.all_reports), txt, function(match) { + var report_type = frappe.boot.user.all_reports[match]; + return { + label: __("Open {0}", [""+__(match)+""]), + value: __("Open {0}", [__(match)]), + route: [report_type=="Report Builder" ? "Report" : "query-report", match] + } + }); + }, + // pages function(txt) { frappe.search.find(keys(frappe.search.pages), txt, function(match) { @@ -274,5 +288,5 @@ frappe.search.verbs = [ } }; - }, + } ]; diff --git a/frappe/utils/user.py b/frappe/utils/user.py index 64b00f4e56..ed63d42334 100644 --- a/frappe/utils/user.py +++ b/frappe/utils/user.py @@ -149,6 +149,9 @@ class User: self.can_import = frappe.db.sql_list("""select name from `tabDocType` where allow_import = 1""") + self.all_reports = frappe.db.sql("""select name, report_type from tabReport + where ref_doctype in ('{0}')""".format("', '".join(self.can_get_report))) + def get_defaults(self): import frappe.defaults self.defaults = frappe.defaults.get_defaults(self.name) @@ -206,6 +209,7 @@ class User: d[key] = list(set(getattr(self, key))) + d.all_reports = dict(self.all_reports) return d def get_user_fullname(user):