2017-03-01 50 views
0

我需要禁止用戶確認銷售訂單(單擊確認銷售按鈕時發生的操作:銷售 - >銷售訂單 - >選擇訂單)。因此,我重寫確認銷售的操作,並添加一個引發驗證錯誤的條件,因此如果條件無效(例如,沒有名稱的產品的訂單行),超級將不會被調用。odoo 8 - 銷售 - 在「確認銷售」按鈕上添加約束條件

但是這個問題發生在S.O. - 編輯模式並且當點擊確認時,在執行以下覆蓋功能之前執行對數據庫的插入(在sale_order_line中插入)。

# the inherited class 
class sales_warning(models.Model): 
    _inherit = "sale.order" 

    @api.multi 
    def action_button_confirm(self): 
     print "begin overwritten action_button_confirm()" 
     if(ForbidCondition==True): 
      raise ValidationError("You cannot confirm a S.O...") 
     else: 
      res = super(sales_warning, self).action_button_confirm()   
      return res 

日誌示出了寫操作之前調用覆蓋函數:

* CRM WERKZEUG:.. 「POST /web/dataset/call_kw/sale.order/write HTTP/1.1」 200

開始覆蓋action_button_confirm()*

問:有沒有辦法添加一個約束將任何其他行動之前推出,如上面的寫,或方式來增加預調用的函數是checke d每個訂單項是否有有效的商品名稱? best

+0

什麼是確認按鈕工作流程中的條件?那麼隱藏按鈕呢? – CZoellner

+0

我已經做到了,我在編輯模式下隱藏了按鈕。在下面檢查我的答案。並點擊如果你覺得它有用:) – Salim

回答

0

在Odoo中,所有按鈕操作將在本地寫入方法後調用。如果你想添加約束,當用戶點擊任何按鈕時,使用'@ api.constrains'引發錯誤彈出框

+0

我試過了@constraints,但它會在SO記錄集上的所有操作上調用:確認銷售和保存動作和重複所以。但我只需要處理確認的銷售行爲,因爲我不想禁止使用無效的產品名稱來創建SO。我試圖從按鈕發送一個參數到約束,以處理這個特定的情況,但它不工作 – Salim

+0

如果是這樣的話,你可以使用按鈕的上下文,當按鈕被點擊時,檢查後端的上下文和提高驗證。 – thangtn

+0

我嘗試了上下文(

1

由於錯誤(即在編輯模式下確認SO時調用寫入功能)僅在Edit模式,請注意,在只讀模式下,當保存SO時,寫操作不會被調用(看起來Odoo認爲在銷售訂單行只讀模式下沒有更新),所以我選擇通過添加oe_read_only來隱藏確認按鈕CSS類的按鈕:

<xpath expr="//button[@name='action_button_confirm']" position="attributes">   

     <attribute name="class">oe_read_only</attribute>    

</xpath> 

簡要新聞:

-SO(塞爾順序)在只讀模式:確認按鈕可見並不會做一個更新(更新sale_order_line)到DB一旦它的點擊,只有動作action_button_confirm被稱爲

在編輯模式下-SO:隱藏,以防止更新sale_order_line