[FIX] web: make sure buttons are called with proper res_id

Before this commit, clicking on buttons did not reload the current
record, which is good.  However, it kept the reference to the record
after saving, even if that record could have been changed, which is
definitely the case when starting from a new record and saving it (it
will have the correct res_id, which is really important).
This commit is contained in:
Géry Debongnie
2017-04-11 19:44:38 +02:00
committed by Aaron Bohy
parent 64a9398fb3
commit d1d80a494b
2 changed files with 16 additions and 2 deletions
@@ -454,7 +454,11 @@ var FormController = BasicController.extend({
} else {
// save the record but don't switch to readonly mode
def = this.saveRecord({stayInEdit: true, reload: false}).then(function () {
return self._callButtonAction(attrs, event.data.record);
// we need to reget the record to make sure we have changes made
// by the basic model, such as the new res_id, if the record is
// new.
var record = self.model.get(event.data.record.id);
return self._callButtonAction(attrs, record);
});
}
def.then(function () {
+11 -1
View File
@@ -662,7 +662,9 @@ QUnit.module('Views', {
QUnit.test('buttons in form view, new record', function (assert) {
// this simulates a situation similar to the settings forms.
assert.expect(5);
assert.expect(6);
var resID;
var form = createView({
View: FormView,
@@ -681,12 +683,20 @@ QUnit.module('Views', {
'</form>',
mockRPC: function (route, args) {
assert.step(args.method);
if (args.method === 'create') {
return this._super.apply(this, arguments).then(function (result) {
resID = result;
return resID;
});
}
return this._super.apply(this, arguments);
},
});
testUtils.intercept(form, 'execute_action', function (event) {
assert.step('execute_action');
assert.strictEqual(event.data.record_id, resID,
"execute action should be done on correct record id");
event.data.on_success();
});
form.$('.o_form_statusbar button.p').click();