Browse Source

Merge pull request #1182 from rmehta/report-in-search

[enhancement] reports now searchable from awesome bar, added in boot
version-14
Rushabh Mehta 10 years ago
parent
commit
54e330db80
6 changed files with 68 additions and 37 deletions
  1. +8
    -1
      frappe/boot.py
  2. +3
    -0
      frappe/change_log/current/readme.md
  3. +1
    -0
      frappe/change_log/current/report_in_search.md
  4. +19
    -17
      frappe/public/js/frappe/ui/filters/filters.js
  5. +33
    -19
      frappe/public/js/frappe/ui/toolbar/awesome_bar.js
  6. +4
    -0
      frappe/utils/user.py

+ 8
- 1
frappe/boot.py View File

@@ -104,9 +104,16 @@ def get_allowed_pages():


def load_translations(bootinfo): def load_translations(bootinfo):
if frappe.local.lang != 'en': if frappe.local.lang != 'en':
bootinfo["__messages"] = frappe.get_lang_dict("boot")
messages = frappe.get_lang_dict("boot")

bootinfo["lang"] = frappe.lang 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(): def get_fullnames():
"""map of user fullnames""" """map of user fullnames"""
ret = frappe.db.sql("""select name, ret = frappe.db.sql("""select name,


+ 3
- 0
frappe/change_log/current/readme.md View File

@@ -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)

+ 1
- 0
frappe/change_log/current/report_in_search.md View File

@@ -0,0 +1 @@
- Report can now be selected from search bar (Awesome bar)

+ 19
- 17
frappe/public/js/frappe/ui/filters/filters.js View File

@@ -382,26 +382,28 @@ frappe.ui.Filter = Class.extend({
frappe.ui.FieldSelect = Class.extend({ frappe.ui.FieldSelect = Class.extend({
// opts parent, doctype, filter_fields, with_blank, select // opts parent, doctype, filter_fields, with_blank, select
init: function(opts) { init: function(opts) {
var me = this;
$.extend(this, opts); $.extend(this, opts);
this.fields_by_name = {}; this.fields_by_name = {};
this.options = []; this.options = [];
this.$select = $('<input class="form-control">').appendTo(this.parent);
var me = this;
this.$select.autocomplete({
source: me.options,
minLength: 0,
focus: function(event, ui) {
ui.item && me.$select.val(ui.item.label);
return false;
},
select: function(event, ui) {
me.selected_doctype = ui.item.doctype;
me.selected_fieldname = ui.item.fieldname;
me.$select.val(ui.item.label);
if(me.select) me.select(ui.item.doctype, ui.item.fieldname);
return false;
}
});
this.$select = $('<input class="form-control">')
.appendTo(this.parent)
.on("click", function () { $(this).select(); })
.autocomplete({
source: me.options,
minLength: 0,
focus: function(event, ui) {
ui.item && me.$select.val(ui.item.label);
return false;
},
select: function(event, ui) {
me.selected_doctype = ui.item.doctype;
me.selected_fieldname = ui.item.fieldname;
me.$select.val(ui.item.label);
if(me.select) me.select(ui.item.doctype, ui.item.fieldname);
return false;
}
});


this.$select.data('ui-autocomplete')._renderItem = function(ul, item) { this.$select.data('ui-autocomplete')._renderItem = function(ul, item) {
return $(repl('<li class="filter-field-select"><p>%(label)s</p></li>', item)) return $(repl('<li class="filter-field-select"><p>%(label)s</p></li>', item))


+ 33
- 19
frappe/public/js/frappe/ui/toolbar/awesome_bar.js View File

@@ -27,14 +27,14 @@ frappe.search = {


response(frappe.search.options); 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; frappe.search.autocomplete_open = false;
}, },
select: function(event, ui) { select: function(event, ui) {
if(ui.item.route_options) {
if(ui.item._options) {
frappe.route_options = ui.item.route_options; frappe.route_options = ui.item.route_options;
} }


@@ -48,16 +48,6 @@ frappe.search = {
} }
}; };


var render_item = function(ul, d) {
var html = "<span>" + __(d.label || d.value) + "</span>";
if(d.description && d.value!==d.description) {
html += '<br><span class="text-muted">' + __(d.description) + '</span>';
}
return $('<li></li>')
.data('item.autocomplete', d)
.html('<a><p>' + html + '</p></a>')
.appendTo(ul);
};


var open_recent = function() { var open_recent = function() {
if (!frappe.search.autocomplete_open) { if (!frappe.search.autocomplete_open) {
@@ -67,15 +57,27 @@ frappe.search = {


$("#navbar-search") $("#navbar-search")
.on("focus", open_recent) .on("focus", open_recent)
.autocomplete(opts).data('ui-autocomplete')._renderItem = render_item;
.autocomplete(opts).data('ui-autocomplete')._renderItem =
frappe.search.render_item;


$("#sidebar-search") $("#sidebar-search")
.on("focus", open_recent) .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.make_page_title_map();
frappe.search.setup_recent(); frappe.search.setup_recent();
}, },
render_item: function(ul, d) {
var html = "<span>" + __(d.label || d.value) + "</span>";
if(d.description && d.value!==d.description) {
html += '<br><span class="text-muted">' + __(d.description) + '</span>';
}
return $('<li></li>')
.data('item.autocomplete', d)
.html('<a><p>' + html + '</p></a>')
.appendTo(ul);
},
add_help: function() { add_help: function() {
frappe.search.options.push({ frappe.search.options.push({
label: __("Help on Search"), label: __("Help on Search"),
@@ -208,12 +210,24 @@ frappe.search.verbs = [
}); });
}, },


// pages
// reports
function(txt) { function(txt) {
frappe.search.find(keys(frappe.search.pages), txt, function(match) {
frappe.search.find(keys(frappe.boot.user.all_reports), txt, function(match) {
var report_type = frappe.boot.user.all_reports[match];
return { return {
label: __("Open {0}", ["<b>"+__(match)+"</b>"]), label: __("Open {0}", ["<b>"+__(match)+"</b>"]),
value: __("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) {
return {
label: __("Report {0}", ["<b>"+__(match)+"</b>"]),
value: __("Report {0}", [__(match)]),
route: [frappe.search.pages[match].route || frappe.search.pages[match].name] route: [frappe.search.pages[match].route || frappe.search.pages[match].name]
} }
}); });
@@ -274,5 +288,5 @@ frappe.search.verbs = [
} }


}; };
},
}
]; ];

+ 4
- 0
frappe/utils/user.py View File

@@ -149,6 +149,9 @@ class User:
self.can_import = frappe.db.sql_list("""select name from `tabDocType` self.can_import = frappe.db.sql_list("""select name from `tabDocType`
where allow_import = 1""") 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): def get_defaults(self):
import frappe.defaults import frappe.defaults
self.defaults = frappe.defaults.get_defaults(self.name) self.defaults = frappe.defaults.get_defaults(self.name)
@@ -206,6 +209,7 @@ class User:


d[key] = list(set(getattr(self, key))) d[key] = list(set(getattr(self, key)))


d.all_reports = dict(self.all_reports)
return d return d


def get_user_fullname(user): def get_user_fullname(user):


Loading…
Cancel
Save