python odoo框架之新增 「待審核」訂單狀態

python odoo框架之新增 「待審核」訂單狀態

來自專欄 一隻爬蟲的轉行之路

參考文檔:openerp學習筆記 視圖繼承(tree、form、search)

實現最終的效果:

從日常生活的場景出發就是:

有人和你借錢,你先確定一下金額,再借給他的這麼一個過程。這裡增加的小功能,也就是雙方先確定下金額態度 的一個狀態。

從odoo框架的業務的工作流去理解:

在draft(新建訂單)——router(訂單中間狀態)的節點裡,新增加一個狀態「waiting-approval」(待審核)的這麼一個節點。其他功能正常運行。

思路:

1)首先通過繼承 添加一個新的狀態 waitingapproval

2)實現從draft——waitingapproval狀態

3)實現不影響其他節點,從 waitingapproval狀態——「確認訂單 」按鈕的 功能

註:

第三步 浪費了較多的時間,原來思考是重寫waiting的狀態方法,會破壞原先的所有功能結構,方法行不得,既然在不影響其他任何功能的前提下,就直接在 waiting跳轉 到「確認訂單」時,用replace去替換覆蓋原先的所有功能。

(以上是今天工作的思考部分,其實也浪費了不少時間,依舊是記錄思考問題的過程,代碼反而超級簡單)

代碼部分:

No1:增添一個新的狀態 waitingapproval

class SaleInherit(models.Model): _inherit = sale.order state = fields.Selection(selection_add=[(waitingapproval,u待審核)])

這是odoo11.0的寫法,真的很簡潔。

(以下順帶記錄下odoo8.0的寫法)

class SaleInherit(osv.Model): _inherit = sale.order _columns = { date_approve: fields.datetime(u審批日期, readonly=True, select=True, copy=False), state: fields.selection([(draft, Draft Quotation), (sent, Quotation Sent), (cancel, Cancelled), (waiting_date, Waiting Schedule), (waitingapproval, u待批准), # 新增 (progress, Sales Order), (manual, Sale to Invoice), (shipping_except, Shipping Exception), (invoice_except, Invoice Exception), (done, Done)], required=True, track_visibility=onchange), }

哈哈,odoo8.0的代碼量還是很經典的。

新增加完state後,記得繼承視圖。

<?xml version="1.0" encoding="utf-8"?><odoo> <record id="view_sale_order_approval_inherit" model="ir.ui.view"> <field name="name">View.Sale.Order.Approval.inherit</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale.view_order_form"/># form視圖 <field name="arch" type="xml"> #xpath定位,# button按鈕執行方法 <xpath expr="//button[@name=print_quotation]" position="after"> <button name="action_waitingapproval" states="draft,sent,sale" string="批准訂單" type="object"/> </xpath> </field> </record></odoo>

NO2:實現從draft——waitingapproval

這部分的功能就是

<button name="action_waitingapproval" states="draft,sent,sale" string="批准訂單" type="object"/>

的 button 出發函數 action_waitingapproval來實現。

@api.multi def action_waitingapproval(self): # 1)跳轉到待審核狀態, 2)『so』開頭的訂單才可以進入待審核狀態 if self.name[:2] == SO: self.write({state:waitingapproval}) return True else: return self.write({state: sale})

writer 方法,相當於資料庫里的uodate更新操作

獲取「SO」開頭 的訂單,直接self.name就獲取到了name的值

[:2]代表獲取前2位字元串

No3:從waitingapproval——「確認 訂單 "狀態

繼承視圖裡 ,直接用replace方法

<xpath expr="//button[@name=action_confirm]" position="replace"> <button name="action_confirm" states="waitingapproval" type = "object" string = "確認訂單" class = "oe_hightlight"/> </xpath>

「action_confirm「執行的函數就是」確認訂單「的狀態。

有瑕疵,因為我的xpath定位的不準,只能定位到第一個元素,其實真正需要定位的replace的是第二個action_confirm的方法。


推薦閱讀:

UG軟體編程常見的一個問題 十年經驗的師傅也會遇到
1.7 操作系統管理硬體
Python 實現用戶註冊 登錄

TAG:Python | Python教程 | 自學編程 |