From 7c17e2745a71f2f19ab01521882348dc0d27860c Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Sun, 11 Jun 2023 11:15:42 +0000 Subject: [PATCH] [FIX] base: onchange2() for res.users dealing with reified group fields closes odoo/odoo#124612 Related: odoo/enterprise#42445 Signed-off-by: Raphael Collet --- odoo/addons/base/models/res_users.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py index 159ea7819f3..c4e71badf71 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -1729,6 +1729,31 @@ class UsersView(models.Model): ) return result + def onchange2(self, values, field_names, fields_spec): + reified_fnames = [fname for fname in fields_spec if is_reified_group(fname)] + if reified_fnames: + values = {key: val for key, val in values.items() if key != 'groups_id'} + values = self._remove_reified_groups(values) + + if any(is_reified_group(fname) for fname in field_names): + field_names = [fname for fname in field_names if not is_reified_group(fname)] + field_names.append('groups_id') + + fields_spec = { + field_name: field_spec + for field_name, field_spec in fields_spec.items() + if not is_reified_group(field_name) + } + fields_spec['groups_id'] = {} + + result = super().onchange2(values, field_names, fields_spec) + + if reified_fnames and 'groups_id' in result.get('value', {}): + self._add_reified_groups(reified_fnames, result['value']) + result['value'].pop('groups_id', None) + + return result + def read(self, fields=None, load='_classic_read'): # determine whether reified groups fields are required, and which ones fields1 = fields or list(self.fields_get())