[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() {
|
render: function() {
|
||||||
var template = this.template;
|
var template = this.template;
|
||||||
return QWeb.render(template, { "widget": this });
|
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() {
|
on_confirmed: function() {
|
||||||
var self = this;
|
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(
|
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();
|
self.view.reload();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -1105,51 +1157,6 @@ openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.f
|
||||||
this.invalid = false;
|
this.invalid = false;
|
||||||
},
|
},
|
||||||
focus: function() {
|
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