diff --git a/src/model.js b/src/model.js index 61eff6b526..c3297d492c 100644 --- a/src/model.js +++ b/src/model.js @@ -390,27 +390,40 @@ }); Object.defineProperty(array, 'context', { get: function() { - var context = jQuery.extend({}, this.model.session.context); - if (this.parent) { - var parent_context = this.parent.get_context(); - jQuery.extend(context, parent_context); - if (this.child_name in this.parent.model.fields) { - var field = this.parent.model.fields[this.child_name]; - jQuery.extend(context, field.get_context( - this.parent, parent_context)); - } - } - jQuery.extend(context, this._context); - if (this.parent_datetime_field) { - context._datetime = this.parent.get_eval() - [this.parent_datetime_field]; - } - return context; + return this._get_context(); }, set: function(context) { this._context = jQuery.extend({}, context); } }); + Object.defineProperty(array, 'local_context', { + get: function() { + return this._get_context(true); + } + }); + array._get_context = function(local) { + var context; + if (!local) { + context = jQuery.extend({}, this.model.session.context); + } else { + context = {}; + } + if (this.parent) { + var parent_context = this.parent.get_context(local); + jQuery.extend(context, parent_context); + if (this.child_name in this.parent.model.fields) { + var field = this.parent.model.fields[this.child_name]; + jQuery.extend(context, field.get_context( + this.parent, parent_context, local)); + } + } + jQuery.extend(context, this._context); + if (this.parent_datetime_field) { + context._datetime = this.parent.get_eval() + [this.parent_datetime_field]; + } + return context; + }; array.clean4inversion = function(domain) { if (jQuery.isEmptyObject(domain)) { return []; @@ -813,8 +826,12 @@ } return fields; }, - get_context: function() { - return this.group.context; + get_context: function(local) { + if (!local) { + return this.group.context; + } else { + return this.group.local_context; + } }, field_get: function(name) { return this.model.fields[name].get(this); @@ -1415,12 +1432,12 @@ get_timestamp: function(record) { return {}; }, - get_context: function(record, record_context) { + get_context: function(record, record_context, local) { var context; if (record_context) { context = jQuery.extend({}, record_context); } else { - context = record.get_context(); + context = record.get_context(local); } jQuery.extend(context, record.expr_eval(this.description.context || {})); @@ -1864,9 +1881,9 @@ Sao.field.Many2One._super.set_client.call(this, record, value, force_change); }, - get_context: function(record, record_context) { + get_context: function(record, record_context, local) { var context = Sao.field.Many2One._super.get_context.call( - this, record, record_context); + this, record, record_context, local); if (this.description.datetime_field) { context._datetime = record.get_eval()[ this.description.datetime_field]; @@ -2389,9 +2406,9 @@ return Sao.field.Reference._super.get_on_change_value.call( this, record); }, - get_context: function(record, record_context) { + get_context: function(record, record_context, local) { var context = Sao.field.Reference._super.get_context.call( - this, record, record_context); + this, record, record_context, local); if (this.description.datetime_field) { context._datetime = record.get_eval()[ this.description.datetime_field]; diff --git a/src/screen.js b/src/screen.js index 1edfc1b628..505f8dddae 100644 --- a/src/screen.js +++ b/src/screen.js @@ -983,8 +983,8 @@ this.context_screen.display(true); return jQuery.when(); } - this.new_group(jQuery.extend({}, - this.group._context, + this.new_group(jQuery.extend( + this.local_context, this.context_screen.get_on_change_value())); } @@ -1118,6 +1118,13 @@ } return context; }, + get local_context() { + var context = this.group.local_context; + if (this.context_screen) { + context.context_model = this.context_screen.model_name; + } + return context; + }, set_group: function(group) { var fields = {}, fields_views = {}, @@ -1321,7 +1328,7 @@ 'model': this.model_name, 'id': this.get_id(), 'ids': [this.get_id()] - }, jQuery.extend({}, this.group._context), false); + }, this.local_context, false); } else { if (!this.modified()) { this.switch_view('form'); @@ -1907,7 +1914,7 @@ if (!jQuery.isEmptyObject(this.domain)) { query_string.push(['domain', dumps(this.domain)]); } - var context = this.group._context; // Avoid rpc context + var context = this.local_context; // Avoid rpc context if (!jQuery.isEmptyObject(context)) { query_string.push(['context', dumps(context)]); } diff --git a/src/tab.js b/src/tab.js index fc5a0b7e9f..06a224d7d3 100644 --- a/src/tab.js +++ b/src/tab.js @@ -648,7 +648,7 @@ ids: record_ids }; Sao.Action.exec_action(exec_action, data, - jQuery.extend({}, screen.group._context)); + jQuery.extend({}, screen.local_context)); }); }.bind(this)) .appendTo(menu);