[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:
Xavier Morel 2012-03-07 13:03:23 +01:00
parent 322032a2ee
commit 9a646fce10
2 changed files with 30 additions and 8 deletions

View File

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

View File

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