diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index e25a14d00b4..2be3a415f93 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1910,9 +1910,10 @@ openerp.web.form.dialog = function(content, options) { }; openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ - form_template: 'FieldMany2One', + form_template: 'EmptyComponent', init: function(view, node) { this._super(view, node); + this.previous_readonly = this.is_readonly(); this.limit = 7; this.value = null; this.cm_id = _.uniqueId('m2o_cm_'); @@ -1924,6 +1925,18 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ }, start: function() { this._super(); + this.render_content(); + }, + render_content: function() { + this.$element.html(""); + if (!this.is_readonly()) + this.render_editable(); + else + this.render_readonly(); + this.render_value(); + }, + render_editable: function() { + this.$element.html(QWeb.render("FieldMany2One", {widget: this})); var self = this; this.$input = this.$element.find("input"); this.$drop_down = this.$element.find(".oe-m2o-drop-down-button"); @@ -2062,6 +2075,9 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ isSelecting = false; }); }, + render_readonly: function() { + this.$element.html(QWeb.render("FieldMany2One_readonly")); + }, // autocomplete component content handling get_search_result: function(request, response) { var search_val = request.term; @@ -2158,7 +2174,28 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ }, _change_int_ext_value: function(value) { this._change_int_value(value); - this.$input.val(this.value ? this.value[1] : ""); + this.render_value(); + }, + render_value: function() { + var self = this; + if (!this.is_readonly()) { + this.$input.val(this.value ? this.value[1] : ""); + } else { + self.$element.find('a') + .unbind('click') + .text(this.value ? this.value[1] : '') + .click(function () { + self.do_action({ + type: 'ir.actions.act_window', + res_model: self.field.relation, + res_id: self.value[0], + context: self.build_context(), + views: [[false, 'page'], [false, 'form']], + target: 'current' + }); + return false; + }); + } }, _change_int_value: function(value) { this.value = value; @@ -2237,7 +2274,9 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ }, update_dom: function() { this._super.apply(this, arguments); - this.$input.prop('readonly', this.is_readonly()); + if (this.previous_readonly != this.is_readonly()) { + this.render_content(); + } } }); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index c8a2b4d920f..ec3d7621e5c 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1065,6 +1065,9 @@ + + +