Browse Source

Merge pull request #1325 from adhoc-dev/11.0-mig-base_name_search_improved

[MIG] base_name_search_improved: Migration to 11.0
pull/1336/head
Moises Lopez - https://www.vauxoo.com/ 6 years ago
committed by GitHub
parent
commit
fcc806ee9d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 141
      base_name_search_improved/README.rst
  2. 3
      base_name_search_improved/__init__.py
  3. 18
      base_name_search_improved/__manifest__.py
  4. 25
      base_name_search_improved/i18n/base_name_search_improved.pot
  5. 30
      base_name_search_improved/i18n/ca.po
  6. 30
      base_name_search_improved/i18n/de.po
  7. 26
      base_name_search_improved/i18n/en.po
  8. 30
      base_name_search_improved/i18n/es.po
  9. 30
      base_name_search_improved/i18n/es_ES.po
  10. 29
      base_name_search_improved/i18n/eu.po
  11. 29
      base_name_search_improved/i18n/fi.po
  12. 29
      base_name_search_improved/i18n/fr.po
  13. 30
      base_name_search_improved/i18n/hr.po
  14. 31
      base_name_search_improved/i18n/hr_HR.po
  15. 29
      base_name_search_improved/i18n/it.po
  16. 30
      base_name_search_improved/i18n/nb_NO.po
  17. 29
      base_name_search_improved/i18n/nl.po
  18. 31
      base_name_search_improved/i18n/pt_BR.po
  19. 30
      base_name_search_improved/i18n/sl.po
  20. 30
      base_name_search_improved/i18n/tr.po
  21. 30
      base_name_search_improved/i18n/tr_TR.po
  22. 30
      base_name_search_improved/i18n/zh_CN.po
  23. BIN
      base_name_search_improved/images/image0.png
  24. BIN
      base_name_search_improved/images/image1.png
  25. BIN
      base_name_search_improved/images/image2.png
  26. 3
      base_name_search_improved/models/__init__.py
  27. 80
      base_name_search_improved/models/ir_model.py
  28. 10
      base_name_search_improved/readme/CONFIGURE.rst
  29. 1
      base_name_search_improved/readme/CONTRIBUTORS.rst
  30. 3
      base_name_search_improved/readme/CREDITS.rst
  31. 35
      base_name_search_improved/readme/DESCRIPTION.rst
  32. 4
      base_name_search_improved/readme/ROADMAP.rst
  33. 1
      base_name_search_improved/readme/USAGE.rst
  34. BIN
      base_name_search_improved/static/description/icon.png
  35. 4
      base_name_search_improved/tests/__init__.py
  36. 53
      base_name_search_improved/tests/test_name_search.py
  37. 21
      base_name_search_improved/views/ir_model_views.xml

141
base_name_search_improved/README.rst

@ -0,0 +1,141 @@
====================
Improved Name Search
====================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github
:target: https://github.com/OCA/server-tools/tree/11.0/base_name_search_improved
:alt: OCA/server-tools
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-tools-11-0/server-tools-11-0-base_name_search_improved
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/149/11.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
Extends the name search feature to use additional, more relaxed
matching methods, and to allow searching into configurable additional
record fields.
The name search is the lookup feature to select a related record.
For example, selecting a Customer on a new Sales order.
For example, typing "john brown" doesn't match "John M. Brown".
The relaxed search also looks up for records containing all the words,
so "John M. Brown" would be a match.
It also tolerates words in a different order, so searching
for "brown john" also works.
.. figure:: https://raw.githubusercontent.com/OCA/server-tools/11.0/base_name_search_improved/images/image0.png
Additionally, an Administrator can configure other fields to also lookup into.
For example, Customers could be additionally searched by City or Phone number.
.. figure:: https://raw.githubusercontent.com/OCA/server-tools/11.0/base_name_search_improved/images/image2.png
How it works:
Regular name search is performed, and the additional search logic is only
triggered if not enough results are found.
This way, no overhead is added on searches that would normally yield results.
But if not enough results are found, then additional search methods are tried.
The specific methods used are:
- Try regular search on each of the additional fields
- Try ordered word search on each of the search fields
- Try unordered word search on each of the search fields
All results found are presented in that order,
hopefully presenting them in order of relevance.
**Table of contents**
.. contents::
:local:
Configuration
=============
The fuzzy search is automatically enabled on all Models.
Note that this only affects typing in related fields.
The regular ``search()``, used in the top right search box, is not affected.
Additional search fields can be configured at Settings > Technical > Database > Models,
using the "Name Search Fields" field.
.. figure:: https://raw.githubusercontent.com/OCA/server-tools/11.0/base_name_search_improved/images/image1.png
:alt: Name Search Fields
:width: 600 px
Usage
=====
Just type into any related field, such as Customer on a Sale Order.
Known issues / Roadmap
======================
* Also use fuzzy search, such as the Levenshtein distance:
https://www.postgresql.org/docs/9.5/static/fuzzystrmatch.html
* The list of additional fields to search could benefit from caching, for efficiency.
* This feature could also be implemented for regular ``search`` on the ``name`` field.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-tools/issues/new?body=module:%20base_name_search_improved%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Daniel Reis
Contributors
~~~~~~~~~~~~
* Daniel Reis <https://github.com/dreispt>
Other credits
~~~~~~~~~~~~~
The development of this module has been financially supported by:
* Odoo Community Association
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/server-tools <https://github.com/OCA/server-tools/tree/11.0/base_name_search_improved>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

