diff --git a/odoo/addons/base/models/ir_actions.py b/odoo/addons/base/models/ir_actions.py
index 9b856cbf9e8..89f560a52bc 100644
--- a/odoo/addons/base/models/ir_actions.py
+++ b/odoo/addons/base/models/ir_actions.py
@@ -583,7 +583,42 @@ class IrServerObjectLines(models.Model):
"When Formula type is selected, this field may be a Python expression "
" that can use the same values as for the code field on the server action.\n"
"If Value type is selected, the value will be used directly without evaluation.")
- type = fields.Selection([('value', 'Value'), ('equation', 'Python expression')], 'Evaluation Type', default='value', required=True, change_default=True)
+ type = fields.Selection([
+ ('value', 'Value'),
+ ('reference', 'Reference'),
+ ('equation', 'Python expression')
+ ], 'Evaluation Type', default='value', required=True, change_default=True)
+ resource_ref = fields.Reference(
+ string='Record', selection='_selection_target_model',
+ compute='_compute_resource_ref', inverse='_set_resource_ref')
+
+ @api.model
+ def _selection_target_model(self):
+ models = self.env['ir.model'].search([])
+ return [(model.model, model.name) for model in models]
+
+ @api.depends('col1.relation', 'value', 'type')
+ def _compute_resource_ref(self):
+ for line in self:
+ if line.type in ['reference', 'value'] and line.col1 and line.col1.relation:
+ value = line.value or ''
+ try:
+ value = int(value)
+ if not self.env[line.col1.relation].browse(value).exists():
+ record = self.env[line.col1.relation]._search([], limit=1)
+ value = record[0] if record else 0
+ except ValueError:
+ record = self.env[line.col1.relation]._search([], limit=1)
+ value = record[0] if record else 0
+ line.resource_ref = '%s,%s' % (line.col1.relation, value)
+ else:
+ line.resource_ref = False
+
+ @api.onchange('resource_ref')
+ def _set_resource_ref(self):
+ for line in self.filtered(lambda line: line.type == 'reference'):
+ if line.resource_ref:
+ line.value = str(line.resource_ref.id)
@api.multi
def eval_value(self, eval_context=None):
diff --git a/odoo/addons/base/views/ir_actions_views.xml b/odoo/addons/base/views/ir_actions_views.xml
index d9b768814f5..7da45aa8617 100644
--- a/odoo/addons/base/views/ir_actions_views.xml
+++ b/odoo/addons/base/views/ir_actions_views.xml
@@ -276,6 +276,8 @@
+
+
-
+
+