diff --git a/base_user_role/models/role.py b/base_user_role/models/role.py index 85de4f3c7..94451ec8f 100644 --- a/base_user_role/models/role.py +++ b/base_user_role/models/role.py @@ -85,12 +85,13 @@ def read(self, fields=None, load="_classic_read"): def write(self, vals): recs = self.sudo() if self._bypass_rules() else self + vals = dict(vals) # Workaround to solve issue with broken code in odoo that clear the # cache during the write: see odoo/addons/base/models/res_users.py#L226 groups_vals = {} - for field in recs.group_id._fields: - if field in vals: - groups_vals[field] = vals.pop(field) + for name, field in recs._fields.items(): + if field.inherited and name in vals: + groups_vals[name] = vals.pop(name) if groups_vals: recs.group_id.write(groups_vals) res = super(ResUsersRole, recs).write(vals) diff --git a/base_user_role/tests/test_user_role.py b/base_user_role/tests/test_user_role.py index 4235edb35..f13472a8f 100644 --- a/base_user_role/tests/test_user_role.py +++ b/base_user_role/tests/test_user_role.py @@ -89,6 +89,18 @@ def setUpClass(cls): class TestUserRole(TestUserRoleCommon): + def test_role_sequence(self): + group_sequence = self.role1_id.group_id.sequence + self.role1_id.write({"sequence": 42}) + self.assertEqual(self.role1_id.sequence, 42) + self.assertEqual(self.role1_id.group_id.sequence, group_sequence) + + def test_role_write_preserves_values(self): + values = {"name": "Renamed role"} + self.role1_id.write(values) + self.assertEqual(self.role1_id.name, "Renamed role") + self.assertEqual(values, {"name": "Renamed role"}) + def test_role_1(self): self.user_id.write( {"role_line_ids": [fields.Command.create({"role_id": self.role1_id.id})]}