Xavier (Open ERP) has proposed merging 
lp:~openerp-dev/openerp-web/6.1-948219-xmo into lp:openerp-web/6.1.

Requested reviews:
  Olivier Dony (OpenERP) (odo-openerp)
  OpenERP Core Team (openerp)
Related bugs:
  Bug #948219 in OpenERP Web: "Saved filters are one-shot only (no refining, no 
persistence)"
  https://bugs.launchpad.net/openerp-web/+bug/948219

For more details, see:
https://code.launchpad.net/~openerp-dev/openerp-web/6.1-948219-xmo/+merge/96342

When selecting saved filters in the search view, make them non-transient: 
instead of executing a search on the filter data, store the filter data in the 
searchview and trigger a search (which will get the full search data & the 
stored filter data)
-- 
https://code.launchpad.net/~openerp-dev/openerp-web/6.1-948219-xmo/+merge/96342
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openerp-web/6.1-948219-xmo.
=== modified file 'addons/web/controllers/main.py'
--- addons/web/controllers/main.py	2012-03-06 20:59:55 +0000
+++ addons/web/controllers/main.py	2012-03-07 12:14:20 +0000
@@ -1308,10 +1308,15 @@
         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)

=== modified file 'addons/web/static/src/js/search.js'
--- addons/web/static/src/js/search.js	2012-02-21 14:05:17 +0000
+++ addons/web/static/src/js/search.js	2012-03-07 12:14:20 +0000
@@ -32,6 +32,8 @@
         this.hidden = !!hidden;
         this.headless = this.hidden && !this.has_defaults;
 
+        this.filter_data = {};
+
         this.ready = $.Deferred();
     },
     start: function() {
@@ -271,7 +273,12 @@
                         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 @@
         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 @@
                 .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 @@
      * @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');

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to