Довольно удобно, когда при создании заказа можно быстро найти нужного партнера.
Изменнеие поиска на уровне модели
Так как наш партнер или покупатель в Odoo относиться к сущности res.partner, мы можем переопределить поиск по данным этой модели. Для этого, расширяем модель следующим образом:
# Код из модуля OCA/partner-contact: https://github.com/OCA/partner-contact/blob/11.0/partner_phone_search/models/res_partner.py class ResPartner(models.Model): _inherit = 'res.partner' @api.model def name_search(self, name, args=None, operator='ilike', limit=100): if not args: args = [] if name: domain = ['|', '|', ('phone', operator, name), ('mobile', operator, name), ('email', operator, name) ] partners = self.search(domain + args, limit=limit,) res = partners.name_get() if limit: limit_rest = limit - len(partners) else: limit_rest = limit if limit_rest or not limit: args += [('id', 'not in', partners.ids)] res += super(ResPartner, self).name_search( name, args=args, operator=operator, limit=limit_rest) return res
Код работает на Odoo 11 & 12. На других версиях не тестировался.
Оригинальный вариант name_search можно посмотреть по ссылке https://github.com/odoo/odoo/blob/a12e29c963201add0ea6b15a1e8e19a6af1db032/odoo/addons/base/models/res_partner.py.
По умолчанию, в Odoo поиск ищет по имени клиента. Если посмотреть в view, за поиск в поле customer отвечает следующий код:
<field name="partner_id" widget="res_partner_many2one" domain="[('customer','=',True)]" context="{'search_default_customer':1, 'show_address': 1, 'show_vat': True}" options="{"always_reload": True}"/>Его можно заменить:
<field name="partner_id" filter_domain="['|', '|', ('phone', 'ilike', self), ('mobile', 'ilike', self), ('name', 'ilike', self)]" string="Покупатель"/>В результате, получим аналогичное поле для поиска, но оно будет учитывать номера телефона (mobile, phone). Из минусов — в поиске отображаются все контакты, которые подходят под критерий поиска.
Чтобы этого измежать, добавим еще один фильтр:
<field name="partner_id" filter_domain="['&',('customer','=',True), ('|', '|',('phone', 'ilike', self), ('mobile', 'ilike', self), ('name', 'ilike', self))]" string="Покупатель"/>В XML амперсанд записывается иначе. Не забываем использовать предопределенные сущности в XML.
полный список: https://en.wikipedia.org
Готовые модули
В магазине Odoo есть несколько модулей, которые позволяют добавить подобный функционал. К сожалению, для Odoo 12 подобный модуль стоит 40$ (Partner Search by Phone). Есть более дешевый плагин — Partner Search by Number за 8€.
Для 10 версии доступен бесплатный плагин. Для 11 версии можно попробовать плагин из OCA: github.com/OCA/partner-contact/tree/11.0/partner_phone_search.