Odoo 销售单为什么一会儿 To Invoice、一会儿又变 No:invoice_status、qty_to_invoice 与交付边界讲透
从 sale 与 sale_stock 源码讲清 Odoo 销售订单和销售订单行的 invoice_status 到底怎么算,为什么按订购、按交付、down payment、特殊行与已完成 move 会让状态看起来忽左忽右。
ARTICLE LIBRARY
持续记录源码理解、业务流程、模块开发经验与踩坑总结。
从 sale 与 sale_stock 源码讲清 Odoo 销售订单和销售订单行的 invoice_status 到底怎么算,为什么按订购、按交付、down payment、特殊行与已完成 move 会让状态看起来忽左忽右。
从 Odoo ORM 源码讲清 new() 产生的伪记录到底是什么,为什么它能触发 onchange、计算字段和 x2many 交互,却并没有真正写入数据库,以及 _convert_to_write 在保存前扮演什么角色。
从官方源码讲清 Odoo 打开向导或新建表单时,默认值为何会来自 context、ir.default、field.default,active_model/active_id/active_ids 又是怎样参与初始化的。
很多人以为 Odoo 活动问卷只是给报名表多加几个字段。实际上,event.question、event.question.answer、event.registration.answer 和事件上的 general / specific questions 共同组成了一套独立的数据模型。看懂它,才能理解为什么有些问题按订单问一次,有些问题却要对每个参会人分别作答。
很多人以为 Odoo Activity 的“下一步”只是界面上的推荐按钮。实际上,mail.activity.type 里 suggest 和 trigger 是两套完全不同的机制:一套负责给人选项,一套负责在完成时自动长出下一条。看懂这条链,才能把提醒真正配置成流程。
很多人以为 Odoo 的活动邮件就是“设个模板,到点群发”。但 event.mail、event.mail.registration、event.mail.slot 和 event_mail_scheduler 实际拼出了一条会分模式、分场次、分批次、可续跑的调度链。看懂它,活动提醒才不会发早、发漏或一次打爆系统。