Odoo18-Base/addons/hr_recruitment/wizard/candidate_send_mail.py

82 lines
2.8 KiB
Python
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
from odoo import api, fields, models, _
class CandidateSendMail(models.TransientModel):
_name = "candidate.send.mail"
_inherit = "mail.composer.mixin"
_description = "Send mails to candidates"
candidate_ids = fields.Many2many("hr.candidate", string="Candidates", required=True)
author_id = fields.Many2one(
"res.partner",
"Author",
required=True,
default=lambda self: self.env.user.partner_id.id,
)
attachment_ids = fields.Many2many(
"ir.attachment", string="Attachments", readonly=False, store=True
)
@api.depends("subject")
def _compute_render_model(self):
self.render_model = "hr.candidate"
def action_send(self):
self.ensure_one()
without_emails = self.candidate_ids.filtered(
lambda c: not c.email_from or (c.partner_id and not c.partner_id.email)
)
if without_emails:
return {
"type": "ir.actions.client",
"tag": "display_notification",
"params": {
"type": "danger",
"message": _(
"The following candidates are missing an email address: %s.",
", ".join(
without_emails.mapped(
lambda c: c.partner_name or c.display_name
)
),
),
},
}
if self.template_id:
subjects = self.template_id._render_field(
"subject", res_ids=self.candidate_ids.ids
)
else:
subjects = {candidate.id: self.subject for candidate in self.candidate_ids}
for candidate in self.candidate_ids:
if not candidate.partner_id:
candidate.partner_id = self.env["res.partner"].create(
{
"is_company": False,
"name": candidate.partner_name,
"email": candidate.email_from,
"phone": candidate.partner_phone,
"mobile": candidate.partner_phone,
}
)
attachment_ids = []
for attachment_id in self.attachment_ids:
new_attachment = attachment_id.copy(
{"res_model": "hr.candidate", "res_id": candidate.id}
)
attachment_ids.append(new_attachment.id)
candidate.message_post(
author_id=self.author_id.id,
body=self.body,
email_layout_xmlid="mail.mail_notification_light",
message_type="comment",
partner_ids=candidate.partner_id.ids,
subject=subjects[candidate.id],
attachment_ids=attachment_ids,
)