From 85c707e68475d96d575ab0db19473e6cf42cedf1 Mon Sep 17 00:00:00 2001 From: Priyanka Kakadiya Date: Thu, 17 Oct 2019 11:08:41 +0000 Subject: [PATCH] [IMP] base: sort actions by sequence if sequence available before this commit: actions are not showing as per the sequence, like: 1) Other actions (delete, duplicate) 2) Windows actions 3) Server actions (without sorting by sequence) After this commit: Server actions are sorted by the sequence, like: 1) Other actions (delete, duplicate) 2) Windows actions 3) Server actions (with sorting by sequence) task-2005419 closes odoo/odoo#39872 Signed-off-by: Raphael Collet (rco) --- odoo/addons/base/models/ir_actions.py | 3 +++ odoo/addons/base/tests/test_ir_actions.py | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/odoo/addons/base/models/ir_actions.py b/odoo/addons/base/models/ir_actions.py index 773b8aae67c..7a36e2423e9 100644 --- a/odoo/addons/base/models/ir_actions.py +++ b/odoo/addons/base/models/ir_actions.py @@ -129,6 +129,9 @@ class IrActions(models.Model): except (AccessError, MissingError): continue + # sort actions by their sequence if sequence available + if result.get('action'): + result['action'] = sorted(result['action'], key=lambda vals: vals.get('sequence', 0)) return result diff --git a/odoo/addons/base/tests/test_ir_actions.py b/odoo/addons/base/tests/test_ir_actions.py index 03a0159d7a8..c21fbb6bcc1 100644 --- a/odoo/addons/base/tests/test_ir_actions.py +++ b/odoo/addons/base/tests/test_ir_actions.py @@ -252,7 +252,21 @@ class TestServerActions(TestServerActionsBase): self.action.with_context(self.context).run() self.assertEqual(self.test_country.vat_label, 'VatFromTest', 'vat label should be changed to VatFromTest') + def test_60_sort(self): + """ check the actions sorted by sequence """ + Actions = self.env['ir.actions.actions'] + # Do: update model + self.action.write({ + 'model_id': self.res_country_model.id, + 'binding_model_id': self.res_country_model.id, + }) + self.action2 = self.action.copy({'name': 'TestAction2', 'sequence': 1}) + + # Test: action returned by sequence + bindings = Actions.get_bindings('res.country') + self.assertEqual([vals.get('name') for vals in bindings['action']], ['TestAction2', 'TestAction']) + self.assertEqual([vals.get('sequence') for vals in bindings['action']], [1, 5]) class TestCustomFields(common.TransactionCase):