Good day, I am asking for help.
I am trying to create a user in Odoo 15 with python code. I want when an HR creates an Employee the related user is also created. This related user should belong to Internal User Group. The code below gives me "The user cannot have more than one user types."
class Doctors(models.Model):
_inherit = "hr.employee"
@api.model
def create(self, values):
employee = super(Doctors, self).create(values)
company_id = self.company_id or self.env.user.sudo().company_id
if employee.work_email and not employee.user_id:
employee.sudo().create_employee_related_user()
return employee
def create_employee_related_user(self):
for record in self:
company_id = record.company_id or self.env.user.sudo().company_id
if not record.work_email:
raise UserError(_('Please define valid email for the Employee'))
group_user = self.env.ref('base.group_user') or False
user = record.user_id[0] if record.user_id else None
# update partner email, if a new one was introduced also add internal group to relative user of selected partners
user_internal = None
# create a user and make sure it is in the internal group
if not user:
user_internal = record.sudo().with_context(company_id=company_id)._create_user()
else:
user_internal = user
if group_user not in user_internal.groups_id:
user_internal.write({'active': True, 'groups_id': [(4, group_user.id)]})
def _create_user(self):
company_id = self.env.context.get('company_id')
get_user = self.env['res.users'].sudo().search([('email','=',self.work_email)], limit=1)
if get_user:
raise UserError(_('Employee/User already registered with given email address.'))
return self.env['res.users'].with_context(no_reset_password=True)._create_user_from_template({
'email': self.work_email,
'login': self.work_email,
'name': self.name,
'company_id': company_id.id,
'company_ids': [(6, 0, [company_id.id])],
})