[FIX] web: fix action context with no explicit context
When I didefd15852, I accidentally undidd20074c5. That commit wanted to filter out unwanted values from the action context, but it was too violent, as it was discarding the action context. (See bug described inefd15852) My original commit aimed at avoiding the filtering of the action context by having it devoid of unwanted values altogether. The idea was "if this is an action button, we don't want the element context". However, the default behavior of the _getContext function was to add the element context. There were options to force to add the element context despite being in a case where it should not be added, but we needed the opposite: do not add the element context. We used "additionalContext" in this fashion, the idea was: "if I give you specific context values, don't polute it with the element context". This wasefd15852. However, not all actions have context defined explicitely in their definition. In this case, since additionalContext was undefined, the element context was added again, despite our will not to add it for actions. We solved this by simply always giving an additionalContext to getContext, providing an empty one if needed. To reproduce this bug (which is the same asefd15852): - Go to Manufacturing - Click on menu Master Data then Products - Open a product - Click on the "Bills of Materials" stat button - Click on create - The create crashes because of the "default_type" context key that is erroneously passed from the "Products" action to the "Bills of Materials" stat button action.
This commit is contained in:
@@ -238,7 +238,7 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
|
||||
var recordID = record.data.id;
|
||||
this.trigger_up('execute_action', {
|
||||
action_data: _.extend({}, attrs, {
|
||||
context: record.getContext({additionalContext: attrs.context}),
|
||||
context: record.getContext({additionalContext: attrs.context || {}}),
|
||||
}),
|
||||
model: record.model,
|
||||
res_ids: [recordID],
|
||||
|
||||
@@ -3572,6 +3572,40 @@ QUnit.module('Views', {
|
||||
form.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('clicking on a stat button with no context', function (assert) {
|
||||
assert.expect(1);
|
||||
|
||||
var form = createView({
|
||||
View: FormView,
|
||||
model: 'partner',
|
||||
data: this.data,
|
||||
arch:
|
||||
'<form string="Partners">' +
|
||||
'<sheet>' +
|
||||
'<div class="oe_button_box" name="button_box">' +
|
||||
'<button class="oe_stat_button" type="action" name="1">' +
|
||||
'<field name="qux" widget="statinfo"/>' +
|
||||
'</button>' +
|
||||
'</div>' +
|
||||
'</sheet>' +
|
||||
'</form>',
|
||||
res_id: 2,
|
||||
viewOptions: {
|
||||
context: {some_context: true},
|
||||
},
|
||||
intercepts: {
|
||||
execute_action: function (e) {
|
||||
assert.deepEqual(e.data.action_data.context, {},
|
||||
"button context should have been evaluated and given to the action, without previous context");
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
form.$('.oe_stat_button').click();
|
||||
|
||||
form.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('diplay a stat button outside a buttonbox', function (assert) {
|
||||
assert.expect(3);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user