You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:29:01