diff --git a/base_user_role/__init__.py b/base_user_role/__init__.py index 0650744f..aee8895e 100644 --- a/base_user_role/__init__.py +++ b/base_user_role/__init__.py @@ -1 +1,2 @@ from . import models +from . import wizards diff --git a/base_user_role/__manifest__.py b/base_user_role/__manifest__.py index 70904c12..a183d37d 100644 --- a/base_user_role/__manifest__.py +++ b/base_user_role/__manifest__.py @@ -19,6 +19,7 @@ "views/role.xml", "views/user.xml", "views/group.xml", + "wizards/wizard_groups_into_role.xml", ], "installable": True, } diff --git a/base_user_role/security/ir.model.access.csv b/base_user_role/security/ir.model.access.csv index 04790a3d..1691f70d 100644 --- a/base_user_role/security/ir.model.access.csv +++ b/base_user_role/security/ir.model.access.csv @@ -1,3 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_res_users_role,access_res_users_role,model_res_users_role,"base.group_erp_manager",1,1,1,1 access_res_users_role_line,access_res_users_role_line,model_res_users_role_line,"base.group_erp_manager",1,1,1,1 +access_wizard_groups_into_role,access_wizard_groups_into_role,model_wizard_groups_into_role,,1,1,1,1 diff --git a/base_user_role/tests/test_user_role.py b/base_user_role/tests/test_user_role.py index b39440ac..f494fc52 100644 --- a/base_user_role/tests/test_user_role.py +++ b/base_user_role/tests/test_user_role.py @@ -16,6 +16,7 @@ class TestUserRole(TransactionCase): ) cls.user_model = cls.env["res.users"] cls.role_model = cls.env["res.users.role"] + cls.wiz_model = cls.env["wizard.groups.into.role"] cls.company1 = cls.env.ref("base.main_company") cls.company2 = cls.env["res.company"].create({"name": "company2"}) @@ -229,3 +230,18 @@ class TestUserRole(TransactionCase): AccessError, "You are not allowed to access 'User role'" ): role.read() + + def test_group_groups_into_role(self): + user_group_ids = [group.id for group in self.user_id.groups_id] + # Check that there is not a role with name: Test Role + self.assertFalse(self.role_model.search([("name", "=", "Test Role")])) + # Call create_role function to group groups into a role + wizard = self.wiz_model.with_context(active_ids=user_group_ids).create( + {"name": "Test Role"} + ) + wizard.create_role() + # Check that a role with name: Test Role has been created + new_role = self.role_model.search([("name", "=", "Test Role")]) + self.assertTrue(new_role) + # Check that the role has the correct groups + self.assertEqual(new_role.implied_ids.ids, user_group_ids) diff --git a/base_user_role/wizards/__init__.py b/base_user_role/wizards/__init__.py new file mode 100644 index 00000000..2a270e1b --- /dev/null +++ b/base_user_role/wizards/__init__.py @@ -0,0 +1 @@ +from . import wizard_groups_into_role diff --git a/base_user_role/wizards/wizard_groups_into_role.py b/base_user_role/wizards/wizard_groups_into_role.py new file mode 100644 index 00000000..40e6f7e4 --- /dev/null +++ b/base_user_role/wizards/wizard_groups_into_role.py @@ -0,0 +1,37 @@ +# Copyright 2021 Sodexis +# License OPL-1 (See LICENSE file for full copyright and licensing details). + + +from odoo import fields, models + + +class GroupGroupsIntoRole(models.TransientModel): + """ + This wizard is used to group different groups into a role. + """ + + _name = "wizard.groups.into.role" + _description = "Group groups into a role" + name = fields.Char( + required=True, + help="Group groups into a role and specify a name for this role", + ) + + def create_role(self): + selected_group_ids = self.env.context.get("active_ids", []) + vals = { + "name": self.name, + "implied_ids": selected_group_ids, + } + role = self.env["res.users.role"].create(vals) + + return { + "type": "ir.actions.act_window", + "res_model": "res.users.role", + "view_mode": "form", + "res_id": role.id, + "target": "current", + "context": { + "form_view_ref": "base_user_role.view_res_users_role_form", + }, + } diff --git a/base_user_role/wizards/wizard_groups_into_role.xml b/base_user_role/wizards/wizard_groups_into_role.xml new file mode 100644 index 00000000..271a055a --- /dev/null +++ b/base_user_role/wizards/wizard_groups_into_role.xml @@ -0,0 +1,31 @@ + + + + wizard.groups.into.role.wiz.view + wizard.groups.into.role + +
+ + + +
+
+
+
+
+ + Create Role + ir.actions.act_window + wizard.groups.into.role + form + new + + +