如何在Odoo中配置员工合同到期提醒邮件?Odoo 8字段问题求助
在Odoo 8中配置员工合同到期30天提醒的解决方案
我来帮你搞定Odoo 8里的合同到期提醒配置问题——没错,Odoo 8的自动化动作确实没有那些高版本才有的Timer Trigger Date和Delay After Trigger Date字段,咱们换个用计划动作+邮件模板的方案,完全能实现到期前30天发提醒邮件的需求,步骤如下:
1. 先给合同模型加个“已发送提醒”标记字段(避免重复发邮件)
因为我们需要避免同一合同多次触发提醒,所以先给hr.contract模型加个布尔字段:
- 进入
设置 > 技术 > 数据库结构 > 模型,找到员工合同(hr.contract) - 点击
添加字段,填写:- 字段名:
reminder_sent - 类型:布尔(Boolean)
- 默认值:
False - 标签:已发送提醒
- 字段名:
- 保存字段,刷新页面生效。
2. 创建合同到期提醒的邮件模板
接下来做发送用的邮件模板:
- 进入
设置 > 技术 > 电子邮件 > 邮件模板,点击创建 - 填写模板信息:
- 名称:员工合同到期提醒
- 模型:员工合同(hr.contract)
- 收件人:可以设置为员工的直属上级(
${object.employee_id.parent_id.email}),或者HR的固定邮箱;也可以在抄送里加员工自己的邮箱(${object.employee_id.work_email}) - 主题:
合同到期提醒:${object.employee_id.name}的合同将于${object.date_end}到期 - 邮件正文(示例):
您好,
员工${object.employee_id.name}的劳动合同将于${object.date_end}到期,请及时跟进续约或其他相关事宜。
合同名称:${object.name}
入职日期:${object.date_start}
- 保存模板,记住模板名称或者后续会用到的XML ID。
3. 创建计划动作(定期检查并发送提醒)
这是核心步骤,通过计划动作每天自动查询符合条件的合同并发邮件:
- 进入
设置 > 技术 > 自动化 > 计划动作,点击创建 - 填写计划动作信息:
- 名称:合同到期前30天自动提醒
- 模型:员工合同(hr.contract)
- 执行频率:每天(建议选凌晨时段,比如02:00,避免影响系统使用)
- 执行动作:Python代码
- 在
Python代码框里粘贴以下代码(注意替换邮件模板的查找方式):from datetime import datetime, timedelta from openerp import fields # 计算时间范围:今天到30天后的日期 today = datetime.today().date() reminder_date = today + timedelta(days=30) # 查询符合条件的合同:生效中、到期日在今天到30天后之间、未发送过提醒 target_contracts = self.env['hr.contract'].search([ ('state', '=', 'open'), # 这里的"open"是生效中合同的状态,根据你的实际配置调整 ('date_end', '>=', fields.Date.to_string(today)), ('date_end', '<=', fields.Date.to_string(reminder_date)), ('reminder_sent', '=', False) ]) # 加载邮件模板(这里用模板名称查找,也可以用XML ID) email_template = self.env['email.template'].search([('name', '=', '员工合同到期提醒')], limit=1) # 给每个符合条件的合同发邮件,并标记已发送 for contract in target_contracts: if email_template: email_template.send_mail(contract.id, force_send=True) contract.write({'reminder_sent': True})
- 保存计划动作,你可以手动点击
执行按钮测试一下,看看是否能触发邮件。
注意事项
- 确认合同的
state字段值:不同的Odoo配置里,生效中合同的状态可能不是open,你可以先查看现有合同的状态值,再修改代码里的条件。 - 测试时可以创建一个测试合同,把
date_end设为30天内的日期,然后手动执行计划动作,检查邮箱是否收到提醒。 - 如果不需要标记已发送(比如允许每天发提醒),可以去掉代码里的
reminder_sent相关逻辑,但不建议这么做,避免重复骚扰。
内容的提问来源于stack exchange,提问作者Dhouha
相关产品推荐
相关产品推荐

