[ADD] handling of change_default to onchange process
bzr revid: xmo@openerp.com-20120207160158-kxbue424wa3nxz03
This commit is contained in:
parent
ff7a161404
commit
bba8fde187
|
@ -314,6 +314,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
||||||
var self = this;
|
var self = this;
|
||||||
return this.on_change_mutex.exec(function() {
|
return this.on_change_mutex.exec(function() {
|
||||||
try {
|
try {
|
||||||
|
var response = {}, can_process_onchange = $.Deferred();
|
||||||
processed = processed || [];
|
processed = processed || [];
|
||||||
var on_change = widget.node.attrs.on_change;
|
var on_change = widget.node.attrs.on_change;
|
||||||
if (on_change) {
|
if (on_change) {
|
||||||
|
@ -323,18 +324,60 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
||||||
url: '/web/dataset/onchange',
|
url: '/web/dataset/onchange',
|
||||||
async: false
|
async: false
|
||||||
};
|
};
|
||||||
return self.rpc(ajax, {
|
can_process_onchange = self.rpc(ajax, {
|
||||||
model: self.dataset.model,
|
model: self.dataset.model,
|
||||||
method: change_spec.method,
|
method: change_spec.method,
|
||||||
args: [(self.datarecord.id == null ? [] : [self.datarecord.id])].concat(change_spec.args),
|
args: [(self.datarecord.id == null ? [] : [self.datarecord.id])].concat(change_spec.args),
|
||||||
context_id: change_spec.context_index == undefined ? null : change_spec.context_index + 1
|
context_id: change_spec.context_index == undefined ? null : change_spec.context_index + 1
|
||||||
}).pipe(function(response) {
|
}).then(function(r) {
|
||||||
return self.on_processed_onchange(response, processed);
|
_.extend(response, r);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
console.warn("Wrong on_change format", on_change);
|
console.warn("Wrong on_change format", on_change);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// fail if onchange failed
|
||||||
|
if (can_process_onchange.isRejected()) {
|
||||||
|
return can_process_onchange;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (widget.field['change_default']) {
|
||||||
|
var fieldname = widget.name, value;
|
||||||
|
if (response.value && (fieldname in response.value)) {
|
||||||
|
// Use value from onchange if onchange executed
|
||||||
|
value = response.value[fieldname];
|
||||||
|
} else {
|
||||||
|
// otherwise get form value for field
|
||||||
|
value = self.fields[fieldname].get_on_change_value();
|
||||||
|
}
|
||||||
|
var condition = fieldname + '=' + value;
|
||||||
|
|
||||||
|
if (value) {
|
||||||
|
can_process_onchange = self.rpc({
|
||||||
|
url: '/web/dataset/call',
|
||||||
|
async: false
|
||||||
|
}, {
|
||||||
|
model: 'ir.values',
|
||||||
|
method: 'get_defaults',
|
||||||
|
args: [self.model, condition]
|
||||||
|
}).then(function (results) {
|
||||||
|
if (!results.length) { return; }
|
||||||
|
if (!response.value) {
|
||||||
|
response.value = {};
|
||||||
|
}
|
||||||
|
for(var i=0; i<results.length; ++i) {
|
||||||
|
// [whatever, key, value]
|
||||||
|
var triplet = results[i];
|
||||||
|
response.value[triplet[1]] = triplet[2];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (can_process_onchange.isRejected()) {
|
||||||
|
return can_process_onchange;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self.on_processed_onchange(response, processed);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
return $.Deferred().reject();
|
return $.Deferred().reject();
|
||||||
|
|
Loading…
Reference in New Issue