diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 07b576bf49d..41737d63179 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -329,7 +329,7 @@ class DataSet(openerpweb.Controller): @openerpweb.jsonrequest def search_read(self, request, model, fields=False, offset=0, limit=False, domain=None, context=None, sort=None): return self.do_search_read(request, model, fields, offset, limit, domain, context, sort) - def do_search_read(self, request, model, fields=False, offset=0, limit=False, domain=None, context=None, sort=None): + def do_search_read(self, request, model, fields=False, offset=0, limit=False, domain=None, context=None, sort=None, ids=False): """ Performs a search() followed by a read() (if needed) using the provided search criteria @@ -346,7 +346,8 @@ class DataSet(openerpweb.Controller): :rtype: list """ Model = request.session.model(model) - ids = Model.search(domain or [], offset or 0, limit or False, + if not ids: + ids = Model.search(domain or [], offset or 0, limit or False, sort or False, request.context) if fields and fields == ['id']: # shortcut read if we only want the ids @@ -562,11 +563,11 @@ class ListView(View): @openerpweb.jsonrequest def fill(self, request, model, id, domain, - offset=0, limit=False): - return self.do_fill(request, model, id, domain, offset, limit) + offset=0, limit=False, ids=False): + return self.do_fill(request, model, id, domain, offset, limit, ids) def do_fill(self, request, model, id, domain, - offset=0, limit=False): + offset=0, limit=False, ids=False): """ Returns all information needed to fill a table: * view with processed ``editable`` flag @@ -588,7 +589,7 @@ class ListView(View): rows = DataSet().do_search_read(request, model, offset=offset, limit=limit, - domain=domain) + domain=domain, ids=ids) eval_context = request.session.evaluation_context( request.context) return { diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index aa9882aed36..728ec19bc6f 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -316,7 +316,8 @@ openerp.base.ListView = openerp.base.Controller.extend( 'model': this.dataset.model, 'id': this.view_id, 'context': this.dataset.context, - 'domain': this.dataset.domain + 'domain': this.dataset.domain, + 'ids': this.dataset.ids }, this.do_fill_table); }, /** diff --git a/addons/base/static/src/js/m2o.js b/addons/base/static/src/js/m2o.js index 8cdf313667e..705c9abb529 100644 --- a/addons/base/static/src/js/m2o.js +++ b/addons/base/static/src/js/m2o.js @@ -9,7 +9,6 @@ openerp.base.m2o = openerp.base.Controller.extend({ this.relation = model; this.dataset = dataset; this.name = this.element.attr('name'); - this.selectedResultRow = 0; this.selectedResult = false; this.numResultRows = 0; @@ -17,7 +16,6 @@ openerp.base.m2o = openerp.base.Controller.extend({ this.specialKeyPressed = false; this.lastKey = null; this.delayedRequest = null; - this.lastTextResult = this.element.val(); this.lastSearch = null; @@ -181,8 +179,8 @@ openerp.base.m2o = openerp.base.Controller.extend({ case 13: case 1: var $selectedRow = jQuery("#autoComplete" + this.name + "_" + this.selectedResultRow); - this.dataset.ids = _.without.apply(null, [this.dataset.ids].concat(this.result_ids)); - + this.dataset.ids = this.result_ids; + this.dataset.domain = []; this.dataset.count = this.dataset.ids.length; if ($selectedRow.find('td').attr('id') == 'more') { var element_id = _.uniqueId("act_window_dialog"); @@ -199,6 +197,7 @@ openerp.base.m2o = openerp.base.Controller.extend({ }); var event_list = new openerp.base.ListView(this.view_manager, this.session, element_id, this.dataset, false); event_list.start(); + event_list.do_reload(); } this.setCompletionText($selectedRow, true); this.clearResults();