From 3071ef16c7c66818bc38e4508676decb804e594a Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Quenot Date: Wed, 27 May 2015 11:14:26 +0200 Subject: [PATCH] [ADD] web: sorting in ir_filters Add a parameter sort on the ir.filters to maintain the order of searching when reloading a filter. Fixes #6867 --- .../web/static/src/js/views/search_menus.js | 8 ++++ openerp/addons/base/ir/ir_filters.py | 4 +- openerp/addons/base/ir/ir_filters.xml | 2 + openerp/addons/base/tests/test_ir_filters.py | 48 +++++++++---------- 4 files changed, 37 insertions(+), 25 deletions(-) diff --git a/addons/web/static/src/js/views/search_menus.js b/addons/web/static/src/js/views/search_menus.js index c4a6817cae0..48a8cf65fe7 100644 --- a/addons/web/static/src/js/views/search_menus.js +++ b/addons/web/static/src/js/views/search_menus.js @@ -122,6 +122,7 @@ return Widget.extend({ model_id: this.searchview.dataset.model, context: results.context, domain: results.domain, + sort: JSON.stringify(this.searchview.dataset._sort), is_default: default_filter, action_id: this.action_id, }; @@ -231,6 +232,13 @@ return Widget.extend({ } this.query.reset([this.facet_for(filter)], { preventSearch: preventSearch || false}); + + // Load sort settings on view + if (!_.isUndefined(filter.sort)){ + var sort_items = JSON.parse(filter.sort); + this.searchview.dataset.set_sort(sort_items); + } + this.$filters[this.key_for(filter)].addClass('selected'); }, remove_filter: function (filter, $filter, key) { diff --git a/openerp/addons/base/ir/ir_filters.py b/openerp/addons/base/ir/ir_filters.py index 9fa19421e87..4f578f9975c 100644 --- a/openerp/addons/base/ir/ir_filters.py +++ b/openerp/addons/base/ir/ir_filters.py @@ -45,7 +45,7 @@ class ir_filters(osv.osv): filter_ids = self.search(cr, uid, action_domain + [('model_id','=',model),('user_id','in',[uid, False])]) my_filters = self.read(cr, uid, filter_ids, - ['name', 'is_default', 'domain', 'context', 'user_id'], context=context) + ['name', 'is_default', 'domain', 'context', 'user_id', 'sort'], context=context) return my_filters def _check_global_default(self, cr, uid, vals, matching_filters, context=None): @@ -139,6 +139,7 @@ class ir_filters(osv.osv): "and available to all users."), 'domain': fields.text('Domain', required=True), 'context': fields.text('Context', required=True), + 'sort': fields.text('Sort', required=True), 'model_id': fields.selection(_list_all_models, 'Model', required=True), 'is_default': fields.boolean('Default filter'), 'action_id': fields.many2one('ir.actions.actions', 'Action', ondelete='cascade', @@ -149,6 +150,7 @@ class ir_filters(osv.osv): _defaults = { 'domain': '[]', 'context':'{}', + 'sort': '[]', 'user_id': lambda self,cr,uid,context=None: uid, 'is_default': False } diff --git a/openerp/addons/base/ir/ir_filters.xml b/openerp/addons/base/ir/ir_filters.xml index acc16e172b4..ce5bee47c7f 100644 --- a/openerp/addons/base/ir/ir_filters.xml +++ b/openerp/addons/base/ir/ir_filters.xml @@ -25,6 +25,7 @@ + @@ -41,6 +42,7 @@ + diff --git a/openerp/addons/base/tests/test_ir_filters.py b/openerp/addons/base/tests/test_ir_filters.py index 9ca093d77af..d3f7809456c 100644 --- a/openerp/addons/base/tests/test_ir_filters.py +++ b/openerp/addons/base/tests/test_ir_filters.py @@ -34,10 +34,10 @@ class TestGetFilters(FiltersCase): self.cr, self.USER_ID, 'ir.filters') self.assertItemsEqual(map(noid, filters), [ - dict(name='a', is_default=False, user_id=self.USER, domain='[]', context='{}'), - dict(name='b', is_default=False, user_id=self.USER, domain='[]', context='{}'), - dict(name='c', is_default=False, user_id=self.USER, domain='[]', context='{}'), - dict(name='d', is_default=False, user_id=self.USER, domain='[]', context='{}'), + dict(name='a', is_default=False, user_id=self.USER, domain='[]', context='{}', sort='[]'), + dict(name='b', is_default=False, user_id=self.USER, domain='[]', context='{}', sort='[]'), + dict(name='c', is_default=False, user_id=self.USER, domain='[]', context='{}', sort='[]'), + dict(name='d', is_default=False, user_id=self.USER, domain='[]', context='{}', sort='[]'), ]) def test_global_filters(self): @@ -53,10 +53,10 @@ class TestGetFilters(FiltersCase): self.cr, self.USER_ID, 'ir.filters') self.assertItemsEqual(map(noid, filters), [ - dict(name='a', is_default=False, user_id=False, domain='[]', context='{}'), - dict(name='b', is_default=False, user_id=False, domain='[]', context='{}'), - dict(name='c', is_default=False, user_id=False, domain='[]', context='{}'), - dict(name='d', is_default=False, user_id=False, domain='[]', context='{}'), + dict(name='a', is_default=False, user_id=False, domain='[]', context='{}', sort='[]'), + dict(name='b', is_default=False, user_id=False, domain='[]', context='{}', sort='[]'), + dict(name='c', is_default=False, user_id=False, domain='[]', context='{}', sort='[]'), + dict(name='d', is_default=False, user_id=False, domain='[]', context='{}', sort='[]'), ]) def test_no_third_party_filters(self): @@ -71,8 +71,8 @@ class TestGetFilters(FiltersCase): self.cr, self.USER_ID, 'ir.filters') self.assertItemsEqual(map(noid, filters), [ - dict(name='a', is_default=False, user_id=False, domain='[]', context='{}'), - dict(name='c', is_default=False, user_id=self.USER, domain='[]', context='{}'), + dict(name='a', is_default=False, user_id=False, domain='[]', context='{}', sort='[]'), + dict(name='c', is_default=False, user_id=self.USER, domain='[]', context='{}', sort='[]'), ]) class TestOwnDefaults(FiltersCase): @@ -97,7 +97,7 @@ class TestOwnDefaults(FiltersCase): self.assertItemsEqual(map(noid, filters), [ dict(name='a', user_id=self.USER, is_default=True, - domain='[]', context='{}') + domain='[]', context='{}', sort='[]') ]) def test_new_filter_not_default(self): @@ -121,9 +121,9 @@ class TestOwnDefaults(FiltersCase): filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters') self.assertItemsEqual(map(noid, filters), [ - dict(name='a', user_id=self.USER, is_default=False, domain='[]', context='{}'), - dict(name='b', user_id=self.USER, is_default=False, domain='[]', context='{}'), - dict(name='c', user_id=self.USER, is_default=True, domain='[]', context='{}'), + dict(name='a', user_id=self.USER, is_default=False, domain='[]', context='{}', sort='[]'), + dict(name='b', user_id=self.USER, is_default=False, domain='[]', context='{}', sort='[]'), + dict(name='c', user_id=self.USER, is_default=True, domain='[]', context='{}', sort='[]'), ]) def test_new_filter_existing_default(self): @@ -147,9 +147,9 @@ class TestOwnDefaults(FiltersCase): filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters') self.assertItemsEqual(map(noid, filters), [ - dict(name='a', user_id=self.USER, is_default=False, domain='[]', context='{}'), - dict(name='b', user_id=self.USER, is_default=False, domain='[]', context='{}'), - dict(name='c', user_id=self.USER, is_default=True, domain='[]', context='{}'), + dict(name='a', user_id=self.USER, is_default=False, domain='[]', context='{}', sort='[]'), + dict(name='b', user_id=self.USER, is_default=False, domain='[]', context='{}', sort='[]'), + dict(name='c', user_id=self.USER, is_default=True, domain='[]', context='{}', sort='[]'), ]) def test_update_filter_set_default(self): @@ -173,8 +173,8 @@ class TestOwnDefaults(FiltersCase): filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters') self.assertItemsEqual(map(noid, filters), [ - dict(name='a', user_id=self.USER, is_default=True, domain='[]', context='{}'), - dict(name='b', user_id=self.USER, is_default=False, domain='[]', context='{}'), + dict(name='a', user_id=self.USER, is_default=True, domain='[]', context='{}', sort='[]'), + dict(name='b', user_id=self.USER, is_default=False, domain='[]', context='{}', sort='[]'), ]) class TestGlobalDefaults(FiltersCase): @@ -204,9 +204,9 @@ class TestGlobalDefaults(FiltersCase): filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters') self.assertItemsEqual(map(noid, filters), [ - dict(name='a', user_id=False, is_default=False, domain='[]', context='{}'), - dict(name='b', user_id=False, is_default=False, domain='[]', context='{}'), - dict(name='c', user_id=False, is_default=True, domain='[]', context='{}'), + dict(name='a', user_id=False, is_default=False, domain='[]', context='{}', sort='[]'), + dict(name='b', user_id=False, is_default=False, domain='[]', context='{}', sort='[]'), + dict(name='c', user_id=False, is_default=True, domain='[]', context='{}', sort='[]'), ]) def test_new_filter_existing_default(self): @@ -272,6 +272,6 @@ class TestGlobalDefaults(FiltersCase): filters = Filters.get_filters(self.cr, self.USER_ID, 'ir.filters') self.assertItemsEqual(map(noid, filters), [ - dict(name='a', user_id=False, is_default=False, domain='[]', context='{}'), - dict(name='b', user_id=False, is_default=True, domain='[]', context=context_value), + dict(name='a', user_id=False, is_default=False, domain='[]', context='{}', sort='[]'), + dict(name='b', user_id=False, is_default=True, domain='[]', context=context_value, sort='[]'), ])