3
base_name_search_improved/__init__.py

@ -0,0 +1,3 @@
# Copyright 2016 Daniel Reis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import models

18
base_name_search_improved/__manifest__.py

@ -0,0 +1,18 @@
# Copyright 2016 Daniel Reis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Improved Name Search',
'summary': 'Friendlier search when typing in relation fields',
'version': '11.0.1.0.0',
'category': 'Uncategorized',
'website': 'https://github.com/OCA/server-tools',
'author': 'Daniel Reis, Odoo Community Association (OCA)',
'license': 'AGPL-3',
'data': [
'views/ir_model_views.xml',
],
'depends': [
'base',
],
'installable': True,
}

25
base_name_search_improved/i18n/base_name_search_improved.pot

@ -0,0 +1,25 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr ""
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

30
base_name_search_improved/i18n/ca.po

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-19 17:59+0000\n"
"PO-Revision-Date: 2018-07-04 10:03+0000\n"
"Last-Translator: mtbochaca <mtbochaca@gmail.com>\n"
"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.0.1\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Models "
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr "Camps de cerca de nom"

30
base_name_search_improved/i18n/de.po

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# Rudolf Schnapka <rs@techno-flex.de>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-03-04 07:38+0000\n"
"PO-Revision-Date: 2017-03-04 07:38+0000\n"
"Last-Translator: Rudolf Schnapka <rs@techno-flex.de>, 2017\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modelle"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr "Felder für Bezeichnungssuche"

26
base_name_search_improved/i18n/en.po

@ -0,0 +1,26 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-06-17 02:42+0000\n"
"PO-Revision-Date: 2016-06-17 02:42+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Models"
#. module: base_name_search_improved
#: field:ir.model,name_search_ids:0
msgid "Name Search Fields"
msgstr "Name Search Fields"

30
base_name_search_improved/i18n/es.po

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# Pedro M. Baeza <pedro.baeza@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-23 21:53+0000\n"
"PO-Revision-Date: 2016-12-23 21:53+0000\n"
"Last-Translator: Pedro M. Baeza <pedro.baeza@gmail.com>, 2016\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modelos"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr "Campos de la búsqueda por nombre"

30
base_name_search_improved/i18n/es_ES.po

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# Fernando Lara <gennesis45@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-16 10:39+0000\n"
"PO-Revision-Date: 2017-02-16 10:39+0000\n"
"Last-Translator: Fernando Lara <gennesis45@gmail.com>, 2017\n"
"Language-Team: Spanish (Spain) (https://www.transifex.com/oca/teams/23907/"
"es_ES/)\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modelos"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr "Campos de búsqueda de nombres"

29
base_name_search_improved/i18n/eu.po

@ -0,0 +1,29 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# Esther Martín Menéndez <esthermartin001@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-22 00:48+0000\n"
"PO-Revision-Date: 2017-02-22 00:48+0000\n"
"Last-Translator: Esther Martín Menéndez <esthermartin001@gmail.com>, 2017\n"
"Language-Team: Basque (https://www.transifex.com/oca/teams/23907/eu/)\n"
"Language: eu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Models"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

