diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py
index 1135feeb1a6..0684964256f 100644
--- a/addons/base/controllers/main.py
+++ b/addons/base/controllers/main.py
@@ -449,12 +449,6 @@ class DataSet(openerpweb.Controller):
m = req.session.model(model)
r = m.default_get(fields, context)
return {'result': r}
-
- @openerpweb.jsonrequest
- def name_search(self, req, model, search_str, domain=[], context={}, limit=False):
- m = req.session.model(model)
- r = m.name_search(search_str, domain, 'ilike', context, limit)
- return {'result': r}
class DataGroup(openerpweb.Controller):
_cp_path = "/base/group"
diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css
index 1c5ab90b073..99bad503a52 100644
--- a/addons/base/static/src/css/base.css
+++ b/addons/base/static/src/css/base.css
@@ -693,6 +693,9 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
.openerp table.oe_frame td {
color: #4c4c4c;
}
+.openerp td.oe_form_frame_cell {
+ padding: 2px;
+}
.openerp .required.error {
border: 1px solid #900;
}
@@ -709,6 +712,7 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
.openerp label.oe_form_label, .openerp label.oe_form_label_help {
display: block;
text-align: right;
+ margin-top: 3px;
}
.openerp label.oe_form_label_help span {
font-size: 80%;
diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js
index 57999513a54..cdbaa9e6f54 100644
--- a/addons/base/static/src/js/data.js
+++ b/addons/base/static/src/js/data.js
@@ -320,15 +320,14 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base.
args: args || []
}, callback, error_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,
- limit: limit || false
- }, callback);
+ /**
+ * Arguments:
+ * name='', args=None, operator='ilike', context=None, limit=100
+ */
+ name_search: function (args, callback, error_callback) {
+ return this.call('name_search',
+ args,
+ callback, error_callback);
},
exec_workflow: function (id, signal, callback) {
return this.rpc('/base/dataset/exec_workflow', {
diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js
index d2f23bdc262..209635fa89c 100644
--- a/addons/base/static/src/js/form.js
+++ b/addons/base/static/src/js/form.js
@@ -88,6 +88,9 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
var field = this.fields[f];
field.touched = false;
field.set_value(this.datarecord[f] || false);
+ // TODO: here we should be able to alter the 'touched' state when setting value
+ // the following line will be removed by fme as soon as refactoring has been done
+ field.touched = false;
field.validate();
}
if (!record.id) {
@@ -173,8 +176,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
return this.rpc(ajax, {
model: this.dataset.model,
method: method,
- ids: (this.datarecord.id == null ? [] : [this.datarecord.id]),
- args: args
+ args: [].concat([(this.datarecord.id == null ? [] : [this.datarecord.id])], args)
}, function(response) {
self.on_processed_onchange(response, processed);
});
@@ -1123,7 +1125,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, []);
- dataset.name_search(search_val, this.limit + 1, function(data) {
+ dataset.name_search([search_val, false, 'ilike', {}, this.limit + 1], function(data) {
self.last_search = data.result;
// possible selections for the m2o
var values = _.map(data.result, function(x) {
@@ -1134,13 +1136,16 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
if (values.length > self.limit) {
values = values.slice(0, self.limit);
values.push({label: " Search More...", action: function() {
- dataset.name_search(search_val, false, function(data) {
+ dataset.name_search([search_val, false, 'ilike', {}, false], function(data) {
self._change_int_value(null);
self._search_create_popup("search", data.result);
});
}});
}
- if (self.value === undefined) {
+ var raw_result = _(data.result).map(function(x) {return x[1];})
+ if (search_val.length > 0 &&
+ !_.include(raw_result, search_val) &&
+ (!self.value || search_val !== self.value[1])) {
values.push({label: ' Create "' +
$('').text(search_val).html() + '"', action: function() {
self._quick_create(search_val);
diff --git a/addons/base/static/src/js/m2o.js b/addons/base/static/src/js/m2o.js
deleted file mode 100644
index dea7e7c3b2e..00000000000
--- a/addons/base/static/src/js/m2o.js
+++ /dev/null
@@ -1,282 +0,0 @@
-openerp.base.m2o = function(openerp){
-
-/*
-
-
-
- */
-
- openerp.base.m2o = openerp.base.Controller.extend({
- init: function(element_id, model, dataset, session){
- this._super(element_id, model, dataset, session);
-
- this.session = session;
- this.element = element_id.find('input');
- this.button = element_id.find('span');
- this.dataset = dataset;
- this.cache = {};
- var lastXhr;
- this.$input;
- this.relation = model;
- this.result_ids = [];
- this.create_option = jQuery('#'+this.element.attr('name')+ '_open');
- if (this.create_option) {
- var defaults = [
- {'text': 'Go to..', 'action': "call_Actions()"},
- {'text': 'Choose..', 'action': "call_Actions()"}
- ]
- jQuery(this.create_option).click(jQuery.proxy(function(evt){
- on_context_menu(evt, this.element, defaults);
- }, this));
- }
- var self = this;
-
- this.$input = this.element.autocomplete ({
- source: function(request, response){
- self.getSearch_Result(request, response);
- return;
- },
- select: function(event, ui){
- ui.item.value = ui.item.orig_val? ui.item.orig_val : self.element.data( "autocomplete" ).term;
- if (ui.item.id == 'more') {
- self.dataset.ids = self.result_ids;
- self.dataset.count = self.dataset.ids.length;
- self.dataset.domain = self.result_ids.length ? [["id", "in", self.dataset.ids]] : []
- self.element.val('');
- var pop = new openerp.base.form.Many2XSelectPopup(null, self.session);
- pop.select_element(self.relation, self.dataset);
- return;
- }
-
- if (ui.item.id == 'create') {
- var val = self.element.val();
- self.dataset.create({'name': ui.item.value},
- function(r){}, function(r){
- var element_id = _.uniqueId("act_window_dialog");
- var dialog = jQuery('