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 @@
-
-
-
-
![]()
+
+
+
+