29
base_name_search_improved/i18n/fi.po

@ -0,0 +1,29 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-21 00:47+0000\n"
"PO-Revision-Date: 2016-09-21 00:47+0000\n"
"Last-Translator: Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016\n"
"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Mallit"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

29
base_name_search_improved/i18n/fr.po

@ -0,0 +1,29 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-06-17 02:42+0000\n"
"PO-Revision-Date: 2016-06-17 02:42+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modèles"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

30
base_name_search_improved/i18n/hr.po

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# Bole <bole@dajmi5.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-21 00:47+0000\n"
"PO-Revision-Date: 2016-09-21 00:47+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2016\n"
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modeli"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

31
base_name_search_improved/i18n/hr_HR.po

@ -0,0 +1,31 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# Bole <bole@dajmi5.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-21 00:47+0000\n"
"PO-Revision-Date: 2016-09-21 00:47+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2016\n"
"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/"
"hr_HR/)\n"
"Language: hr_HR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modeli"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

29
base_name_search_improved/i18n/it.po

@ -0,0 +1,29 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# Paolo Valier <paolo.valier@hotmail.it>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-06-17 02:42+0000\n"
"PO-Revision-Date: 2016-06-17 02:42+0000\n"
"Last-Translator: Paolo Valier <paolo.valier@hotmail.it>, 2016\n"
"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modelli"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

30
base_name_search_improved/i18n/nb_NO.po

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# Imre Kristoffer Eilertsen <imreeil42@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-17 02:07+0000\n"
"PO-Revision-Date: 2016-12-17 02:07+0000\n"
"Last-Translator: Imre Kristoffer Eilertsen <imreeil42@gmail.com>, 2016\n"
"Language-Team: Norwegian Bokmål (Norway) (https://www.transifex.com/oca/"
"teams/23907/nb_NO/)\n"
"Language: nb_NO\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modeller"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

29
base_name_search_improved/i18n/nl.po

@ -0,0 +1,29 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# lfreeke <lfreeke@therp.nl>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-19 17:59+0000\n"
"PO-Revision-Date: 2017-04-19 17:59+0000\n"
"Last-Translator: lfreeke <lfreeke@therp.nl>, 2017\n"
"Language-Team: Dutch (https://www.transifex.com/oca/teams/23907/nl/)\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modellen"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

31
base_name_search_improved/i18n/pt_BR.po

@ -0,0 +1,31 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# Armando Vulcano Junior <vulcano@uol.com.br>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-10-28 11:05+0000\n"
"PO-Revision-Date: 2017-10-28 11:05+0000\n"
"Last-Translator: Armando Vulcano Junior <vulcano@uol.com.br>, 2017\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
"teams/23907/pt_BR/)\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modelos"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr "Campos de pesquisa de nome"

30
base_name_search_improved/i18n/sl.po

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-17 02:07+0000\n"
"PO-Revision-Date: 2016-12-17 02:07+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modeli"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr "Polja iskanja po imenu"

30
base_name_search_improved/i18n/tr.po

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-29 03:39+0000\n"
"PO-Revision-Date: 2016-12-29 03:39+0000\n"
"Last-Translator: Ahmet Altinisik <aaltinisik@altinkaya.com.tr>, 2016\n"
"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Modeller"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr "İsim Arama Alanları"

30
base_name_search_improved/i18n/tr_TR.po

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# Ozge Altinisik <ozge@altinkaya.com.tr>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-07 04:03+0000\n"
"PO-Revision-Date: 2017-01-07 04:03+0000\n"
"Last-Translator: Ozge Altinisik <ozge@altinkaya.com.tr>, 2017\n"
"Language-Team: Turkish (Turkey) (https://www.transifex.com/oca/teams/23907/"
"tr_TR/)\n"
"Language: tr_TR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "Tipler"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

