69 lines
2.7 KiB
Python
69 lines
2.7 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import timedelta
|
|
from odoo import fields, models, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class Applicant(models.Model):
|
|
_inherit = "hr.applicant"
|
|
|
|
survey_id = fields.Many2one('survey.survey', related='job_id.survey_id', string="Survey", readonly=True)
|
|
response_ids = fields.One2many('survey.user_input', 'applicant_id', string="Responses")
|
|
|
|
def action_print_survey(self):
|
|
""" If response is available then print this response otherwise print survey form (print template of the survey) """
|
|
self.ensure_one()
|
|
sorted_interviews = self.response_ids\
|
|
.filtered(lambda i: i.survey_id == self.survey_id)\
|
|
.sorted(lambda i: i.create_date, reverse=True)
|
|
if not sorted_interviews:
|
|
action = self.survey_id.action_print_survey()
|
|
action['target'] = 'new'
|
|
return action
|
|
|
|
answered_interviews = sorted_interviews.filtered(lambda i: i.state == 'done')
|
|
if answered_interviews:
|
|
action = self.survey_id.action_print_survey(answer=answered_interviews[0])
|
|
action['target'] = 'new'
|
|
return action
|
|
action = self.survey_id.action_print_survey(answer=sorted_interviews[0])
|
|
action['target'] = 'new'
|
|
return action
|
|
|
|
def action_send_survey(self):
|
|
self.ensure_one()
|
|
|
|
# if an applicant does not already has associated partner_id create it
|
|
if not self.partner_id:
|
|
if not self.partner_name:
|
|
raise UserError(_('Please provide an applicant name.'))
|
|
self.partner_id = self.env['res.partner'].sudo().create({
|
|
'is_company': False,
|
|
'name': self.partner_name,
|
|
'email': self.email_from,
|
|
'phone': self.partner_phone,
|
|
'mobile': self.partner_mobile
|
|
})
|
|
|
|
self.survey_id.check_validity()
|
|
template = self.env.ref('hr_recruitment_survey.mail_template_applicant_interview_invite', raise_if_not_found=False)
|
|
local_context = dict(
|
|
default_applicant_id=self.id,
|
|
default_partner_ids=self.partner_id.ids,
|
|
default_survey_id=self.survey_id.id,
|
|
default_use_template=bool(template),
|
|
default_template_id=template and template.id or False,
|
|
default_email_layout_xmlid='mail.mail_notification_light',
|
|
default_deadline=fields.Datetime.now() + timedelta(days=15)
|
|
)
|
|
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'name': _("Send an interview"),
|
|
'view_mode': 'form',
|
|
'res_model': 'survey.invite',
|
|
'target': 'new',
|
|
'context': local_context,
|
|
}
|