diff options
| author | niv-openerp <nicolas.vanhoren@openerp.com> | 2011-07-25 13:37:40 +0200 |
|---|---|---|
| committer | niv-openerp <nicolas.vanhoren@openerp.com> | 2011-07-25 13:37:40 +0200 |
| commit | fb0c16e24e502e168ea7ee9373fc0f1933ac4bc9 (patch) | |
| tree | e8e1012b20e92b8a1b69f37387bae2575f1b6f4d /addons/base/static/src | |
| parent | 5bc4c09c3a814f28458522c7f7ba79eb88732fac (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.js | 57 | ||||
| -rw-r--r-- | addons/base/static/src/xml/base.xml | 7 |
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"> |
