diff --git a/spp_user_roles/models/role.py b/spp_user_roles/models/role.py index 069a2b09..472eee14 100644 --- a/spp_user_roles/models/role.py +++ b/spp_user_roles/models/role.py @@ -2,7 +2,7 @@ import logging -from odoo import fields, models +from odoo import api, fields, models _logger = logging.getLogger(__name__) @@ -12,6 +12,29 @@ class ResUsersRoleCustomSPP(models.Model): role_type = fields.Selection([("local", "Local"), ("global", "Global")], default="global") + @api.model_create_multi + def create(self, vals_list): + # Workaround: same Odoo cache-clearing bug as in base_user_role's write() + # override. When res.groups fields are set via _inherits on create(), + # implied_ids gets dropped. Extract group fields and write them to + # group_id directly after creation, mirroring the write() fix. + groups_vals_list = [] + group_fields = set(self.env["res.groups"]._fields) - {"name"} + for vals in vals_list: + group_vals = {} + for field in group_fields: + if field in vals: + group_vals[field] = vals.pop(field) + groups_vals_list.append(group_vals) + + new_records = super().create(vals_list) + + for record, group_vals in zip(new_records, groups_vals_list, strict=True): + if group_vals: + record.group_id.write(group_vals) + + return new_records + def action_update_users(self): """ Call the update_users function to force the update of associated users in the role. diff --git a/spp_user_roles/views/role.xml b/spp_user_roles/views/role.xml index 0637e402..1817878b 100644 --- a/spp_user_roles/views/role.xml +++ b/spp_user_roles/views/role.xml @@ -20,9 +20,19 @@ + [('role_id', '=', False)] - many2many + + + + +