今天要動手把我們的 Parts Inventory 模組流程拉起來,
從「零件」到「庫存異動」,規劃一個能跑起來的入庫 / 出庫機制。
雖然跟官方 Inventory 模組比起來還很陽春,但重點是讓我們熟悉 ORM + 商業邏輯設計。
到目前為止,我們只能單純紀錄一個零件(Part),
但沒有流程來管理它的存量增減。
換句話說,零件數量只能手動改,完全不可靠。
所以 Day 10 的目標,就是要設計 Stock Move 機制:
Part
name
, code
, description
, quantity
, team_id
, active
StockMove
part_id
, move_type
, quantity
, note
, date
, state
重點是:
part_id
→ 連到零件move_type
→ 入庫 or 出庫quantity
→ 異動數量state
→ draft
/ confirmed
/ cancel
draft
active
?這是一個 Odoo 的慣例:
active
設成 False,Odoo 就會在 UI 裡自動幫你隱藏掉。Odoo 的 active
欄位,就像是開關一樣:
Part = env["parts.inventory.part"]
# 預設只抓 active=True
parts = Part.search([])
print("正常看到的:", parts.mapped("name"))
# 把 active_test 關掉,就能看到所有資料
all_parts = Part.with_context(active_test=False).search([])
print("全部資料:", [(p.name, p.active) for p in all_parts])
# 專門看封存的
archived = Part.with_context(active_test=False).search([("active", "=", False)])
print("封存的:", archived.mapped("name"))
所以咧,Odoo 只是把 ("active", "=", True)
默默幫你塞進搜尋條件,
平常看到的都是「活著的」資料。
要翻出封存的,就用 Archived 選項 或 active_test=False
。