From 8473bde80e6609d552af8b00396c72a20bd3c47f Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Thu, 29 Jun 2017 11:46:46 +0200 Subject: [FIX] web: handle 'domain' key returned by onchanges Onchange RPCs return an object that may contain a 'domain' key. When it does, its value is an object whose keys are field names and values are the new domain for the corresponding field. Before this rev., the 'domain' key was totally ignored by the BasicModel. This feature is used for example in the account.payment form view (go to an open invoice, click on 'Register payment'): the domain of field payment_method_id is updated by the onchanges (e.g. when changing the journal_id). As the domain was ignored, it always displayed all possible payment methods. --- addons/web/static/src/js/views/basic/basic_model.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js/views/basic/basic_model.js') diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index 69c6c13f9a7..01b2a18091a 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1791,7 +1791,9 @@ var BasicModel = AbstractModel.extend({ var context = record.getContext({fieldName: fieldName}); var domain = record.getDomain({fieldName: fieldName}); if (domain.length) { - var localID = record._changes && record._changes[fieldName] || record.data[fieldName]; + var localID = (record._changes && fieldName in record._changes) ? + record._changes[fieldName] : + record.data[fieldName]; if (localID) { var element = this.localData[localID]; domain = ["|", ["id", "=", element.data.id]].concat(domain); @@ -2994,6 +2996,12 @@ var BasicModel = AbstractModel.extend({ }); record._warning = true; } + if (result.domain) { + var fieldsInfo = record.fieldsInfo[viewType || record.viewType]; + for (var fieldName in result.domain) { + fieldsInfo[fieldName].domain = result.domain[fieldName]; + } + } return self._applyOnChange(result.value, record).then(function () { return result; }); -- cgit v1.2.3