diff --git a/odoo/addons/base/models/res_config.py b/odoo/addons/base/models/res_config.py index c67419308be..3642bc11280 100644 --- a/odoo/addons/base/models/res_config.py +++ b/odoo/addons/base/models/res_config.py @@ -577,10 +577,9 @@ class ResConfigSettings(models.TransientModel, ResConfigModuleInstallationMixin) if self[name] == current_settings[name]: continue if int(self[name]): - groups.write({'implied_ids': [Command.link(implied_group.id)]}) + groups._apply_group(implied_group) else: - groups.write({'implied_ids': [Command.unlink(implied_group.id)]}) - implied_group.write({'users': [Command.unlink(user.id) for user in groups.users]}) + groups._remove_group(implied_group) # config fields: store ir.config_parameters IrConfigParameter = self.env['ir.config_parameter'].sudo() diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py index 3317b660ca2..b85bf7fc699 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -1091,6 +1091,21 @@ class GroupsImplied(models.Model): self._check_one_user_type() return res + def _apply_group(self, implied_group): + """ Add the given group to the groups implied by the current group + :param implied_group: the implied group to add + """ + if implied_group not in self.implied_ids: + self.write({'implied_ids': [Command.link(implied_group.id)]}) + + def _remove_group(self, implied_group): + """ Remove the given group from the implied groups of the current group + :param implied_group: the implied group to remove + """ + if implied_group in self.implied_ids: + self.write({'implied_ids': [Command.unlink(implied_group.id)]}) + implied_group.write({'users': [Command.unlink(user.id) for user in self.users]}) + class UsersImplied(models.Model): _inherit = 'res.users'