From 0c6d840c00a010e2b948b170417eff941f53f7a1 Mon Sep 17 00:00:00 2001 From: Ernad Husremovic Date: Thu, 19 Mar 2026 11:43:19 +0100 Subject: [PATCH] add: remove_odoo_enterprise from OCA/server-brand 16.0 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../remove_odoo_enterprise/README.rst | 85 ++++ .../remove_odoo_enterprise/__init__.py | 4 + .../remove_odoo_enterprise/__manifest__.py | 14 + .../remove_odoo_enterprise/i18n/de.po | 32 ++ .../remove_odoo_enterprise/i18n/hr.po | 33 ++ .../remove_odoo_enterprise/i18n/it.po | 32 ++ .../remove_odoo_enterprise/i18n/pt_BR.po | 33 ++ .../i18n/remove_odoo_enterprise.pot | 29 ++ .../remove_odoo_enterprise/i18n/sv.po | 41 ++ .../remove_odoo_enterprise/i18n/tr.po | 32 ++ .../remove_odoo_enterprise/models/__init__.py | 7 + .../remove_odoo_enterprise/models/base.py | 16 + .../models/ir_module_module.py | 13 + .../models/res_config_settings.py | 59 +++ .../readme/CONTRIBUTORS.rst | 6 + .../readme/DESCRIPTION.rst | 4 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 431 ++++++++++++++++++ .../remove_odoo_enterprise/tests/__init__.py | 3 + .../tests/test_remove_odoo_enterprise.py | 156 +++++++ .../views/res_config_settings_views.xml | 12 + 21 files changed, 1042 insertions(+) create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/README.rst create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/__init__.py create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/__manifest__.py create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/de.po create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/hr.po create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/it.po create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/remove_odoo_enterprise.pot create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/sv.po create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/tr.po create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/__init__.py create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/base.py create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/ir_module_module.py create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/res_config_settings.py create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/static/description/icon.png create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/static/description/index.html create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/tests/__init__.py create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/tests/test_remove_odoo_enterprise.py create mode 100644 odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/views/res_config_settings_views.xml diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/README.rst b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/README.rst new file mode 100644 index 00000000..c62dfc6c --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/README.rst @@ -0,0 +1,85 @@ +====================== +Remove Odoo Enterprise +====================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:a441d892f3c89104da87da994d53530e9ff1ccd4bad2b159ec37cf1ddc7f0bb2 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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--brand-lightgray.png?logo=github + :target: https://github.com/OCA/server-brand/tree/16.0/remove_odoo_enterprise + :alt: OCA/server-brand +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/server-brand-16-0/server-brand-16-0-remove_odoo_enterprise + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/server-brand&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module removes enterprise-only apps and features from all settings views. + +It also removes the widget in the General Settings page for downloading the Odoo +mobile apps from Google Play and Apple Store. + +**Table of contents** + +.. contents:: + :local: + +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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Eska +* Onestein + +Contributors +~~~~~~~~~~~~ + +* Brett Wood +* Michell Stuttgart +* Andrea Stirpe +* Levent Karakaş +* Dennis Sluijk +* remi-filament + +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-brand `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/__init__.py b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/__init__.py new file mode 100644 index 00000000..e9198477 --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2018 Eska Yazılım ve Danışmanlık A.Ş (www.eskayazilim.com.tr) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/__manifest__.py b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/__manifest__.py new file mode 100644 index 00000000..a27bca2f --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2018 Eska Yazılım ve Danışmanlık A.Ş (www.eskayazilim.com.tr) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": "Remove Odoo Enterprise", + "summary": "Remove enterprise modules and setting items", + "version": "16.0.2.0.4", + "category": "Maintenance", + "author": "Eska, Onestein, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/server-brand", + "license": "AGPL-3", + "depends": ["base_setup"], + "data": ["views/res_config_settings_views.xml"], + "installable": True, +} diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/de.po b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/de.po new file mode 100644 index 00000000..dd608064 --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/de.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * remove_odoo_enterprise +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-03-17 14:06+0000\n" +"Last-Translator: davidbeckercbl \n" +"Language-Team: none\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" +"X-Generator: Weblate 5.10.2\n" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_base +msgid "Base" +msgstr "Basis" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_res_config_settings +msgid "Config Settings" +msgstr "Einstellungen" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_ir_module_module +msgid "Module" +msgstr "Modul" diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/hr.po b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/hr.po new file mode 100644 index 00000000..d679cf7a --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/hr.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * remove_odoo_enterprise +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-11-18 14:35+0000\n" +"Last-Translator: Bole \n" +"Language-Team: none\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" +"X-Generator: Weblate 3.8\n" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_base +msgid "Base" +msgstr "" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_res_config_settings +msgid "Config Settings" +msgstr "Postavke" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_ir_module_module +msgid "Module" +msgstr "" diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/it.po b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/it.po new file mode 100644 index 00000000..d2cb2184 --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/it.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * remove_odoo_enterprise +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-01-02 17:34+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\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" +"X-Generator: Weblate 4.17\n" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_base +msgid "Base" +msgstr "Base" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni configurazione" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_ir_module_module +msgid "Module" +msgstr "Modulo" diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/pt_BR.po b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/pt_BR.po new file mode 100644 index 00000000..52aa006f --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/pt_BR.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * remove_odoo_enterprise +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-07-10 19:58+0000\n" +"Last-Translator: Rodrigo Sottomaior Macedo " +"\n" +"Language-Team: none\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" +"X-Generator: Weblate 5.6.2\n" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_base +msgid "Base" +msgstr "Base" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_res_config_settings +msgid "Config Settings" +msgstr "Configurações" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_ir_module_module +msgid "Module" +msgstr "Módulo" diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/remove_odoo_enterprise.pot b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/remove_odoo_enterprise.pot new file mode 100644 index 00000000..d103cacc --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/remove_odoo_enterprise.pot @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * remove_odoo_enterprise +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\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: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_base +msgid "Base" +msgstr "" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_ir_module_module +msgid "Module" +msgstr "" diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/sv.po b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/sv.po new file mode 100644 index 00000000..e98f237b --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/sv.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * remove_odoo_enterprise +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-11-17 10:36+0000\n" +"Last-Translator: Simon S \n" +"Language-Team: none\n" +"Language: sv\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 4.3.2\n" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_base +msgid "Base" +msgstr "Bas" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurationsinställningar" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_ir_module_module +msgid "Module" +msgstr "Modul" + +#~ msgid "Display Name" +#~ msgstr "Visningsnamn" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Senast ändrad den" diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/tr.po b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/tr.po new file mode 100644 index 00000000..89e80742 --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/i18n/tr.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * remove_odoo_enterprise +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-02-19 13:06+0000\n" +"Last-Translator: İsmail Çağan Yılmaz \n" +"Language-Team: none\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" +"X-Generator: Weblate 5.6.2\n" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_base +msgid "Base" +msgstr "Temel" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_res_config_settings +msgid "Config Settings" +msgstr "Yapılandırma Ayarları" + +#. module: remove_odoo_enterprise +#: model:ir.model,name:remove_odoo_enterprise.model_ir_module_module +msgid "Module" +msgstr "Modül" diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/__init__.py b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/__init__.py new file mode 100644 index 00000000..acd20c92 --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/__init__.py @@ -0,0 +1,7 @@ +# Copyright 2018 Eska Yazılım ve Danışmanlık A.Ş (www.eskayazilim.com.tr) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + + +from . import base +from . import res_config_settings +from . import ir_module_module diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/base.py b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/base.py new file mode 100644 index 00000000..158a4736 --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/base.py @@ -0,0 +1,16 @@ +# Copyright 2019-2020 Onestein () +# Copyright 2023 Le Filament (https://le-filament.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class Base(models.AbstractModel): + _inherit = "base" + + @api.model + def search(self, domain, offset=0, limit=None, order=None, count=False): + res = super().search(domain, offset, limit, order, count) + if not count and self._name == "payment.provider": + res = res.filtered(lambda a: not a.module_to_buy) + return res diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/ir_module_module.py b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/ir_module_module.py new file mode 100644 index 00000000..462b9d6b --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/ir_module_module.py @@ -0,0 +1,13 @@ +# Copyright 2019-2020 Onestein () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class IrModuleModule(models.Model): + _inherit = "ir.module.module" + + @api.model + def search(self, domain, offset=0, limit=None, order=None, count=False): + domain += [("to_buy", "=", False)] + return super().search(domain, offset, limit, order, count) diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/res_config_settings.py b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/res_config_settings.py new file mode 100644 index 00000000..dac03841 --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/models/res_config_settings.py @@ -0,0 +1,59 @@ +# Copyright 2016 LasLabs Inc. +# Copyright 2018-2020 Onestein () +# Copyright 2023 Le Filament (https://le-filament.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from lxml import etree + +from odoo import api, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + @api.model + def get_views(self, views, options=None): + """Override to hide settings related to enterprise features. + + This method modifies the form view for settings to hide options + that require enterprise version of Odoo. + """ + result = super().get_views(views, options) + + doc = etree.XML(result["views"]["form"]["arch"]) + + # Hide all setting boxes containing upgrade_boolean widgets + self._hide_enterprise_settings(doc) + + # Hide empty setting containers and their headings + self._hide_empty_containers(doc) + + # Update the form view architecture with the modified XML + result["views"]["form"]["arch"] = etree.tostring(doc) + return result + + def _hide_enterprise_settings(self, doc): + """Hide all setting boxes containing upgrade_boolean widgets.""" + # Find all setting boxes with upgrade_boolean widgets + query = ( + "//div[contains(@class, 'o_setting_box')]" + "[.//field[@widget='upgrade_boolean']]" + ) + for setting_box in doc.xpath(query): + setting_box.attrib["class"] = "d-none" + + def _hide_empty_containers(self, doc): + """Hide containers that no longer have any visible setting boxes.""" + # Find containers with no visible setting boxes + empty_container_query = ( + "//div[contains(@class, 'o_settings_container')]" + "[not(.//div[contains(@class, 'o_setting_box') " + "and not(contains(@class, 'd-none'))])]" + ) + + for empty_container in doc.xpath(empty_container_query): + # If there's a heading before the container, hide it too + prev_element = empty_container.getprevious() + if prev_element is not None and prev_element.tag == "h2": + prev_element.attrib["class"] = "d-none" + # Hide the empty container + empty_container.attrib["class"] = "d-none" diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..e2995b18 --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* Brett Wood +* Michell Stuttgart +* Andrea Stirpe +* Levent Karakaş +* Dennis Sluijk +* remi-filament diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/readme/DESCRIPTION.rst b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/readme/DESCRIPTION.rst new file mode 100644 index 00000000..5769543e --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +This module removes enterprise-only apps and features from all settings views. + +It also removes the widget in the General Settings page for downloading the Odoo +mobile apps from Google Play and Apple Store. diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/static/description/icon.png b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/static/description/index.html b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/static/description/index.html new file mode 100644 index 00000000..489e211b --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/static/description/index.html @@ -0,0 +1,431 @@ + + + + + +Remove Odoo Enterprise + + + +
+

