Odoo 18: Как программно фильтровать аналитические учетные записи в виджетеanalytic_distribution?Python

Программы на Python
Anonymous
Odoo 18: Как программно фильтровать аналитические учетные записи в виджетеanalytic_distribution?

Сообщение Anonymous »

Я работаю над Odoo 18 Enterprise и пытаюсь отфильтровать аналитические учетные записи, отображаемые в виджетеanalytic_distribution в строках заказа на покупку.
Настройка
  • Модель A: global.budget содержит список разрешенных аккаунтов account.analytic.account.
  • Модель B: Purchase.order имеет поле общий_бюджет_ид, указывающий на модель A.
  • Цель: при нажатии на виджет аналитики_распределения в строке заказа на покупку в результатах поиска/выбора «Аналитическая учетная запись» должны отображаться только учетные записи, определенные в связанном бюджете.
Проблема
В Odoo 18 виджет аналитики_распределения похоже, обходит стандартные перехватчики Python для поиска. Я безуспешно пробовал следующее:
Что мы пробовали
  • Внедрение контекста в XML:

Код: Выделить всё




{
'allowed_analytic_account_ids': parent.allowed_analytic_account_ids
}

  • Переопределение _search и name_search в account.analytic.account:
    Я добавил операторы печати в _search и name_search, чтобы поймать filter_budget_id из контекста. Однако эти методы никогда не срабатывают при поиске учетной записи во всплывающем окне виджета распространения.

Код: Выделить всё

@api.model
def search(self, domain, offset=0, limit=None, order=None):
allowed_ids = self.env.context.get('allowed_analytic_account_ids')
if allowed_ids:
domain = [('id', 'in', allowed_ids)] + list(domain)
print("Search domain:", domain)
return super().search(domain, offset=offset, limit=limit, order=order)

@api.model
def name_search(self, name='', args=None, operator='ilike', limit=100):
args = args or []
allowed_ids = self.env.context.get('allowed_analytic_account_ids')
if allowed_ids:
args = [('id', 'in', allowed_ids)] + args
print(args)
return super().name_search(
name=name, args=args, operator=operator, limit=limit
)
Мой вопрос
Виджет аналитического_распределения (который использует определенный компонент OWL в версии 18), похоже, использует другой вызов RPC или определенный маршрут для получения учетных записей.
  • Какой метод мне следует переопределить в Odoo 18, чтобы фильтровать учетные записи, предлагаемые этим конкретным виджетом?
  • Есть ли конкретный ключ параметров в XML для передачи домена в подполя виджета распространения?
Среда: Odoo 18.0 Enterprise.
Любая помощь или указатель на правильный метод/перехват для переопределения будем очень признательны!
Заранее спасибо.

Вернуться в «Python»