From 95cbee6243af2ff52b03b682c9cd31e50fb11472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Tue, 17 May 2016 09:53:36 +0200 Subject: [PATCH] [FIX] web: fix duplicate changes in form view Before this commit, in some cases, clicking on 'save' button, then on other buttons (like 'validate' in invoices) had the unfortunate effect of applying twice the changes in some cases. More specifically the problem appears when: 1. an onchange is triggered (for example, taxes in invoices) 2. the user clicks on 'save', buttons are disabled 3. the 'save' actions is completed, the buttons are enabled, but the on_button_save still does some work: triggering event, and reloading the view 4. the user clicks on 'validate' 5. the onchange completes, this triggers some more work Our only protection against such interactions is right now the fact that buttons are disabled/enabled. In my opinion, there should be a way to guarantee that actions are properly serialized (that is actually what a mutex is for... just saying). But the code of the form view/list view is too coupled, and such changes are quite dangerous. A real refactoring of those is needed at some point in the future. --- addons/web/static/src/js/views/form_view.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/views/form_view.js b/addons/web/static/src/js/views/form_view.js index ba181712527..13aae8b2d88 100644 --- a/addons/web/static/src/js/views/form_view.js +++ b/addons/web/static/src/js/views/form_view.js @@ -740,12 +740,13 @@ var FormView = View.extend(common.FieldManagerMixin, { return; } this.disable_button(); - return this.save().done(function(result) { + return this.save().then(function(result) { self.trigger("save", result); - self.reload().then(function() { + return self.reload().then(function() { self.to_view_mode(); core.bus.trigger('do_reload_needaction'); core.bus.trigger('form_view_saved', self); + self.enable_button(); }); }).always(function(){ self.enable_button();