[fix] buttons do not use an evalutation context despite the fact the context on buttons can depend on it
bzr revid: nicolas.vanhoren@openerp.com-20111013093814-xalvnvp6vajslruo
This commit is contained in:
parent
60c7801200
commit
c7a888f343
|
@ -735,6 +735,51 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form.
|
|||
render: function() {
|
||||
var template = this.template;
|
||||
return QWeb.render(template, { "widget": this });
|
||||
},
|
||||
_build_view_fields_values: function() {
|
||||
var a_dataset = this.view.dataset;
|
||||
var fields_values = this.view.get_fields_values();
|
||||
var parent_values = a_dataset.parent_view ? a_dataset.parent_view.get_fields_values() : {};
|
||||
fields_values.parent = parent_values;
|
||||
return fields_values;
|
||||
},
|
||||
_build_eval_context: function() {
|
||||
var a_dataset = this.view.dataset;
|
||||
return new openerp.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values());
|
||||
},
|
||||
/**
|
||||
* Builds a new context usable for operations related to fields by merging
|
||||
* the fields'context with the action's context.
|
||||
*/
|
||||
build_context: function() {
|
||||
var f_context = (this.field || {}).context || {};
|
||||
if (!!f_context.__ref) {
|
||||
var fields_values = this._build_eval_context();
|
||||
f_context = new openerp.web.CompoundDomain(f_context).set_eval_context(fields_values);
|
||||
}
|
||||
// maybe the default_get should only be used when we do a default_get?
|
||||
var v_contexts = _.compact([this.node.attrs.default_get || null,
|
||||
this.node.attrs.context || null]);
|
||||
var v_context = new openerp.web.CompoundContext();
|
||||
_.each(v_contexts, function(x) {v_context.add(x);});
|
||||
if (_.detect(v_contexts, function(x) {return !!x.__ref;})) {
|
||||
var fields_values = this._build_eval_context();
|
||||
v_context.set_eval_context(fields_values);
|
||||
}
|
||||
// if there is a context on the node, overrides the model's context
|
||||
var ctx = v_contexts.length > 0 ? v_context : f_context;
|
||||
return ctx;
|
||||
},
|
||||
build_domain: function() {
|
||||
var f_domain = this.field.domain || [];
|
||||
var n_domain = this.node.attrs.domain || null;
|
||||
// if there is a domain on the node, overrides the model's domain
|
||||
var final_domain = n_domain !== null ? n_domain : f_domain;
|
||||
if (!(final_domain instanceof Array)) {
|
||||
var fields_values = this._build_eval_context();
|
||||
final_domain = new openerp.web.CompoundDomain(final_domain).set_eval_context(fields_values);
|
||||
}
|
||||
return final_domain;
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -956,9 +1001,16 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({
|
|||
},
|
||||
on_confirmed: function() {
|
||||
var self = this;
|
||||
|
||||
var context = this.node.attrs.context;
|
||||
if (context && context.__ref) {
|
||||
context = new openerp.web.CompoundContext(context);
|
||||
context.set_eval_context(this._build_eval_context());
|
||||
}
|
||||
|
||||
return this.view.do_execute_action(
|
||||
this.node.attrs, this.view.dataset, this.view.datarecord.id, function () {
|
||||
_.extend({}, this.node.attrs, {context: context}),
|
||||
this.view.dataset, this.view.datarecord.id, function () {
|
||||
self.view.reload();
|
||||
});
|
||||
},
|
||||
|
@ -1105,51 +1157,6 @@ openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.f
|
|||
this.invalid = false;
|
||||
},
|
||||
focus: function() {
|
||||
},
|
||||
_build_view_fields_values: function() {
|
||||
var a_dataset = this.view.dataset;
|
||||
var fields_values = this.view.get_fields_values();
|
||||
var parent_values = a_dataset.parent_view ? a_dataset.parent_view.get_fields_values() : {};
|
||||
fields_values.parent = parent_values;
|
||||
return fields_values;
|
||||
},
|
||||
_build_eval_context: function() {
|
||||
var a_dataset = this.view.dataset;
|
||||
return new openerp.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values());
|
||||
},
|
||||
/**
|
||||
* Builds a new context usable for operations related to fields by merging
|
||||
* the fields'context with the action's context.
|
||||
*/
|
||||
build_context: function() {
|
||||
var f_context = this.field.context || {};
|
||||
if (!!f_context.__ref) {
|
||||
var fields_values = this._build_eval_context();
|
||||
f_context = new openerp.web.CompoundDomain(f_context).set_eval_context(fields_values);
|
||||
}
|
||||
// maybe the default_get should only be used when we do a default_get?
|
||||
var v_contexts = _.compact([this.node.attrs.default_get || null,
|
||||
this.node.attrs.context || null]);
|
||||
var v_context = new openerp.web.CompoundContext();
|
||||
_.each(v_contexts, function(x) {v_context.add(x);});
|
||||
if (_.detect(v_contexts, function(x) {return !!x.__ref;})) {
|
||||
var fields_values = this._build_eval_context();
|
||||
v_context.set_eval_context(fields_values);
|
||||
}
|
||||
// if there is a context on the node, overrides the model's context
|
||||
var ctx = v_contexts.length > 0 ? v_context : f_context;
|
||||
return ctx;
|
||||
},
|
||||
build_domain: function() {
|
||||
var f_domain = this.field.domain || [];
|
||||
var n_domain = this.node.attrs.domain || null;
|
||||
// if there is a domain on the node, overrides the model's domain
|
||||
var final_domain = n_domain !== null ? n_domain : f_domain;
|
||||
if (!(final_domain instanceof Array)) {
|
||||
var fields_values = this._build_eval_context();
|
||||
final_domain = new openerp.web.CompoundDomain(final_domain).set_eval_context(fields_values);
|
||||
}
|
||||
return final_domain;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue