From f3f20653d34bf307ea4aeb36830a378e85c02bf6 Mon Sep 17 00:00:00 2001 From: Mohammed Shekha Date: Mon, 2 Jul 2018 17:56:42 +0530 Subject: [PATCH] [FIX] web: update renderer when _callButtonAction failed Before this rev., the following scenario didn't work: Open manufacturing order and click on Produce button (note that bom product should have Serial number enabled) then add quantity in Done field in o2m and press Record Production button in wizard, it will produce UserError and after then if you change Lot number field in wizard's o2m then the many2one value doesn't get selected. This occured because the renderer wasn't updated after the RPC fail and thus still got an outdated version of the state. The issue raised after commit: 02eef78bbd3 which was done to remove useless rpc call, it's OK to remove rpc call but let's keep updating renderer. Related to task ID: #1852715 Co-authored-by: Tejas Shahu --- .../src/js/views/basic/basic_controller.js | 4 +- addons/web/static/tests/views/form_tests.js | 64 ++++++++++++++++++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/views/basic/basic_controller.js b/addons/web/static/src/js/views/basic/basic_controller.js index 5767969d15c..edf345b41f2 100644 --- a/addons/web/static/src/js/views/basic/basic_controller.js +++ b/addons/web/static/src/js/views/basic/basic_controller.js @@ -261,7 +261,9 @@ var BasicController = AbstractController.extend(FieldManagerMixin, { resIDs: record.res_ids, }, on_success: def.resolve.bind(def), - on_fail: def.reject.bind(def), + on_fail: function () { + self.update({}, {reload: false}).always(def.reject.bind(def)); + }, on_closed: reload, }); return this.alive(def); diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index a6176ab4328..53a46b2a558 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -6892,6 +6892,69 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('keep editing after call_button fail', function (assert) { + assert.expect(4); + + var values; + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch:'
' + + '