Справка по фильтру домена Openerp по задачам, связанным с отделом продаж

Я разрабатывал много модулей и внедрял openerp для дикой природы. Но я застрял в функциональной реализации.

Я установил модуль crm_todo, он предназначен для выполнения задач в crm, этот модуль добавляет меню «Мои задачи» в разделе «Продажи».

Мне нужно создать новое меню с фильтром домена под названием «Задачи отдела», где будут показаны все задачи всем членам определенной группы продаж. Задача назначена пользователю A; Пользователь A принадлежит группе продаж A; В отдел продаж А входят еще 2 члена. В этом новом меню должны быть перечислены задачи, назначенные пользователю A для всех членов группы продаж A.

Я пытался сделать с field.function, но что-то не так. Я пытаюсь применить домен к act_window с помощью меню Windows действий openerp и назначить его новому меню.


person Santiago Munoz    schedule 30.10.2013    source источник
comment
что-то не так, не могли бы вы уточнить, что пошло не так, например, сообщение об ошибке или дополнительную информацию об ошибке, которую вы получаете. Спасибо.   -  person M.Ali    schedule 30.10.2013
comment
Можете ли вы показать нам, что вы делаете, в виде небольшого фрагмента, чтобы мы могли определить вашу проблему.   -  person Pooja    schedule 31.10.2013


Ответы (1)


Указать команду продаж авторизованных пользователей в качестве параметра домена невозможно, но есть другой способ добиться этого. т.е. на мой взгляд, я указываю домен как:

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

Это фильтрует результат задачи, который будет отображаться каждому пользователю на основе его / ее команды продаж.

Надеюсь это поможет.....

person Prajul P T    schedule 31.10.2013
comment
Идеальный ответ, я применяю два типа фильтров: один для связанных элементов, а другой для section_ids. Единственное, что вам нужно сделать, это создать имена функциональных клавиш и заменить их значение на наследование ir_action_window. Спасибо - person Santiago Munoz; 01.11.2013