82 lines
2.8 KiB
Python
82 lines
2.8 KiB
Python
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,
|
|
)
|