[ADD] dynamic view: handle setting domains via onchange

lp bug: https://launchpad.net/bugs/911676 fixed

bzr revid: xmo@openerp.com-20120120105608-zjbam8ki4uoqer5v
This commit is contained in:
Xavier Morel 2012-01-20 11:56:08 +01:00
parent ccde5e2f5e
commit 9b54bdeb18
2 changed files with 22 additions and 2 deletions

View File

@ -837,6 +837,18 @@ class DataSet(openerpweb.Controller):
return getattr(req.session.model(model), method)(*args, **kwargs)
@openerpweb.jsonrequest
def onchange(self, req, model, method, args, context_id=None):
result = self.call_common(req, model, method, args, context_id=context_id)
if 'domain' not in result:
return result
result['domain'] = dict(
(k, parse_domain(v, req.session))
for k, v in result['domain'].iteritems())
return result
@openerpweb.jsonrequest
def call(self, req, model, method, args, domain_id=None, context_id=None):
return self.call_common(req, model, method, args, domain_id, context_id)

View File

@ -316,7 +316,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
var change_spec = self.parse_on_change(on_change, widget);
if (change_spec) {
var ajax = {
url: '/web/dataset/call',
url: '/web/dataset/onchange',
async: false
};
return self.rpc(ajax, {
@ -342,6 +342,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
var result = response;
if (result.value) {
for (var f in result.value) {
if (!result.value.hasOwnProperty(f)) { continue; }
var field = this.fields[f];
// If field is not defined in the view, just ignore it
if (field) {
@ -367,7 +368,14 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
});
}
if (result.domain) {
// TODO:
function edit_domain(node) {
var new_domain = result.domain[node.attrs.name];
if (new_domain) {
node.attrs.domain = new_domain;
}
_(node.children).each(edit_domain);
}
edit_domain(this.fields_view.arch);
}
return $.Deferred().resolve();
} catch(e) {