0

私は多くのモジュールを開発し、openerp をワイルドに実装してきました。しかし、私は機能的な実装で立ち往生しています。

モジュール crm_todo をインストールしました。これは、crm でタスクを実行するためのものです。このモジュールは、Sales の下に「My Tasks」メニューを追加します。

特定の営業チームのすべてのメンバーにすべてのタスクを表示する「Department Tasks」というドメイン フィルターを使用して、新しいメニューを作成する必要があります。タスクはユーザー A に割り当てられます。ユーザー A は営業チーム A に属しています。営業チーム A には、あと 2 人のメンバーがいます。この新しいメニューでは、ユーザー A に割り当てられたタスクを営業チーム A のすべてのメンバーにリストする必要があります。

私はfield.functionでやろうとしていましたが、何かが間違っています. openerp アクション Windows メニューを使用して act_window にドメインを適用し、それを新しいメニューに割り当てようとしています。

4

1 に答える 1

0

ログイン ユーザーの販売チームをドメイン パラメーターとして指定することはできませんが、これを実現する別の方法があります。すなわち; 私のビューアクションでは、ドメインを次のように指定します。

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

ここで、user_id はタスクの担当ユーザーです。ir.actions.act_window の読み取り関数を継承し、読み取り結果のドメインに user_sale_team() が存在するかどうかを確認し、これをログイン ユーザーの販売チーム ID に置き換えます。これは次のように実行できます。

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()

これにより、営業チームに基づいて各ユーザーに表示されるタスクの結果がフィルタリングされます。

お役に立てれば.....

于 2013-10-31T12:15:54.917 に答える