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 $('
' + 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 += '' + 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):