summaryrefslogtreecommitdiff
path: root/addons/base/static/src
diff options
context:
space:
mode:
authorniv-openerp <nicolas.vanhoren@openerp.com>2011-07-25 13:37:40 +0200
committerniv-openerp <nicolas.vanhoren@openerp.com>2011-07-25 13:37:40 +0200
commitfb0c16e24e502e168ea7ee9373fc0f1933ac4bc9 (patch)
treee8e1012b20e92b8a1b69f37387bae2575f1b6f4d /addons/base/static/src
parent5bc4c09c3a814f28458522c7f7ba79eb88732fac (diff)
[imp] added possibility to save filters
bzr revid: nicolas.vanhoren@openerp.com-20110725113740-8q9vo1rlvexertc1
Diffstat (limited to 'addons/base/static/src')
-rw-r--r--addons/base/static/src/js/search.js57
-rw-r--r--addons/base/static/src/xml/base.xml7
2 files changed, 55 insertions, 9 deletions
diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js
index 779cd74c999..36f0aef1b90 100644
--- a/addons/base/static/src/js/search.js
+++ b/addons/base/static/src/js/search.js
@@ -145,7 +145,10 @@ openerp.base.SearchView = openerp.base.Controller.extend({
self.ready.resolve();
});
- // filters management
+ this.reload_managed_filters();
+ },
+ reload_managed_filters: function() {
+ var self = this;
return this.rpc('/base/searchview/get_filters', {
model: this.dataset.model
}).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.
*/
on_filters_management: function(e) {
+ var self = this;
var select = this.$element.find(".oe_search-view-filters-management");
var val = select.val();
@@ -173,7 +177,38 @@ openerp.base.SearchView = openerp.base.Controller.extend({
this.on_search([filter.domain], [filter.context], []);
} else if (val == "save_filter") {
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
select.val("_filters");
//TODO niv
@@ -197,6 +232,16 @@ openerp.base.SearchView = openerp.base.Controller.extend({
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 = [],
contexts = [],
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?
var groupbys = _(this.enabled_filters)
.chain()
.map(function (filter) { return filter.get_context();})
.compact()
.value();
-
- this.on_search(domains, contexts, groupbys);
+ return {domains: domains, contexts: contexts, errors: errors, groupbys: groupbys};
},
/**
* Triggered after the SearchView has collected all relevant domains and
diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml
index faab1eb3d6d..5570415fdde 100644
--- a/addons/base/static/src/xml/base.xml
+++ b/addons/base/static/src/xml/base.xml
@@ -679,6 +679,13 @@
<option value="save_filter">Save Filter</option>
<option value="manage_filters">Manage Filters</option>
</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">
<table class="oe-searchview-render-line" border="0" cellspacing="0" cellpadding="0"
t-foreach="lines" t-as="line">