Odoo 采购收货完成时,库存、收货数量和采购单状态是怎么回写的?
很多人以为采购单收货“点一下 Validate 就结束了”,其实背后是一整条从采购单、收货单、stock move 到 qty_received 回写的联动链。本文把这条链拆开讲清。
TOPIC PICKS
很多人以为采购单收货“点一下 Validate 就结束了”,其实背后是一整条从采购单、收货单、stock move 到 qty_received 回写的联动链。本文把这条链拆开讲清。
可以顺着继续读的相邻方向
基于 account_budget_purchase 与 account_budget 讲清采购行怎样先匹配预算行,再把分析计划维度带进预算报表钻取,而不是直接在采购单上看一行余额。
approvals_purchase 没把数据校验压到最后一步。action_confirm() 先拦空采购请求,action_approve() 再拦没有 product_id 的产品行,形成“确认可建单、批准可采购”的两道闸门。
purchase.order.write() 在状态变化时会反查关联的 approval.product.line,把 RFQ 的旧状态、新状态和受影响商品汇总回审批请求 chatter,让审批链路不再只停留在“已创建采购单”。
采购审批取消不是简单改状态。_cancel_approval_request() 会区分 RFQ 仍是 draft 还是已离开草稿:前者自动减量或删单,后者保留采购事实并创建人工处理提醒。
action_create_purchase_orders 的重点不是“创建采购单”,而是按公司、供应商、币种和产品采购单位决定复用哪张 draft RFQ、增量哪一行,并把多个审批请求名串到 origin 里。
approvals_purchase 真正难的不是“审批通过后生成 RFQ”,而是 approval.product.line 先把数量换到采购单位,再按公司与数量选择 seller,最后用 has_no_seller 和 _check_products_vendor 把错误挡在前面。