30
base_name_search_improved/i18n/zh_CN.po

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_name_search_improved
#
# Translators:
# Jeffery Chen Fan <jeffery9@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-17 02:07+0000\n"
"PO-Revision-Date: 2016-12-17 02:07+0000\n"
"Last-Translator: Jeffery Chen Fan <jeffery9@gmail.com>, 2016\n"
"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/"
"zh_CN/)\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: base_name_search_improved
#: model:ir.model,name:base_name_search_improved.model_ir_model
msgid "Models"
msgstr "模型"
#. module: base_name_search_improved
#: model:ir.model.fields,field_description:base_name_search_improved.field_ir_model_name_search_ids
msgid "Name Search Fields"
msgstr ""

BIN
base_name_search_improved/images/image0.png

After

Width: 896  |  Height: 281  |  Size: 16 KiB

BIN
base_name_search_improved/images/image1.png

After

Width: 890  |  Height: 206  |  Size: 11 KiB

BIN
base_name_search_improved/images/image2.png

After

Width: 894  |  Height: 279  |  Size: 15 KiB

3
base_name_search_improved/models/__init__.py

@ -0,0 +1,3 @@
# Copyright 2016 Daniel Reis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import ir_model

80
base_name_search_improved/models/ir_model.py

@ -0,0 +1,80 @@
# Copyright 2016 Daniel Reis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields, api, tools
# Extended name search is only used on some operators
ALLOWED_OPS = {'ilike', 'like'}
@tools.ormcache(skiparg=0)
def _get_rec_names(self):
"List of fields to search into"
model = self.env['ir.model'].search(
[('model', '=', self._name)])
rec_name = [self._rec_name] if bool(self._rec_name) else []
other_names = model.name_search_ids.mapped('name')
return rec_name + other_names
def _extend_name_results(self, domain, results, limit):
result_count = len(results)
if result_count < limit:
domain += [('id', 'not in', [x[0] for x in results])]
recs = self.search(domain, limit=limit - result_count)
results.extend(recs.name_get())
return results
class IrModel(models.Model):
_inherit = 'ir.model'
name_search_ids = fields.Many2many(
'ir.model.fields',
string='Name Search Fields')
@api.model_cr
def _register_hook(self):
def make_name_search():
@api.model
def name_search(self, name='', args=None,
operator='ilike', limit=100):
# Perform standard name search
res = name_search.origin(
self, name=name, args=args, operator=operator,
limit=limit)
enabled = self.env.context.get('name_search_extended', True)
# Perform extended name search
# Note: Empty name causes error on
# Customer->More->Portal Access Management
if name and enabled and operator in ALLOWED_OPS:
# Support a list of fields to search on
all_names = _get_rec_names(self)
base_domain = args or []
# Try regular search on each additional search field
for rec_name in all_names[1:]:
domain = [(rec_name, operator, name)]
res = _extend_name_results(
self, base_domain + domain, res, limit)
# Try ordered word search on each of the search fields
for rec_name in all_names:
domain = [
(rec_name, operator, name.replace(' ', '%'))]
res = _extend_name_results(
self, base_domain + domain, res, limit)
# Try unordered word search on each of the search fields
for rec_name in all_names:
domain = [(rec_name, operator, x)
for x in name.split() if x]
res = _extend_name_results(
self, base_domain + domain, res, limit)
return res
return name_search
for model in self.sudo().search(self.ids or []):
Model = self.env.get(model.model)
if Model is not None:
Model._patch_method('name_search', make_name_search())
return super(IrModel, self)._register_hook()

10
base_name_search_improved/readme/CONFIGURE.rst

@ -0,0 +1,10 @@
The fuzzy search is automatically enabled on all Models.
Note that this only affects typing in related fields.
The regular ``search()``, used in the top right search box, is not affected.
Additional search fields can be configured at Settings > Technical > Database > Models,
using the "Name Search Fields" field.
.. figure:: https://raw.githubusercontent.com/OCA/server-tools/11.0/base_name_search_improved/images/image1.png
:alt: Name Search Fields
:width: 600 px

1
base_name_search_improved/readme/CONTRIBUTORS.rst

@ -0,0 +1 @@
* Daniel Reis <https://github.com/dreispt>

3
base_name_search_improved/readme/CREDITS.rst

@ -0,0 +1,3 @@
The development of this module has been financially supported by:
* Odoo Community Association

35
base_name_search_improved/readme/DESCRIPTION.rst

