From: Thibault Delavallée Date: Thu, 21 Aug 2014 08:32:29 +0000 (+0200) Subject: [FIX] ir_actions: server action: when creating or writing value on a record X-Git-Tag: 8.0.0~305 X-Git-Url: http://git.inspyration.org/?a=commitdiff_plain;h=4c6dcd7fcb9a0463003c3820eb9a35dfb7af14b3;p=odoo%2Fodoo.git [FIX] ir_actions: server action: when creating or writing value on a record through a server action, try to correctly set the value to write on a given fields according to its type. For example many2one fields should receive an int, not a unique containing the id of the new value. --- diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index ef8c7d2..4eb9027 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -892,11 +892,7 @@ class ir_actions_server(osv.osv): """ res = {} for exp in action.fields_lines: - if exp.type == 'equation': - expr = eval(exp.value, eval_context) - else: - expr = exp.value - res[exp.col1.name] = expr + res[exp.col1.name] = exp.eval_value(eval_context=eval_context)[exp.id] if action.use_write == 'current': model = action.model_id.model @@ -929,11 +925,7 @@ class ir_actions_server(osv.osv): """ res = {} for exp in action.fields_lines: - if exp.type == 'equation': - expr = eval(exp.value, eval_context) - else: - expr = exp.value - res[exp.col1.name] = expr + res[exp.col1.name] = exp.eval_value(eval_context=eval_context)[exp.id] if action.use_create in ['new', 'copy_current']: model = action.model_id.model @@ -1036,7 +1028,9 @@ class ir_actions_server(osv.osv): class ir_server_object_lines(osv.osv): _name = 'ir.server.object.lines' + _description = 'Server Action value mapping' _sequence = 'ir_actions_id_seq' + _columns = { 'server_id': fields.many2one('ir.actions.server', 'Related Server Action'), 'col1': fields.many2one('ir.model.fields', 'Field', required=True), @@ -1049,10 +1043,25 @@ class ir_server_object_lines(osv.osv): ('equation', 'Python expression') ], 'Evaluation Type', required=True, change_default=True), } + _defaults = { 'type': 'value', } + def eval_value(self, cr, uid, ids, eval_context=None, context=None): + res = dict.fromkeys(ids, False) + for line in self.browse(cr, uid, ids, context=context): + expr = line.value + if line.type == 'equation': + expr = eval(line.value, eval_context) + elif line.col1.ttype in ['many2one', 'integer']: + try: + expr = int(line.value) + except Exception: + pass + res[line.id] = expr + return res + TODO_STATES = [('open', 'To Do'), ('done', 'Done')]