[FIX] On new record, FormView shall apply on_changes to fields using same order as defined in view

bzr revid: fme@openerp.com-20111201155029-bi4zjgvwkt7gjapy
This commit is contained in:
Fabien Meghazi 2011-12-01 16:50:29 +01:00
parent 14d5e1df2d
commit 06e9cc9fb5
1 changed files with 11 additions and 5 deletions

View File

@ -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'