0

我一直在开发很多模块并疯狂地实现 openerp。但我被困在一个功能实现中。

我已经安装了模块 crm_todo,它是为了在 crm 上有任务,这个模块在销售下添加了“我的任务”菜单。

我需要创建一个带有名为“部门任务”的域过滤器的新菜单,其中将向特定销售团队的所有成员显示所有任务。任务分配给用户 A;用户 A 属于销售团队 A;销售团队 A 还有 2 名成员。这个新菜单必须将分配给用户 A 的任务列出给销售团队 A 的所有成员。

我试图处理 field.function,但出了点问题。我正在尝试使用 openerp Action Windows 菜单在 act_window 上应用域并将其分配给新菜单。

4

1 回答 1

0

将登录用户销售团队指定为域参数是不可能的,但我们可以通过另一种方式来实现这一点。IE; 在我看来,我将域指定为:

<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 回答