diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 1321be93ca7..ec92cd2ac52 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -135,21 +135,21 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# }, do_show: function () { - var self = this, - deferred = $.Deferred().resolve(); - this.has_been_loaded.then(function() { + var self = this; + return this.has_been_loaded.pipe(function() { + var result; if (self.dataset.index === null) { // null index means we should start a new record - deferred.pipe(self.on_button_new()); + result = self.on_button_new(); } else { - deferred.pipe(self.dataset.read_index(_.keys(self.fields_view.fields)).pipe(self.on_record_loaded)); + result = self.dataset.read_index(_.keys(self.fields_view.fields)).pipe(self.on_record_loaded); } self.$element.show(); if (self.sidebar) { self.sidebar.$element.show(); } + return result; }); - return deferred; }, do_hide: function () { this._super(); @@ -172,7 +172,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# field.validate(); }); }); - return $.when.apply(null, set_values).then(function() { + return $.when.apply(null, set_values).pipe(function() { if (!record.id) { self.show_invalid = false; // New record: Second pass in order to trigger the onchanges diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index 304a6861782..1dda62b3802 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -288,7 +288,9 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({ var self = this, data = this.get_event_data(event_obj), form = self.form_dialog.form, - fields_to_fetch = _(form.fields_view.fields).keys(); + fields_to_fetch = _(form.fields_view.fields).keys(), + set_values = [], + fields_names = []; this.dataset.index = null; self.creating_event_id = event_id; this.form_dialog.form.do_show().then(function() { @@ -296,14 +298,26 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({ _.each(['date_start', 'date_stop', 'date_delay'], function(field) { var field_name = self[field]; if (field_name && form.fields[field_name]) { - field = form.fields[field_name]; - field.set_value(data[field_name]); - field.dirty = true; - form.do_onchange(field); + var ffield = form.fields[field_name]; + ffield.reset(); + var result = ffield.set_value(data[field_name]); + set_values.push(result); + fields_names.push(field_name); + $.when(result).then(function() { + ffield.validate(); + }); } }); - form.show_invalid = true; - self.form_dialog.open(); + + $.when(set_values).then(function() { + _.each(fields_names, function(fn) { + var field = form.fields[fn]; + field.dirty = true; + form.do_onchange(field); + }); + form.show_invalid = true; + self.form_dialog.open(); + }); }); }, do_save_event: function(event_id, event_obj) {