From bba8fde187dabf4c8b5f8ac46bb56e43c845ae69 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 7 Feb 2012 17:01:58 +0100 Subject: [PATCH] [ADD] handling of change_default to onchange process bzr revid: xmo@openerp.com-20120207160158-kxbue424wa3nxz03 --- addons/web/static/src/js/view_form.js | 49 +++++++++++++++++++++++++-- 1 file 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