diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index fdcfbbb79cb..fecfbf8a58b 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -33,6 +33,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.widgets = {}; this.widgets_counter = 0; this.fields = {}; + this.fields_order = []; this.datarecord = {}; this.show_invalid = true; this.default_focus_field = null; @@ -86,6 +87,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# on_loaded: function(data) { var self = this; if (data) { + this.fields_order = []; this.fields_view = data; var frame = new (this.registry.get_object('frame'))(this, this.fields_view.arch); @@ -122,6 +124,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# self.translatable_fields = []; self.widgets = {}; self.fields = {}; + self.fields_order = []; self.$form_header.find('button').unbind('click'); self.readonly = !self.readonly; self.registry = self.readonly ? openerp.web.form.readonly : openerp.web.form.widgets; @@ -188,15 +191,16 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# deferred_stack.push('force resolution if no fields'); return deferred_stack.then(function() { if (!record.id) { - // New record: Second pass in order to trigger the onchanges self.show_invalid = false; - for (var f in record) { - var field = self.fields[f]; - if (field) { + // New record: Second pass in order to trigger the onchanges + // respecting the fields order defined in the view + _.each(self.fields_order, function(field_name) { + if (record[field_name] !== undefined) { + var field = self.fields[field_name]; field.dirty = true; self.do_onchange(field); } - } + }); } self.on_form_changed(); self.initial_mutating_lock.resolve(); @@ -1219,6 +1223,7 @@ openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.f this.name = node.attrs.name; this.value = undefined; view.fields[this.name] = this; + view.fields_order.push(this.name); this.type = node.attrs.widget || view.fields_view.fields[node.attrs.name].type; this.element_name = "field_" + this.name + "_" + this.type; @@ -2830,6 +2835,7 @@ openerp.web.form.FieldReference = openerp.web.form.Field.extend({ this.view_id = 'reference_' + _.uniqueId(); this.widgets = {}; this.fields = {}; + this.fields_order = []; this.selection = new openerp.web.form.FieldSelection(this, { attrs: { name: 'selection', widget: 'selection'