Remove Odoo Enterprise

+ + +

Beta License: AGPL-3 OCA/server-brand Translate me on Weblate Try me on Runboat

+

This module removes enterprise-only apps and features from all settings views.

+

It also removes the widget in the General Settings page for downloading the Odoo +mobile apps from Google Play and Apple Store.

+

Table of contents

+ +
+

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 to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Eska
  • +
  • Onestein
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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-brand project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/tests/__init__.py b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/tests/__init__.py new file mode 100644 index 00000000..a60f3531 --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_remove_odoo_enterprise diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/tests/test_remove_odoo_enterprise.py b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/tests/test_remove_odoo_enterprise.py new file mode 100644 index 00000000..4a51b8f2 --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/tests/test_remove_odoo_enterprise.py @@ -0,0 +1,156 @@ +# Copyright 2020-2023 Onestein () +# Copyright 2020 Akretion () +# Copyright 2023 Le Filament (https://le-filament.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import json + +from lxml import etree + +from odoo.tests import common + + +class TestRemoveOdooEnterprise(common.TransactionCase): + def test_res_config_settings(self): + """ + This test case checks the XML architecture of res.config.settings view, + specifically searching for div elements with a field element where widget + attribute is 'upgrade_boolean'. If such an element exists, it should have + the class "d-none". + """ + conf = self.env["res.config.settings"].create({}) + view = conf.get_views([[False, "form"]])["views"]["form"] + doc = etree.XML(view["arch"]) + # Validate, there are no more visible setting boxes in the view, + # which include fields with upgrade_boolean widgets + query_settings_box = ( + "//div[contains(@class, 'o_setting_box')]" + "[.//field[@widget='upgrade_boolean']]" + ) + setting_boxes = doc.xpath(query_settings_box) or None + self.assertIsNone(setting_boxes) + # Validate, there are no more visible settings containers in the view, + # which only include hidden setting boxes, and therefore appear empty + # and check if they are hidden + query_settings_container = ( + "//div[contains(@class, 'o_settings_container')]" + "[not(.//div[contains(@class, 'o_setting_box') " + "and not(contains(@class, 'd-none'))])]" + ) + settings_container = doc.xpath(query_settings_container) or None + self.assertIsNone(settings_container) + + def test_hide_empty_containers(self): + """Test the _hide_empty_containers method""" + conf = self.env["res.config.settings"].create({}) + + # Create a test XML document with empty containers + xml_content = """ +
+

