[fix] problem with on changes and o2m

bzr revid: nicolas.vanhoren@openerp.com-20120103171713-qxviaorw7e8ccyvc
This commit is contained in:
niv-openerp 2012-01-03 18:17:13 +01:00
parent 3ef09f301a
commit d9671ec190
1 changed files with 21 additions and 13 deletions

View File

@ -807,9 +807,9 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form.
}, options || {});
trigger.tipTip(options);
},
_build_view_fields_values: function() {
_build_view_fields_values: function(blacklist) {
var a_dataset = this.view.dataset;
var fields_values = this.view.get_fields_values();
var fields_values = this.view.get_fields_values(blacklist);
var active_id = a_dataset.ids[a_dataset.index];
_.extend(fields_values, {
active_id: active_id || false,
@ -822,27 +822,27 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form.
}
return fields_values;
},
_build_eval_context: function() {
_build_eval_context: function(blacklist) {
var a_dataset = this.view.dataset;
return new openerp.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values());
return new openerp.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values(blacklist));
},
/**
* Builds a new context usable for operations related to fields by merging
* the fields'context with the action's context.
*/
build_context: function() {
build_context: function(blacklist) {
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);
if (!!f_context.__ref || true) { //TODO: remove true
var fields_values = this._build_eval_context(blacklist);
f_context = new openerp.web.CompoundContext(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();
if (_.detect(v_contexts, function(x) {return !!x.__ref;}) || true) { //TODO: remove true
var fields_values = this._build_eval_context(blacklist);
v_context.set_eval_context(fields_values);
}
// if there is a context on the node, overrides the model's context
@ -854,7 +854,7 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form.
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)) {
if (!(final_domain instanceof Array) || true) { //TODO: remove true
var fields_values = this._build_eval_context();
final_domain = new openerp.web.CompoundDomain(final_domain).set_eval_context(fields_values);
}
@ -2100,13 +2100,19 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({
this.dataset.child_name = this.name;
//this.dataset.child_name =
this.dataset.on_change.add_last(function() {
self.on_ui_change();
self.trigger_on_change();
});
this.is_setted.then(function() {
self.load_views();
});
},
trigger_on_change: function() {
var tmp = this.doing_on_change;
this.doing_on_change = true;
this.on_ui_change();
this.doing_on_change = tmp;
},
is_readonly: function() {
return this.readonly || this.force_readonly;
},
@ -2289,6 +2295,8 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({
return commands['delete'](x.id);}));
},
save_any_view: function() {
if (this.doing_on_change)
return false;
return this.session.synchronized_mode(_.bind(function() {
if (this.viewmanager && this.viewmanager.views && this.viewmanager.active_view &&
this.viewmanager.views[this.viewmanager.active_view] &&
@ -2353,7 +2361,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({
openerp.web.form.One2ManyDataSet = openerp.web.BufferedDataSet.extend({
get_context: function() {
this.context = this.o2m.build_context();
this.context = this.o2m.build_context([this.o2m.name]);
return this.context;
}
});