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):
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,


+ 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({
// opts parent, doctype, filter_fields, with_blank, select
init: function(opts) {
var me = this;
$.extend(this, opts);
this.fields_by_name = {};
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) {
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);
},
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 = "<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() {
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 = "<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() {
frappe.search.options.push({
label: __("Help on Search"),
@@ -208,12 +210,24 @@ frappe.search.verbs = [
});
},

// pages
// reports
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 {
label: __("Open {0}", ["<b>"+__(match)+"</b>"]),
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]
}
});
@@ -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`
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):


Loading…
Cancel
Save