[imp] added possibility to save filters
bzr revid: nicolas.vanhoren@openerp.com-20110725113740-8q9vo1rlvexertc1
This commit is contained in:
parent
5bc4c09c3a
commit
fb0c16e24e
|
@ -773,6 +773,25 @@ class SearchView(View):
|
||||||
filter["context"] = req.session.eval_context(self.parse_context(filter["context"], req.session))
|
filter["context"] = req.session.eval_context(self.parse_context(filter["context"], req.session))
|
||||||
filter["domain"] = req.session.eval_domain(self.parse_domain(filter["domain"], req.session))
|
filter["domain"] = req.session.eval_domain(self.parse_domain(filter["domain"], req.session))
|
||||||
return filters
|
return filters
|
||||||
|
|
||||||
|
@openerpweb.jsonrequest
|
||||||
|
def save_filter(self, req, model, name, context_to_save, domain):
|
||||||
|
Model = req.session.model("ir.filters")
|
||||||
|
ctx = openerpweb.nonliterals.CompoundContext(context_to_save)
|
||||||
|
ctx.session = req.session
|
||||||
|
ctx = ctx.evaluate()
|
||||||
|
domain = openerpweb.nonliterals.CompoundDomain(domain)
|
||||||
|
domain.session = req.session
|
||||||
|
domain = domain.evaluate()
|
||||||
|
uid = req.session._uid
|
||||||
|
context = req.session.eval_context(req.context)
|
||||||
|
to_return = Model.create_or_replace({"context": ctx,
|
||||||
|
"domain": domain,
|
||||||
|
"model_id": model,
|
||||||
|
"name": name,
|
||||||
|
"user_id": uid
|
||||||
|
}, context)
|
||||||
|
return to_return
|
||||||
|
|
||||||
class Binary(openerpweb.Controller):
|
class Binary(openerpweb.Controller):
|
||||||
_cp_path = "/base/binary"
|
_cp_path = "/base/binary"
|
||||||
|
|
|
@ -145,7 +145,10 @@ openerp.base.SearchView = openerp.base.Controller.extend({
|
||||||
self.ready.resolve();
|
self.ready.resolve();
|
||||||
});
|
});
|
||||||
|
|
||||||
// filters management
|
this.reload_managed_filters();
|
||||||
|
},
|
||||||
|
reload_managed_filters: function() {
|
||||||
|
var self = this;
|
||||||
return this.rpc('/base/searchview/get_filters', {
|
return this.rpc('/base/searchview/get_filters', {
|
||||||
model: this.dataset.model
|
model: this.dataset.model
|
||||||
}).then(function(result) {
|
}).then(function(result) {
|
||||||
|
@ -159,6 +162,7 @@ openerp.base.SearchView = openerp.base.Controller.extend({
|
||||||
* Handle event when the user make a selection in the filters management select box.
|
* Handle event when the user make a selection in the filters management select box.
|
||||||
*/
|
*/
|
||||||
on_filters_management: function(e) {
|
on_filters_management: function(e) {
|
||||||
|
var self = this;
|
||||||
var select = this.$element.find(".oe_search-view-filters-management");
|
var select = this.$element.find(".oe_search-view-filters-management");
|
||||||
var val = select.val();
|
var val = select.val();
|
||||||
|
|
||||||
|
@ -173,7 +177,38 @@ openerp.base.SearchView = openerp.base.Controller.extend({
|
||||||
this.on_search([filter.domain], [filter.context], []);
|
this.on_search([filter.domain], [filter.context], []);
|
||||||
} else if (val == "save_filter") {
|
} else if (val == "save_filter") {
|
||||||
select.val("_filters");
|
select.val("_filters");
|
||||||
//TODO niv
|
var data = this.build_search_data();
|
||||||
|
var context = new openerp.base.CompoundContext();
|
||||||
|
_.each(data.contexts, function(x) {
|
||||||
|
context.add(x);
|
||||||
|
});
|
||||||
|
var domain = new openerp.base.CompoundDomain();
|
||||||
|
_.each(data.domains, function(x) {
|
||||||
|
domain.add(x);
|
||||||
|
});
|
||||||
|
var dial_html = QWeb.render("SearchView.managed-filters.add");
|
||||||
|
var $dial = $(dial_html);
|
||||||
|
$dial.dialog({
|
||||||
|
modal: true,
|
||||||
|
title: "Filter Entry",
|
||||||
|
buttons: {
|
||||||
|
Cancel: function() {
|
||||||
|
$(this).dialog("close");
|
||||||
|
},
|
||||||
|
OK: function() {
|
||||||
|
$(this).dialog("close");
|
||||||
|
var name = $(this).find("input").val();
|
||||||
|
self.rpc('/base/searchview/save_filter', {
|
||||||
|
model: self.dataset.model,
|
||||||
|
context_to_save: context,
|
||||||
|
domain: domain,
|
||||||
|
name: name
|
||||||
|
}).then(function(result) {
|
||||||
|
self.reload_managed_filters();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
}
|
||||||
|
});
|
||||||
} else { // manage_filters
|
} else { // manage_filters
|
||||||
select.val("_filters");
|
select.val("_filters");
|
||||||
//TODO niv
|
//TODO niv
|
||||||
|
@ -197,6 +232,16 @@ openerp.base.SearchView = openerp.base.Controller.extend({
|
||||||
|
|
||||||
if (e && e.preventDefault) { e.preventDefault(); }
|
if (e && e.preventDefault) { e.preventDefault(); }
|
||||||
|
|
||||||
|
var data = this.build_search_data();
|
||||||
|
|
||||||
|
if (data.errors.length) {
|
||||||
|
this.on_invalid(data.errors);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.on_search(data.domains, data.contexts, data.groupbys);
|
||||||
|
},
|
||||||
|
build_search_data: function() {
|
||||||
var domains = [],
|
var domains = [],
|
||||||
contexts = [],
|
contexts = [],
|
||||||
errors = [];
|
errors = [];
|
||||||
|
@ -221,19 +266,13 @@ openerp.base.SearchView = openerp.base.Controller.extend({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (errors.length) {
|
|
||||||
this.on_invalid(errors);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: do we need to handle *fields* with group_by in their context?
|
// TODO: do we need to handle *fields* with group_by in their context?
|
||||||
var groupbys = _(this.enabled_filters)
|
var groupbys = _(this.enabled_filters)
|
||||||
.chain()
|
.chain()
|
||||||
.map(function (filter) { return filter.get_context();})
|
.map(function (filter) { return filter.get_context();})
|
||||||
.compact()
|
.compact()
|
||||||
.value();
|
.value();
|
||||||
|
return {domains: domains, contexts: contexts, errors: errors, groupbys: groupbys};
|
||||||
this.on_search(domains, contexts, groupbys);
|
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Triggered after the SearchView has collected all relevant domains and
|
* Triggered after the SearchView has collected all relevant domains and
|
||||||
|
|
|
@ -679,6 +679,13 @@
|
||||||
<option value="save_filter">Save Filter</option>
|
<option value="save_filter">Save Filter</option>
|
||||||
<option value="manage_filters">Manage Filters</option>
|
<option value="manage_filters">Manage Filters</option>
|
||||||
</t>
|
</t>
|
||||||
|
<t t-name="SearchView.managed-filters.add">
|
||||||
|
<div>
|
||||||
|
<p>Filter Name:</p>
|
||||||
|
<input type="text"/>
|
||||||
|
<p>(Any existing filter with the same name will be replaced)</p>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
<t t-name="SearchView.render_lines">
|
<t t-name="SearchView.render_lines">
|
||||||
<table class="oe-searchview-render-line" border="0" cellspacing="0" cellpadding="0"
|
<table class="oe-searchview-render-line" border="0" cellspacing="0" cellpadding="0"
|
||||||
t-foreach="lines" t-as="line">
|
t-foreach="lines" t-as="line">
|
||||||
|
|
Loading…
Reference in New Issue