2013-10-30 34 views
0

我一直在開發大量模塊併爲野性實施openerp。但我陷入了功能實現。Openerp域名過濾器關於與銷售團隊關聯的任務的幫助

我已經安裝了模塊crm_todo,它用於在crm上執行任務,此模塊在Sales下添加「我的任務」菜單。

我需要創建一個名爲「部門任務」的域名過濾器的新菜單,其中將向特定銷售團隊的所有成員顯示所有任務。該任務被分配給用戶A;用戶A屬於銷售團隊A;銷售團隊A還有2名成員。這個新的菜單必須將分配給用戶A的任務列出給銷售團隊A的所有成員。

我正在嘗試使用field.function,但是出了點問題。我正在嘗試使用openerp Action Windows Menu在act_window上應用域並將其分配給新菜單。

+0

「什麼是錯的」你能來取悅更具體的是什麼出了問題喜歡你所得到的是錯誤的錯誤信息或瞭解更多信息。謝謝。 –

+0

你能告訴我們你在做什麼,以小片段的形式,以便我們可以識別你的問題。 – Pooja

回答

0

將登錄用戶銷售團隊指定爲域參數是不可能的,但還有另一種方法可以實現此目的。即;在我看來我的行動指定的域爲:

<field name="domain">[('user_id.default_section_id', 'in', user_sale_team())]</field> 

其中user_id是任務的負責任的用戶。 現在繼承ir.actions.act_window的讀取函數,並檢查user_sale_team()是否存在於讀取結果的域中,並將其替換爲登錄用戶銷售團隊標識。這可以通過以下方式完成:

class ir_action_window(osv.osv): 
_inherit = 'ir.actions.act_window' 

def read(self, cr, uid, ids, fields=None, context=None, load='_classic_read'): 
    user_pool = self.pool.get('res.users') 
    obj_user = user_pool.browse(cr, uid, uid, context=context) 
    res = super(ir_action_window, self).read(cr, uid, ids, fields=fields, context=context, load=load) 
    if not isinstance(res, list): 
     res = [res] 
    sale_team_id = obj_user.default_section_id and obj_user.default_section_id.id or'' 
    for r in res: 
     mystring = 'user_sale_team()' 
     if mystring in (r.get('domain', '[]') or ''): 
      r['domain'] = r['domain'].replace(mystring, str([sale_team_id])) 
    if isinstance(ids, (int, long)): 
     if res: 
      return res[0] 
     else: 
      return False 
    return res 

ir_action_window() 

此過濾根據其銷售團隊顯示給每個用戶的任務結果。

希望這有助於.....

+0

完美答案,我應用了兩種過濾器,一種用於相關成員,另一種用於section_ids,您唯一要做的就是創建「功能鍵名稱」並將其替換爲ir_action_window的繼承。謝謝 –

+0

樂意幫忙.... –