[ADD] permanent loading of saved filters
When selecting a saved filter, its data is now saved inside the searchview's state, and re-used any time there's a search performed (until the filter is replaced or the search view is cleared). Some cleanup of the support code for loading filters (SearchView.get_filters) also had to be performed in order not to fill contexts with (potentially incorrect) crap in case the filter is re-saved. lp bug: https://launchpad.net/bugs/948219 fixed bzr revid: xmo@openerp.com-20120307120323-pub0yuwjqk1r3y0p
This commit is contained in:
parent
322032a2ee
commit
9a646fce10
|
@ -1308,10 +1308,15 @@ class SearchView(View):
|
|||
filters = Model.get_filters(model)
|
||||
for filter in filters:
|
||||
try:
|
||||
filter["context"] = req.session.eval_context(
|
||||
parse_context(filter["context"], req.session))
|
||||
filter["domain"] = req.session.eval_domain(
|
||||
parse_domain(filter["domain"], req.session))
|
||||
parsed_context = parse_context(filter["context"], req.session)
|
||||
filter["context"] = (parsed_context
|
||||
if not isinstance(parsed_context, common.nonliterals.BaseContext)
|
||||
else req.session.eval_context(parsed_context))
|
||||
|
||||
parsed_domain = parse_domain(filter["domain"], req.session)
|
||||
filter["domain"] = (parsed_domain
|
||||
if not isinstance(parsed_domain, common.nonliterals.BaseDomain)
|
||||
else req.session.eval_domain(parsed_domain))
|
||||
except Exception:
|
||||
logger.exception("Failed to parse custom filter %s in %s",
|
||||
filter['name'], model)
|
||||
|
|
|
@ -32,6 +32,8 @@ openerp.web.SearchView = openerp.web.OldWidget.extend(/** @lends openerp.web.Sea
|
|||
this.hidden = !!hidden;
|
||||
this.headless = this.hidden && !this.has_defaults;
|
||||
|
||||
this.filter_data = {};
|
||||
|
||||
this.ready = $.Deferred();
|
||||
},
|
||||
start: function() {
|
||||
|
@ -271,7 +273,12 @@ openerp.web.SearchView = openerp.web.OldWidget.extend(/** @lends openerp.web.Sea
|
|||
group_by instanceof Array ? group_by : group_by.split(','),
|
||||
function (el) { return { group_by: el }; });
|
||||
}
|
||||
this.on_search([filter.domain], [filter.context], groupbys);
|
||||
this.filter_data = {
|
||||
domains: [filter.domain],
|
||||
contexts: [filter.context],
|
||||
groupbys: groupbys
|
||||
};
|
||||
this.do_search();
|
||||
}, this));
|
||||
} else {
|
||||
select.val('');
|
||||
|
@ -339,9 +346,6 @@ openerp.web.SearchView = openerp.web.OldWidget.extend(/** @lends openerp.web.Sea
|
|||
if (this.headless && !this.has_defaults) {
|
||||
return this.on_search([], [], []);
|
||||
}
|
||||
// reset filters management
|
||||
var select = this.$element.find(".oe_search-view-filters-management");
|
||||
select.val("_filters");
|
||||
|
||||
if (e && e.preventDefault) { e.preventDefault(); }
|
||||
|
||||
|
@ -385,6 +389,16 @@ openerp.web.SearchView = openerp.web.OldWidget.extend(/** @lends openerp.web.Sea
|
|||
.map(function (filter) { return filter.get_context();})
|
||||
.compact()
|
||||
.value();
|
||||
|
||||
if (this.filter_data.contexts) {
|
||||
contexts = this.filter_data.contexts.concat(contexts)
|
||||
}
|
||||
if (this.filter_data.domains) {
|
||||
domains = this.filter_data.domains.concat(domains);
|
||||
}
|
||||
if (this.filter_data.groupbys) {
|
||||
groupbys = this.filter_data.groupbys.concat(groupbys);
|
||||
}
|
||||
return {domains: domains, contexts: contexts, errors: errors, groupbys: groupbys};
|
||||
},
|
||||
/**
|
||||
|
@ -423,6 +437,9 @@ openerp.web.SearchView = openerp.web.OldWidget.extend(/** @lends openerp.web.Sea
|
|||
* @param {Boolean} [reload_view=true]
|
||||
*/
|
||||
do_clear: function (reload_view) {
|
||||
this.filter_data = {};
|
||||
this.$element.find(".oe_search-view-filters-management").val('');
|
||||
|
||||
this.$element.find('.filter_label, .filter_icon').removeClass('enabled');
|
||||
this.enabled_filters.splice(0);
|
||||
var string = $('a.searchview_group_string');
|
||||
|
|
Loading…
Reference in New Issue