From 72699d688017231a09839ca33b6dd9684ad48fa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 1 Jan 2023 13:25:17 +0100 Subject: [PATCH] Use Selection field for type of ir.action and add domain Closes #1564 --- trytond/trytond/ir/action.py | 21 ++++++++++++--------- trytond/trytond/ir/view/action_form.xml | 2 ++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/trytond/trytond/ir/action.py b/trytond/trytond/ir/action.py index ec243422c2..dbf1e75072 100644 --- a/trytond/trytond/ir/action.py +++ b/trytond/trytond/ir/action.py @@ -53,7 +53,12 @@ class Action(DeactivableMixin, ModelSQL, ModelView): "Action" __name__ = 'ir.action' name = fields.Char('Name', required=True, translate=True) - type = fields.Char('Type', required=True, readonly=True) + type = fields.Selection([ + ('ir.action.report', "Report"), + ('ir.action.act_window', "Window"), + ('ir.action.wizard', "Wizard"), + ('ir.action.url', "URL"), + ], "Type", required=True, readonly=True) records = fields.Selection([ ('selected', "Selected"), ('listed', "Listed"), @@ -302,10 +307,16 @@ class ActionMixin(ModelSQL): _order_name = 'action' _action_name = 'name' + action = fields.Many2One( + 'ir.action', "Action", required=True, ondelete='CASCADE') + @classmethod def __setup__(cls): pool = Pool() super(ActionMixin, cls).__setup__() + cls.action.domain = [ + ('type', '=', cls.__name__), + ] Action = pool.get('ir.action') for name in dir(Action): field = getattr(Action, name) @@ -472,8 +483,6 @@ class ActionReport(ActionMixin, ModelSQL, ModelView): }, depends=['template_extension']), 'get_report_content_html', setter='set_report_content_html') - action = fields.Many2One('ir.action', 'Action', required=True, - ondelete='CASCADE') direct_print = fields.Boolean('Direct Print') single = fields.Boolean("Single", help="Check if the template works only for one record.") @@ -746,8 +755,6 @@ class ActionActWindow(ActionMixin, ModelSQL, ModelView): 'act_window', 'Domains') domains = fields.Function(fields.Binary('Domains'), 'get_domains') limit = fields.Integer('Limit', help='Default limit for the list view.') - action = fields.Many2One('ir.action', 'Action', required=True, - ondelete='CASCADE') search_value = fields.Char('Search Criteria', help='Default search criteria for the list view.') pyson_domain = fields.Function(fields.Char('PySON Domain'), 'get_pyson') @@ -1076,8 +1083,6 @@ class ActionWizard(ActionMixin, ModelSQL, ModelView): __name__ = 'ir.action.wizard' _action_name = 'wiz_name' wiz_name = fields.Char('Wizard name', required=True) - action = fields.Many2One('ir.action', 'Action', required=True, - ondelete='CASCADE') model = fields.Char('Model') window = fields.Boolean('Window', help='Run wizard in a new window.') @@ -1101,8 +1106,6 @@ class ActionURL(ActionMixin, ModelSQL, ModelView): "Action URL" __name__ = 'ir.action.url' url = fields.Char('Action Url', required=True) - action = fields.Many2One('ir.action', 'Action', required=True, - ondelete='CASCADE') @staticmethod def default_type(): diff --git a/trytond/trytond/ir/view/action_form.xml b/trytond/trytond/ir/view/action_form.xml index 58a482b3da..7a00d8b93e 100644 --- a/trytond/trytond/ir/view/action_form.xml +++ b/trytond/trytond/ir/view/action_form.xml @@ -8,6 +8,8 @@ this repository contains the full copyright notices and license terms. --> +