Odoo 14如何实现求职者提交申请后自动发送确认邮件
Odoo 14 招聘申请自动发送确认邮件实现方案
你原有代码存在几处逻辑错误,修正后即可实现需求:
- 原有方法中循环
self不符合cron调用逻辑,cron执行model.job_app_acknowledgments()时self是空的hr.applicant记录集,原有赋值rec.partner_id的逻辑完全不成立 - 代码中
job变量未定义,搜索条件里的job.id会直接触发报错 - 没有增加邮件发送标记,会导致每次cron执行都给所有处于第一阶段的求职者重复发邮件
- 无需手动设置
partner_id,hr.applicant本身自带关联的联系人/邮箱字段
第一步:新增邮件发送标记字段(避免重复发信)
在你的自定义模块的models文件中继承hr.applicant新增标记字段:
from odoo import models, fields class HrApplicant(models.Model): _inherit = 'hr.applicant' acknowledgment_sent = fields.Boolean(string='确认邮件已发送', default=False)
第二步:修改定时任务执行方法
替换原有方法为以下逻辑:
def job_app_acknowledgments(self): # 拉取所有招聘岗位的首个阶段ID first_stage_ids = self.env['hr.job'].search([]).mapped(lambda job: job._get_first_stage().id) # 筛选符合条件的未发信申请人:处于首个阶段、未发过确认信、有预留邮箱 applicants = self.search([ ('stage_id', 'in', first_stage_ids), ('acknowledgment_sent', '=', False), ('email_from', '!=', False) ]) # 加载预设的邮件模板 template = self.env.ref('hr_recruitment_new.job_applicant_acknowledgment') for app in applicants: # 发送邮件,Odoo会自动解析模板内的变量,无需手动传context参数 template.send_mail(app.id, force_send=True, raise_exception=False) # 标记已发送,避免下次重复触发 app.acknowledgment_sent = True
注:如果你的邮件模板还未配置收件人,直接在模板的「收件人」字段填写${object.email_from}即可,无需手动在代码里传收件人参数
第三步:Cron配置调整
你原有Cron.xml的配置无需修改,1分钟执行一次的频率刚好满足数分钟内完成推送的需求,升级模块时同步更新字段、cron配置到数据库即可生效。
如果需要更高的实时性,也可以重写hr.applicant的write方法,检测到申请阶段变更为首个阶段时直接触发发信,不需要依赖cron调度,两种方案可以根据你的场景选择。
内容的提问来源于stack exchange,提问作者Jaymezon
相关产品推荐
相关产品推荐

