Filter leaf domain of Reference fields
The domain of Reference fields must be filtered out for non-valid target because the localization will remove the target part and thus generate an invalid domain for the specific target. issue4680 review11141003
This commit is contained in:
@@ -1733,6 +1733,22 @@
|
||||
return domain.map(this.inverse_leaf.bind(this));
|
||||
}
|
||||
},
|
||||
filter_leaf: function(domain, field, model) {
|
||||
if (~['AND', 'OR'].indexOf(domain)) {
|
||||
return domain;
|
||||
} else if (this.is_leaf(domain)) {
|
||||
if (domain[0].startsWith(field) && (domain.length > 3)) {
|
||||
if (domain[3] !== model) {
|
||||
return ['id', '=', null];
|
||||
}
|
||||
}
|
||||
return domain;
|
||||
} else {
|
||||
return domain.map(function(d) {
|
||||
return this.filter_leaf(d, field, model);
|
||||
}.bind(this));
|
||||
}
|
||||
},
|
||||
eval_domain: function(domain, context, boolop) {
|
||||
if (boolop === undefined) {
|
||||
boolop = this.and;
|
||||
|
||||
@@ -2059,6 +2059,19 @@
|
||||
},
|
||||
validation_domains: function(record, pre_validate) {
|
||||
return this.get_domains(record, pre_validate)[0];
|
||||
},
|
||||
get_domain: function(record) {
|
||||
var model = null;
|
||||
if (record._values[this.name]) {
|
||||
model = record._values[this.name][0];
|
||||
}
|
||||
var domains = this.get_domains(record);
|
||||
var screen_domain = domains[0];
|
||||
var attr_domain = domains[1];
|
||||
var inversion = new Sao.common.DomainInversion();
|
||||
return inversion.concat([inversion.localize_domain(
|
||||
inversion.filter_leaf(screen_domain, this.name, model)),
|
||||
attr_domain]);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user