From e37419addae42dada4dd61529b5739c100c886c6 Mon Sep 17 00:00:00 2001 From: Kitti U Date: Tue, 23 Feb 2021 21:48:29 +0700 Subject: [PATCH] [14.0][MIG] base_name_search_improved --- base_name_search_improved/README.rst | 141 ------------------ base_name_search_improved/__manifest__.py | 4 +- base_name_search_improved/models/ir_model.py | 11 +- .../readme/CONTRIBUTORS.rst | 1 + .../tests/test_name_search.py | 15 +- 5 files changed, 17 insertions(+), 155 deletions(-) delete mode 100644 base_name_search_improved/README.rst diff --git a/base_name_search_improved/README.rst b/base_name_search_improved/README.rst deleted file mode 100644 index 02d5fd46f..000000000 --- a/base_name_search_improved/README.rst +++ /dev/null @@ -1,141 +0,0 @@ -==================== -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 `_. -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 `_. - -Do not contact contributors directly about support or help with technical issues. - -Credits -======= - -Authors -~~~~~~~ - -* Daniel Reis - -Contributors -~~~~~~~~~~~~ - -* Daniel Reis - -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 `_ project on GitHub. - -You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_name_search_improved/__manifest__.py b/base_name_search_improved/__manifest__.py index dec37f5c6..3a7cb9915 100644 --- a/base_name_search_improved/__manifest__.py +++ b/base_name_search_improved/__manifest__.py @@ -3,9 +3,9 @@ { "name": "Improved Name Search", "summary": "Friendlier search when typing in relation fields", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "category": "Uncategorized", - "website": "https://odoo-community.org/", + "website": "https://github.com/OCA/server-tools", "author": "Daniel Reis, Odoo Community Association (OCA), ADHOC SA", "license": "AGPL-3", "data": ["views/ir_model_views.xml"], diff --git a/base_name_search_improved/models/ir_model.py b/base_name_search_improved/models/ir_model.py index 823b00c37..23df8bcd3 100644 --- a/base_name_search_improved/models/ir_model.py +++ b/base_name_search_improved/models/ir_model.py @@ -137,7 +137,8 @@ class Base(models.AbstractModel): # TODO perhaps better to create only the field when enabled on the model smart_search = fields.Char( - compute="_compute_smart_search", search="_search_smart_search", + compute="_compute_smart_search", + search="_search_smart_search", ) def _compute_smart_search(self): @@ -174,7 +175,9 @@ class Base(models.AbstractModel): class IrModel(models.Model): _inherit = "ir.model" - add_smart_search = fields.Boolean(help="Add Smart Search on search views",) + add_smart_search = fields.Boolean( + help="Add Smart Search on search views", + ) name_search_ids = fields.Many2many("ir.model.fields", string="Name Search Fields") name_search_domain = fields.Char() @@ -208,7 +211,7 @@ class IrModel(models.Model): return super(IrModel, self)._register_hook() def toggle_smart_search(self): - """ Inverse the value of the field ``add_smart_search`` on the records - in ``self``. """ + """Inverse the value of the field ``add_smart_search`` on the records + in ``self``.""" for record in self: record.add_smart_search = not record.add_smart_search diff --git a/base_name_search_improved/readme/CONTRIBUTORS.rst b/base_name_search_improved/readme/CONTRIBUTORS.rst index 3b7e3d4cb..afe475f52 100644 --- a/base_name_search_improved/readme/CONTRIBUTORS.rst +++ b/base_name_search_improved/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Daniel Reis +* Kitti U. (migrate to v14) diff --git a/base_name_search_improved/tests/test_name_search.py b/base_name_search_improved/tests/test_name_search.py index 09d6d46b9..3de67ce34 100644 --- a/base_name_search_improved/tests/test_name_search.py +++ b/base_name_search_improved/tests/test_name_search.py @@ -1,15 +1,14 @@ # © 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 +from odoo.tests.common import TransactionCase, tagged -@at_install(False) -@post_install(True) +@tagged("post_install", "-at_install") class NameSearchCase(TransactionCase): def setUp(self): super(NameSearchCase, self).setUp() - phone_field = self.env.ref("base.field_res_partner_phone") + 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 model_partner.add_smart_search = True @@ -19,16 +18,16 @@ class NameSearchCase(TransactionCase): model_partner.name_search_domain = "[('parent_id', '=', False)]" self.Partner = self.env["res.partner"] self.partner1 = self.Partner.create( - {"name": "Luigi Verconti", "customer": True, "phone": "+351 555 777 333"} + {"name": "Luigi Verconti", "phone": "+351 555 777 333"} ) self.partner2 = self.Partner.create( - {"name": "Ken Shabby", "customer": True, "phone": "+351 555 333 777"} + {"name": "Ken Shabby", "phone": "+351 555 333 777"} ) self.partner3 = self.Partner.create( { "name": "Johann Gambolputty of Ulm", - "supplier": True, "phone": "+351 777 333 555", + "barcode": "1111", } ) @@ -64,7 +63,7 @@ class NameSearchCase(TransactionCase): def test_MustHonorDomain(self): """Must also honor a provided Domain""" - res = self.Partner.name_search("+351", args=[("supplier", "=", True)]) + res = self.Partner.name_search("+351", args=[("barcode", "=", "1111")]) gambulputty = self.partner3.id self.assertEqual(len(res), 1) self.assertEqual(res[0][0], gambulputty)