From 19979b4d9c86904c61fffbf981727ec5ffc6752b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Honor=C3=A9?= Date: Tue, 2 Oct 2018 16:15:27 +0200 Subject: [PATCH] [ADD][11.0] Add base_filter_hidden module --- base_filter_hidden/README.rst | 88 +++++++++++++++ base_filter_hidden/__init__.py | 2 + base_filter_hidden/__manifest__.py | 19 ++++ base_filter_hidden/models/__init__.py | 3 + base_filter_hidden/models/ir_filters.py | 47 ++++++++ base_filter_hidden/readme/CONFIGURE.rst | 4 + base_filter_hidden/readme/CONTRIBUTORS.rst | 1 + base_filter_hidden/readme/DESCRIPTION.rst | 8 ++ .../static/description/icon.png | Bin 0 -> 18931 bytes base_filter_hidden/tests/__init__.py | 2 + base_filter_hidden/tests/test_ir_filters.py | 102 ++++++++++++++++++ base_filter_hidden/views/ir_filters.xml | 28 +++++ .../odoo/addons/base_filter_hidden | 1 + setup/base_filter_hidden/setup.cfg | 2 + setup/base_filter_hidden/setup.py | 6 ++ 15 files changed, 313 insertions(+) create mode 100644 base_filter_hidden/README.rst create mode 100644 base_filter_hidden/__init__.py create mode 100644 base_filter_hidden/__manifest__.py create mode 100644 base_filter_hidden/models/__init__.py create mode 100644 base_filter_hidden/models/ir_filters.py create mode 100644 base_filter_hidden/readme/CONFIGURE.rst create mode 100644 base_filter_hidden/readme/CONTRIBUTORS.rst create mode 100644 base_filter_hidden/readme/DESCRIPTION.rst create mode 100644 base_filter_hidden/static/description/icon.png create mode 100644 base_filter_hidden/tests/__init__.py create mode 100644 base_filter_hidden/tests/test_ir_filters.py create mode 100644 base_filter_hidden/views/ir_filters.xml create mode 120000 setup/base_filter_hidden/odoo/addons/base_filter_hidden create mode 100644 setup/base_filter_hidden/setup.cfg create mode 100644 setup/base_filter_hidden/setup.py diff --git a/base_filter_hidden/README.rst b/base_filter_hidden/README.rst new file mode 100644 index 0000000..b7bf6b2 --- /dev/null +++ b/base_filter_hidden/README.rst @@ -0,0 +1,88 @@ +================== +Base filter hidden +================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |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--ux-lightgray.png?logo=github + :target: https://github.com/OCA/server-ux/tree/11.0/base_filter_hidden + :alt: OCA/server-ux +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/server-ux-11-0/server-ux-11-0-base_filter_hidden + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/250/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This addon is used to use some filters (ir.filters) only for the system purpose. +The advantage is filters defined as System Filters will not be loaded into the web interface. + + +Features: + +* Add 'is_system' field into ir.filters. +* During load of filters (during view load), ignore System filters. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +* By interface: + +- Browse into filters menu (technical main menu); +- Check the 'System' field for concerned filters. + +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 +~~~~~~~ + +* ACSONE SA/NV + +Contributors +~~~~~~~~~~~~ + +* François Honoré + +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-ux `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/base_filter_hidden/__init__.py b/base_filter_hidden/__init__.py new file mode 100644 index 0000000..cb45f27 --- /dev/null +++ b/base_filter_hidden/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import models diff --git a/base_filter_hidden/__manifest__.py b/base_filter_hidden/__manifest__.py new file mode 100644 index 0000000..54bed51 --- /dev/null +++ b/base_filter_hidden/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2018 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': "Base filter hidden", + 'description': """ + Add possibility to have Filters used only by the system (not visible)""", + 'author': 'ACSONE SA/NV,Odoo Community Association (OCA)', + 'website': "https://github.com/OCA/web", + 'category': 'Category', + 'version': '11.0.1.0.0', + 'license': 'AGPL-3', + 'depends': [ + 'base', + ], + 'data': [ + 'views/ir_filters.xml', + ], + 'development_status': 'Alpha', +} diff --git a/base_filter_hidden/models/__init__.py b/base_filter_hidden/models/__init__.py new file mode 100644 index 0000000..2ce3d93 --- /dev/null +++ b/base_filter_hidden/models/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2018 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import ir_filters diff --git a/base_filter_hidden/models/ir_filters.py b/base_filter_hidden/models/ir_filters.py new file mode 100644 index 0000000..ae5ec4a --- /dev/null +++ b/base_filter_hidden/models/ir_filters.py @@ -0,0 +1,47 @@ +# Copyright 2018 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import api, fields, models + + +class IrFilters(models.Model): + _inherit = 'ir.filters' + + is_system = fields.Boolean( + string="System filter", + help="Define if this filter will be used for system purpose " + "(if yes, system filters are not loaded into views)", + default=False, + ) + + @api.model + def get_filters(self, model, action_id=None): + """ + Inherit to remove ir.filters where the is_system is True. + :param model: str + :param action_id: int (optional) + :return: list of dict + """ + result = super().get_filters(model, action_id=action_id) + if result: + result = self._remove_system_filters(result) + return result + + @api.model + def _remove_system_filters(self, result): + """ + Remove system filters from given result + :param result: list of dict + :return: list of dict + """ + # Load every id + filter_ids = [r.get('id') for r in result] + # Get only concerned filters where is_system is True (to remove them) + system_filter_ids = self.search([ + ('id', 'in', filter_ids), + ('is_system', '=', True), + ]).ids + # If no System filter, return directly the original result + if not system_filter_ids: + return result + # Re-create a list without system filters. + return [f for f in result if f.get('id') not in system_filter_ids] diff --git a/base_filter_hidden/readme/CONFIGURE.rst b/base_filter_hidden/readme/CONFIGURE.rst new file mode 100644 index 0000000..79cc18b --- /dev/null +++ b/base_filter_hidden/readme/CONFIGURE.rst @@ -0,0 +1,4 @@ +* By interface: + +- Browse into filters menu (technical main menu); +- Check the 'System' field for concerned filters. diff --git a/base_filter_hidden/readme/CONTRIBUTORS.rst b/base_filter_hidden/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..ab1764c --- /dev/null +++ b/base_filter_hidden/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* François Honoré diff --git a/base_filter_hidden/readme/DESCRIPTION.rst b/base_filter_hidden/readme/DESCRIPTION.rst new file mode 100644 index 0000000..8208ec3 --- /dev/null +++ b/base_filter_hidden/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +This addon is used to use some filters (ir.filters) only for the system purpose. +The advantage is filters defined as System Filters will not be loaded into the web interface. + + +Features: + +* Add 'is_system' field into ir.filters. +* During load of filters (during view load), ignore System filters. diff --git a/base_filter_hidden/static/description/icon.png b/base_filter_hidden/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..650a1a84d7bce176917e9e1d75db6394dff1144a GIT binary patch literal 18931 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 literal 0 HcmV?d00001 diff --git a/base_filter_hidden/tests/__init__.py b/base_filter_hidden/tests/__init__.py new file mode 100644 index 0000000..4697183 --- /dev/null +++ b/base_filter_hidden/tests/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import test_ir_filters diff --git a/base_filter_hidden/tests/test_ir_filters.py b/base_filter_hidden/tests/test_ir_filters.py new file mode 100644 index 0000000..2f3f15c --- /dev/null +++ b/base_filter_hidden/tests/test_ir_filters.py @@ -0,0 +1,102 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from uuid import uuid4 +from odoo.tests.common import TransactionCase + + +class IrFiltersTest(TransactionCase): + """ + Tests for ir.filters + """ + + def setUp(self): + super().setUp() + self.filter_obj = self.env['ir.filters'] + self.res_users_model = self.env.ref("base.model_res_users") + # Create basic filters + self.filter_system = self.filter_obj.create({ + 'name': str(uuid4()), + 'active': True, + 'model_id': self.res_users_model.model, + 'domain': [], + 'sort': [], + 'context': {}, + 'is_system': True, + }) + self.filter_normal = self.filter_obj.create({ + 'name': str(uuid4()), + 'active': True, + 'model_id': self.res_users_model.model, + 'domain': [], + 'sort': [], + 'context': {}, + 'is_system': False, + }) + self.filter_inactive = self.filter_obj.create({ + 'name': str(uuid4()), + 'active': False, + 'model_id': self.res_users_model.model, + 'domain': [], + 'sort': [], + 'context': {}, + 'is_system': False, + }) + self.filters = self.filter_inactive | self.filter_normal |\ + self.filter_system + + def test_get_filters_system(self): + """ + Test the function get_filters. + Expected behaviour: + - Returned filters must have is_system to False + :return: + """ + filters_result = self.filter_obj.get_filters( + self.res_users_model.model) + filter_ids = [r.get('id') for r in filters_result if r.get('id')] + filters = self.filter_obj.browse(filter_ids) + # Based on data from setUp, we should have filters in different states: + # active, inactive, is_system (False and True) + self.assertFalse(any(filters.mapped("is_system"))) + + # Now disable every filters from the setUp + self.filters.write({ + 'active': False, + }) + filters_result = self.filter_obj.get_filters( + self.res_users_model.model) + filter_ids = [r.get('id') for r in filters_result if r.get('id')] + filters = self.filter_obj.browse(filter_ids) + self.assertFalse(any(filters.mapped("is_system"))) + + # Disable every filters related to a model + # To test the case when we don't have any results + domain = [('model_id', '=', self.res_users_model.id)] + self.filter_obj.search(domain).write({ + 'active': False, + }) + filters_result = self.filter_obj.get_filters( + self.res_users_model.model) + filter_ids = [r.get('id') for r in filters_result if r.get('id')] + filters = self.filter_obj.browse(filter_ids) + self.assertFalse(any(filters.mapped("is_system"))) + + # Re-active them + self.filters.write({ + 'active': True, + }) + filters_result = self.filter_obj.get_filters( + self.res_users_model.model) + filter_ids = [r.get('id') for r in filters_result if r.get('id')] + filters = self.filter_obj.browse(filter_ids) + self.assertFalse(any(filters.mapped("is_system"))) + + # Set is_system to True for these filters + self.filters.write({ + 'active': True, + }) + filters_result = self.filter_obj.get_filters( + self.res_users_model.model) + filter_ids = [r.get('id') for r in filters_result if r.get('id')] + filters = self.filter_obj.browse(filter_ids) + self.assertFalse(any(filters.mapped("is_system"))) + return diff --git a/base_filter_hidden/views/ir_filters.xml b/base_filter_hidden/views/ir_filters.xml new file mode 100644 index 0000000..aed1ff4 --- /dev/null +++ b/base_filter_hidden/views/ir_filters.xml @@ -0,0 +1,28 @@ + + + + + ir.filters.tree (in system_filter) + ir.filters + + + + + + + + + + + ir.filters.form (in system_filter) + ir.filters + + + + + + + + + diff --git a/setup/base_filter_hidden/odoo/addons/base_filter_hidden b/setup/base_filter_hidden/odoo/addons/base_filter_hidden new file mode 120000 index 0000000..6201e04 --- /dev/null +++ b/setup/base_filter_hidden/odoo/addons/base_filter_hidden @@ -0,0 +1 @@ +../../../../base_filter_hidden \ No newline at end of file diff --git a/setup/base_filter_hidden/setup.cfg b/setup/base_filter_hidden/setup.cfg new file mode 100644 index 0000000..3c6e79c --- /dev/null +++ b/setup/base_filter_hidden/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal=1 diff --git a/setup/base_filter_hidden/setup.py b/setup/base_filter_hidden/setup.py new file mode 100644 index 0000000..28c57bb --- /dev/null +++ b/setup/base_filter_hidden/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)