[IMP] hr: create employees/users from eachother
The goal is to make it easier to link employees to users. We can now directly create an employee from the 'invite' user form view As well as create a new user from a form view using an action. TaskId-2762247 closes odoo/odoo#85428 Signed-off-by: Kevin Baptiste <kba@odoo.com>
This commit is contained in:
@@ -157,6 +157,22 @@ class HrEmployeePrivate(models.Model):
|
||||
avatar = base64.b64encode(employee._avatar_get_placeholder())
|
||||
employee[avatar_field] = avatar
|
||||
|
||||
def action_create_user(self):
|
||||
self.ensure_one()
|
||||
if self.user_id:
|
||||
raise ValidationError(_("This employee already has an user."))
|
||||
return {
|
||||
'name': _('Create User'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': 'res.users',
|
||||
'view_mode': 'form',
|
||||
'view_id': self.env.ref('base.view_users_simple_form').id,
|
||||
'target': 'new',
|
||||
'context': {
|
||||
'default_create_employee_id': self.id,
|
||||
}
|
||||
}
|
||||
|
||||
def name_get(self):
|
||||
if self.check_access_rights('read', raise_exception=False):
|
||||
return super(HrEmployeePrivate, self).name_get()
|
||||
|
||||
@@ -139,6 +139,9 @@ class User(models.Model):
|
||||
employee_type = fields.Selection(related='employee_id.employee_type', readonly=False, related_sudo=False)
|
||||
employee_resource_calendar_id = fields.Many2one(related='employee_id.resource_calendar_id', string="Employee's Working Hours", readonly=True)
|
||||
|
||||
create_employee = fields.Boolean(store=False, default=True, string="Technical field, whether to create an employee")
|
||||
create_employee_id = fields.Many2one('hr.employee', store=False, string="Technical field, bind user to this employee on create")
|
||||
|
||||
can_edit = fields.Boolean(compute='_compute_can_edit')
|
||||
is_system = fields.Boolean(compute="_compute_is_system")
|
||||
|
||||
@@ -189,6 +192,25 @@ class User(models.Model):
|
||||
result['toolbar']['action'] = [act for act in result['toolbar']['action'] if act['id'] != change_password_action.id]
|
||||
return result
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
res = super().create(vals_list)
|
||||
employee_create_vals = []
|
||||
for user, vals in zip(res, vals_list):
|
||||
if not vals.get('create_employee') and not vals.get('create_employee_id'):
|
||||
continue
|
||||
if vals.get('create_employee_id'):
|
||||
self.env['hr.employee'].browse(vals.get('create_employee_id')).user_id = user
|
||||
else:
|
||||
employee_create_vals.append(dict(
|
||||
name=user.name,
|
||||
company_id=user.env.company.id,
|
||||
**self.env['hr.employee']._sync_user(user)
|
||||
))
|
||||
if employee_create_vals:
|
||||
self.env['hr.employee'].create(employee_create_vals)
|
||||
return res
|
||||
|
||||
def write(self, vals):
|
||||
"""
|
||||
Synchronize user and its related employee
|
||||
|
||||
@@ -404,6 +404,18 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_hr_employee_create_user" model="ir.actions.server">
|
||||
<field name="name">Create User</field>
|
||||
<field name="model_id" ref="model_hr_employee"/>
|
||||
<field name="binding_model_id" ref="model_hr_employee"/>
|
||||
<field name="binding_view_types">form</field>
|
||||
<field name="groups_id" eval="[(4, ref('base.group_erp_manager'))]"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
action = records.action_create_user()
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="act_employee_from_department" model="ir.actions.act_window">
|
||||
<field name="name">Employees</field>
|
||||
<field name="res_model">hr.employee</field>
|
||||
|
||||
@@ -199,6 +199,18 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_users_simple_form_inherit_hr" model="ir.ui.view">
|
||||
<field name="name">view.users.simple.form.inherit.hr</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="base.view_users_simple_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='mobile']" position="after">
|
||||
<field name="create_employee" force_save="1" string="Create Employee"/>
|
||||
<field name="create_employee_id" force_save="1" invisible="1"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_users_action_my" model="ir.actions.act_window">
|
||||
<field name="name">Change my Preferences</field>
|
||||
<field name="res_model">res.users</field>
|
||||
|
||||
Reference in New Issue
Block a user