diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 36ea829a2f9..528c7de670d 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -447,9 +447,9 @@ class DataSet(openerpweb.Controller): return {'result': r} @openerpweb.jsonrequest - def name_search(self, req, model, search_str, domain=[], context={}): + def name_search(self, req, model, search_str, domain=[], context={}, limit=None): m = req.session.model(model) - r = m.name_search(search_str+'%', domain, '=ilike', context) + r = m.name_search(search_str+'%', domain, '=ilike', context, limit) return {'result': r} class DataGroup(openerpweb.Controller): diff --git a/addons/base/static/src/base.html b/addons/base/static/src/base.html index 467bccb92ff..69b38eec4b3 100644 --- a/addons/base/static/src/base.html +++ b/addons/base/static/src/base.html @@ -30,7 +30,6 @@ - diff --git a/addons/base/static/src/js/base.js b/addons/base/static/src/js/base.js index 6316715df89..659b3690d07 100644 --- a/addons/base/static/src/js/base.js +++ b/addons/base/static/src/js/base.js @@ -130,7 +130,6 @@ openerp.base = function(instance) { openerp.base.search(instance); openerp.base.list(instance); openerp.base.tree(instance); - openerp.base.m2o(instance); openerp.base.form(instance); }; diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index 6c0a3a354a4..f1e40b09d36 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -325,13 +325,14 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base. args: args }, callback); }, - name_search: function (search_str, callback) { + name_search: function (search_str, limit, callback) { search_str = search_str || ''; return this.rpc('/base/dataset/name_search', { model: this.model, search_str: search_str, domain: this.domain || [], - context: this.context + context: this.context, + limit: limit || null }, callback); }, exec_workflow: function (id, signal, callback) { diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index b49aadd7a2d..2bdf6e758c9 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -951,46 +951,59 @@ openerp.base.form.FieldSelection = openerp.base.form.Field.extend({ } }); -openerp.base.form.FieldMany2OneDatasSet = openerp.base.DataSetStatic.extend({ - start: function() { - }, - write: function (id, data, callback) { - this._super(id, data, callback); - } -}); - openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ init: function(view, node) { this._super(view, node); this.template = "FieldMany2One"; this.is_field_m2o = true; + this.limit = 7; }, start: function() { - this.$element = $('#' + this.element_id); - this.dataset = new openerp.base.form.FieldMany2OneDatasSet(this.session, this.field.relation); - var views = [ [false,"list"], [false,"form"] ]; - new openerp.base.m2o(this.$element, this.field.relation, this.dataset, this.session) - this.$element.find('input').change(this.on_ui_change); + this._super(); + var self = this; + this.$input = this.$element.find("input"); + this.$drop_down = this.$element.find("span"); + this.$menu_btn = this.$element.find("button"); + this.$drop_down.button({ + icons: {primary: "ui-icon-triangle-1-s"}, text: false + }); + + this.$input.autocomplete({ + source: function(req, resp) { self.get_search_result(req, resp); } + }); + }, + get_search_result: function(request, response) { + var search_val = request.term; + var self = this; + + var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, []); + + dataset.name_search(search_val, this.limit + 1, function(data){ + var result = data.result; + var values = []; + + $.each(result, function(i, val){ + values.push({ + value: val[1], + id: val[0] + }); + }); + var overflow = false; + if (values.length > this.limit) { + values = values.slice(0, this.limit); + overflow = true; + } + response(values); + }); }, set_value: function(value) { - this._super.apply(this, arguments); - var show_value = ''; - if (value != null && value !== false) { - show_value = value[1]; - this.value = value[0]; + if (value != false) { + this.data_id = value; } - this.$element.find('input').val(show_value); - this.$element.find('input').attr('m2o_id', this.value); }, - get_value: function() { - var val = this.$element.find('input').attr('m2o_id') || this.value - return val; + return ""; }, - - on_ui_change: function() { - this.touched = this.view.touched = true; - } }); openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ diff --git a/addons/base/static/src/js/m2o.js b/addons/base/static/src/js/m2o.js index fcb991dcc15..dea7e7c3b2e 100644 --- a/addons/base/static/src/js/m2o.js +++ b/addons/base/static/src/js/m2o.js @@ -1,4 +1,16 @@ openerp.base.m2o = function(openerp){ + +/* + + + + */ openerp.base.m2o = openerp.base.Controller.extend({ init: function(element_id, model, dataset, session){ diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index afbd4f81d91..08970eadace 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -498,15 +498,12 @@ -
- - - +
+ + + Open