Heading 1

+
+
Hidden setting box
+
+

Heading 2

+
+
Visible setting box
+
+

Heading 3

+
+
Another hidden setting box
+
+
+ """ + doc = etree.XML(xml_content) + + # Apply the method to hide empty containers + conf._hide_empty_containers(doc) + + # Check that empty containers and their headings are hidden + empty_containers = doc.xpath("//div[@class='d-none']") + self.assertEqual(len(empty_containers), 2) + + # Check that headings before empty containers are hidden + hidden_headings = doc.xpath("//h2[@class='d-none']") + self.assertEqual(len(hidden_headings), 2) + self.assertEqual(hidden_headings[0].text, "Heading 1") + self.assertEqual(hidden_headings[1].text, "Heading 3") + + # Check that containers with visible setting boxes are not hidden + visible_containers = doc.xpath("//div[@class='o_settings_container']") + self.assertEqual(len(visible_containers), 1) + + def test_hide_enterprise_settings(self): + """Test the _hide_enterprise_settings method""" + conf = self.env["res.config.settings"].create({}) + + # Create a test XML document with upgrade_boolean widgets + xml_content = """ +
+
+
+ +
+
+
+
+ +
+
+
+ """ + doc = etree.XML(xml_content) + + # Apply the method to hide enterprise settings + conf._hide_enterprise_settings(doc) + + # Check that setting boxes with upgrade_boolean widgets are hidden + hidden_boxes = doc.xpath("//div[@class='d-none']") + self.assertEqual(len(hidden_boxes), 1) + + # Check that other setting boxes are not hidden + visible_boxes = doc.xpath("//div[@class='o_setting_box']") + self.assertEqual(len(visible_boxes), 1) + + def test_search_payment_providers(self): + """ + This function checks if there are any payment providers in the database, + fetches them using a search query, and then verifies that none of these + providers have an associated module to buy. + """ + if self.env.get("payment.provider"): + acquirer_ids = self.env["payment.provider"].search([]) + self.assertFalse(any([a.module_to_buy for a in acquirer_ids])) + + def test_search_ir_module(self): + """ + This function is used to test the search method from 'ir.module.module' model. + It checks if there are any modules without a purchase cost (to_buy = False). + """ + module_ids = self.env["ir.module.module"].search([]) + self.assertFalse(any([m.to_buy for m in module_ids])) + + def test_appstore_invisible(self): + """The appstore widget is invisible""" + conf = self.env["res.config.settings"].create({}) + view = conf.get_views([[False, "form"]])["views"]["form"] + doc = etree.XML(view["arch"]) + + query = "//div[@id='appstore']" + for item in doc.xpath(query): + invisible_attrib = json.loads(item.attrib["modifiers"]) + self.assertTrue(invisible_attrib["invisible"]) + + def test_appstore_visible(self): + """Disabling the view makes the appstore widget visible again""" + conf_form_view = self.env.ref( + "remove_odoo_enterprise.res_config_settings_view_form" + ) + conf_form_view.active = False + conf = self.env["res.config.settings"].create({}) + view = conf.get_views([[False, "form"]])["views"]["form"] + doc = etree.XML(view["arch"]) + + query = "//div[@id='appstore']" + for item in doc.xpath(query): + self.assertNotIn("modifiers", item.attrib) diff --git a/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/views/res_config_settings_views.xml b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/views/res_config_settings_views.xml new file mode 100644 index 00000000..bc94909e --- /dev/null +++ b/odoo-bringout-oca-server-brand-remove_odoo_enterprise/remove_odoo_enterprise/views/res_config_settings_views.xml @@ -0,0 +1,12 @@ + + + + res.config.settings + + + + 1 + + + +