催交确认

Odoo 催交期为什么不是群发提醒:receipt reminder、acknowledged 与供应商确认链讲透

很多人以为 Odoo 的采购提醒邮件只是按日期群发催一下。实际上源码还同时看 acknowledged、receipt_reminder_email、计划收货日期,以及订单里是否全是服务。

采购
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 6 阅读

先说结论

Odoo 的采购提醒,不是“到点就给所有供应商发封邮件”。

/home/ubuntu/odoo-temp/addons/purchase/models/purchase_order.py 里,提醒链路至少同时看:

  • 订单是否 purchase
  • 是否 acknowledged = False
  • 是否启用了 receipt_reminder_email
  • 计划收货日期是否到了“提前 X 天提醒”的窗口
  • 订单是否不全是服务

所以:

采购提醒邮件的本质不是群发通知,而是围绕“供应商是否已确认收货承诺”做的节奏控制。


acknowledged 这个字段比很多人想的重要

源码里 purchase.order 有个字段:

  • acknowledged

帮助文本也写得很明确:它表示供应商已经确认收到了采购单。

这意味着 Odoo 在意的不是“邮件发没发”,而是:

  • 供应商是否对这张采购单做过确认

一旦供应商已确认,这张单就不应该继续被当作“还需要催确认”的对象。

这就是提醒机制背后的业务语义。


_get_orders_to_remind() 怎样筛单

源码里的 _get_orders_to_remind() 很值得研究。它会筛出:

  • partner_id 不为空
  • state = 'purchase'
  • acknowledged = False
  • receipt_reminder_email = True

然后还会过滤掉一种情况:

  • 订单行全是 service

这说明 Odoo 认为:

  • 对真正需要收货承诺的采购单,提醒才有意义
  • 如果整张单都是服务,采购提醒不该简单套用实物到货逻辑

这跟前文讲的“服务采购收货语义不同”其实是一脉相承的。


提醒不是只看今天,而是看“提前几天”

_send_reminder_mail() 里还有一个很关键的判断:

  • date_planned - reminder_date_before_receipt == 今天

也就是说,提醒逻辑不是在到货当天才动,而是按供应商或订单设定的“提前几天”窗口发出。

这很像采购执行里的真实节奏:

  • 不是等逾期了再追
  • 而是在预期到货前先要一个确认

因此它更接近“催交确认”,不是“逾期报警”。


供应商和公司维度也参与了默认值传递

purchase.order 上,receipt_reminder_emailreminder_date_before_receipt 是根据供应商、公司维度算出来的。

res.partner 里,这两个字段又是 company_dependent

这意味着:

  • 同一个供应商
  • 在不同公司下
  • 可以有不同的提醒策略

这对于集团型、多公司采购特别重要,因为供应商协同习惯未必跨公司一致。


为什么很多团队会误配

最常见的误配有三类:

1)把提醒理解成“催到货”

其实源码更偏“催确认收货承诺”。

2)以为供应商确认和提醒无关

不对。acknowledged 正是提醒是否继续触发的重要开关。

3)把服务采购也纳入同样提醒节奏

源码已经明确表达:全服务单不应简单套这套逻辑。


实战排错建议

如果你发现提醒邮件没发,或者感觉发得不对,先查:

  1. 订单是否已在 purchase 状态
  2. acknowledged 是否已经变成 True
  3. receipt_reminder_email 是否启用
  4. reminder_date_before_receipt 是几天
  5. date_planned 是否刚好落在提醒窗口
  6. 是否整张单都是服务

不要一上来就怀疑邮件模板。


一句话记忆

Odoo 采购提醒的重点不是“定时发邮件”,而是“在到货前,对尚未确认的采购承诺做节奏化跟进”。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。