@ -0,0 +1,35 @@
Extends the name search feature to use additional, more relaxed
matching methods, and to allow searching into configurable additional
record fields.
The name search is the lookup feature to select a related record.
For example, selecting a Customer on a new Sales order.
For example, typing "john brown" doesn't match "John M. Brown".
The relaxed search also looks up for records containing all the words,
so "John M. Brown" would be a match.
It also tolerates words in a different order, so searching
for "brown john" also works.
.. figure:: https://raw.githubusercontent.com/OCA/server-tools/11.0/base_name_search_improved/images/image0.png
Additionally, an Administrator can configure other fields to also lookup into.
For example, Customers could be additionally searched by City or Phone number.
.. figure:: https://raw.githubusercontent.com/OCA/server-tools/11.0/base_name_search_improved/images/image2.png
How it works:
Regular name search is performed, and the additional search logic is only
triggered if not enough results are found.
This way, no overhead is added on searches that would normally yield results.
But if not enough results are found, then additional search methods are tried.
The specific methods used are:
- Try regular search on each of the additional fields
- Try ordered word search on each of the search fields
- Try unordered word search on each of the search fields
All results found are presented in that order,
hopefully presenting them in order of relevance.

4
base_name_search_improved/readme/ROADMAP.rst

@ -0,0 +1,4 @@
* Also use fuzzy search, such as the Levenshtein distance:
https://www.postgresql.org/docs/9.5/static/fuzzystrmatch.html
* The list of additional fields to search could benefit from caching, for efficiency.
* This feature could also be implemented for regular ``search`` on the ``name`` field.

1
base_name_search_improved/readme/USAGE.rst

@ -0,0 +1 @@
Just type into any related field, such as Customer on a Sale Order.

BIN
base_name_search_improved/static/description/icon.png

After

Width: 128  |  Height: 128  |  Size: 9.2 KiB

4
base_name_search_improved/tests/__init__.py

@ -0,0 +1,4 @@
# Copyright 2016 Daniel Reis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import test_name_search

53
base_name_search_improved/tests/test_name_search.py

@ -0,0 +1,53 @@
# Copyright 2016 Daniel Reis
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests.common import TransactionCase, at_install, post_install
@at_install(False)
@post_install(True)
class NameSearchCase(TransactionCase):
def setUp(self):
super(NameSearchCase, self).setUp()
phone_field = self.env.ref('base.field_res_partner_phone')
model_partner = self.env.ref('base.model_res_partner')
model_partner.name_search_ids = phone_field
self.Partner = self.env['res.partner']
self.partner1 = self.Partner.create(
{'name': 'Luigi Verconti',
'customer': True,
'phone': '+351 555 777 333'})
self.partner2 = self.Partner.create(
{'name': 'Ken Shabby',
'customer': True,
'phone': '+351 555 333 777'})
self.partner3 = self.Partner.create(
{'name': 'Johann Gambolputty of Ulm',
'supplier': True,
'phone': '+351 777 333 555'})
def test_RelevanceOrderedResults(self):
"""Return results ordered by relevance"""
res = self.Partner.name_search('555 777')
self.assertEqual(
res[0][0], self.partner1.id,
'Match full string honoring spaces')
self.assertEqual(
res[1][0], self.partner2.id,
'Match words honoring order of appearance')
self.assertEqual(
res[2][0], self.partner3.id,
'Match all words, regardless of order of appearance')
def test_NameSearchMustMatchAllWords(self):
"""Must Match All Words"""
res = self.Partner.name_search('ulm 555 777')
self.assertFalse(res)
def test_MustHonorDomain(self):
"""Must also honor a provided Domain"""
res = self.Partner.name_search('+351', args=[('supplier', '=', True)])
gambulputty = self.partner3.id
self.assertEqual(len(res), 1)
self.assertEqual(res[0][0], gambulputty)

21
base_name_search_improved/views/ir_model_views.xml

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2016 Daniel Reis
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_model_form" model="ir.ui.view">
<field name="name">Add Name Searchable to Models</field>
<field name="model">ir.model</field>
<field name="inherit_id" ref="base.view_model_form"/>
<field name="arch" type="xml">
<field name="state" position="after">
<field name="name_search_ids"
widget="many2many_tags"
domain="[('model_id', '=', id)]"
/>
</field>
</field>
</record>
</odoo>
Loading…
Cancel
Save