I am using odoo version 16, earlier I am using odoo version 11 and i want to upgrade my code from v11 to v16.
I am stuck at one method where I want to make some fields read-only from defined configured fields(many2many field in setting) for a specific group (except manager group). This code worked for v11 but not working on v16.
So, anyone can help me out with this problem?
My code is below:
class HrEmployeeResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
editable_fields = fields.Many2many('ir.model.fields', 'editable_fields_rel', 'model_id', 'id',
string='Editable Field', domain="[('model_id', '=', 'hr.employee')]")
class CustomEmployee(models.Model):
_inherit = 'hr.employee'
def fields_view_get(self, view_id=None, view_type="form", toolbar=False, submenu=False):
res = super(CustomEmployee, self).fields_view_get(view_id=view_id,
view_type=view_type, toolbar=toolbar, submenu=submenu)
doc = etree.XML(res['arch'])
###### Make fields invisible for others###########
config_fields = self.env['ir.default'].get('res.config.settings', 'editable_fields')
all_editable_fields = self.env['ir.model.fields'].browse(config_fields)
rec_list = []
for rec in all_editable_fields:
rec_list.append(rec.name)
###### Make fields Readonly for others ###########
if not self.env.user.has_group('hr.group_hr_manager'):
for field in res['fields']:
if field not in rec_list:
for node in doc.xpath("//field[@name='%s']" % field):
node.set('readonly', '1')
node_values = node.get('modifiers')
modifiers = json.loads(node_values)
modifiers["readonly"] = True
node.set('modifiers', json.dumps(modifiers))
res['arch'] = etree.tostring(doc)
####################
return res
Thanks in advance.