[IMP] hr_recruitment: automatically create employee

The action `Create Employee` on an applicant would open the form view
with the fields pre-filled, but the employee would not be automatically
created when leaving the view.

task-3301176

closes odoo/odoo#120566

Related: odoo/enterprise#40835
Signed-off-by: Kevin Baptiste <kba@odoo.com>
This commit is contained in:
Kevin Baptiste
2023-05-09 14:29:06 +02:00
parent 7792d45604
commit c142b3f1d2
4 changed files with 26 additions and 31 deletions
@@ -19,7 +19,6 @@
<field name="name">Applicant Hired</field>
<field name="res_model">hr.applicant</field>
<field name="default" eval="True"/>
<field name="description">Applicant hired</field>
</record>
<!-- Job-related subtypes for messaging / Chatter -->
@@ -2,10 +2,7 @@
<odoo><data noupdate="1">
<template id="applicant_hired_template">
Applicant hired<br/>
<ul>
<li>Employee: <a href="#" t-att-data-oe-id="applicant.emp_id.id" data-oe-model="hr.employee"><t t-esc="applicant.emp_id.name"/></a></li>
</ul>
Employee created: <a href="#" t-att-data-oe-id="applicant.emp_id.id" data-oe-model="hr.employee"><t t-esc="applicant.emp_id.name"/></a>
</template>
</data></odoo>
+21 -21
View File
@@ -540,14 +540,10 @@ class Applicant(models.Model):
self.ensure_one()
self._check_interviewer_access()
contact_name = False
if self.partner_id:
address_id = self.partner_id.address_get(['contact'])['contact']
contact_name = self.partner_id.display_name
else:
if not self.partner_id:
if not self.partner_name:
raise UserError(_('Please provide an applicant name.'))
new_partner_id = self.env['res.partner'].create({
self.partner_id = self.env['res.partner'].create({
'is_company': False,
'type': 'private',
'name': self.partner_name,
@@ -555,22 +551,26 @@ class Applicant(models.Model):
'phone': self.partner_phone,
'mobile': self.partner_mobile
})
self.partner_id = new_partner_id
address_id = new_partner_id.address_get(['contact'])['contact']
employee_data = {
'default_name': self.partner_name or contact_name,
'default_job_id': self.job_id.id,
'default_job_title': self.job_id.name,
'default_address_home_id': address_id,
'default_department_id': self.department_id.id,
'default_address_id': self.company_id.partner_id.id,
'default_work_email': self.department_id.company_id.email or self.email_from, # To have a valid email address by default
'default_work_phone': self.department_id.company_id.phone,
'default_applicant_id': self.ids,
action = self.env['ir.actions.act_window']._for_xml_id('hr.open_view_employee_list')
employee = self.env['hr.employee'].create(self._get_employee_create_vals())
action['res_id'] = employee.id
return action
def _get_employee_create_vals(self):
self.ensure_one()
address_id = self.partner_id.address_get(['contact'])['contact']
return {
'name': self.partner_name or self.partner_id.display_name,
'job_id': self.job_id.id,
'job_title': self.job_id.name,
'address_home_id': address_id,
'department_id': self.department_id.id,
'address_id': self.company_id.partner_id.id,
'work_email': self.department_id.company_id.email or self.email_from, # To have a valid email address by default
'work_phone': self.department_id.company_id.phone,
'applicant_id': self.ids,
}
dict_act_window = self.env['ir.actions.act_window']._for_xml_id('hr.open_view_employee_list')
dict_act_window['context'] = employee_data
return dict_act_window
def _update_employee_from_applicant(self):
# This method is to be overriden
@@ -23,15 +23,14 @@ class HrApplicant(models.Model):
for applicant in self:
applicant.skill_ids = applicant.applicant_skill_ids.skill_id
def create_employee_from_applicant(self):
self.ensure_one()
action = super().create_employee_from_applicant()
action['context']['default_employee_skill_ids'] = [(0, 0, {
def _get_employee_create_vals(self):
vals = super()._get_employee_create_vals()
vals['employee_skill_ids'] = [(0, 0, {
'skill_id': applicant_skill.skill_id.id,
'skill_level_id': applicant_skill.skill_level_id.id,
'skill_type_id': applicant_skill.skill_type_id.id,
}) for applicant_skill in self.applicant_skill_ids]
return action
return vals
def _update_employee_from_applicant(self):
vals_list = []