summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2012-02-07 17:01:58 +0100
committerXavier Morel <xmo@openerp.com>2012-02-07 17:01:58 +0100
commitbba8fde187dabf4c8b5f8ac46bb56e43c845ae69 (patch)
tree4b714504ad6ee9d5876f1d48a407ad0867c67e0a /addons
parentff7a161404509a78687c595d8844a2261aa5506b (diff)
[ADD] handling of change_default to onchange process
bzr revid: xmo@openerp.com-20120207160158-kxbue424wa3nxz03
Diffstat (limited to 'addons')
-rw-r--r--addons/web/static/src/js/view_form.js49
1 files changed, 46 insertions, 3 deletions
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index 3dcda5e5c08..16fe4ec2d47 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -314,6 +314,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
var self = this;
return this.on_change_mutex.exec(function() {
try {
+ var response = {}, can_process_onchange = $.Deferred();
processed = processed || [];
var on_change = widget.node.attrs.on_change;
if (on_change) {
@@ -323,18 +324,60 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
url: '/web/dataset/onchange',
async: false
};
- return self.rpc(ajax, {
+ can_process_onchange = self.rpc(ajax, {
model: self.dataset.model,
method: change_spec.method,
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
- }).pipe(function(response) {
- return self.on_processed_onchange(response, processed);
+ }).then(function(r) {
+ _.extend(response, r);
});
} else {
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) {
console.error(e);
return $.Deferred().reject();