diff --git a/.copier-answers.yml b/.copier-answers.yml index 653dedb99..9ab731486 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,9 +1,14 @@ # Do NOT update manually; changes here will be overwritten by Copier -_commit: v1.6.1 +_commit: v1.11.0 _src_path: gh:oca/oca-addons-repo-template ci: GitHub dependency_installation_mode: PIP generate_requirements_txt: true +github_check_license: true +github_enable_codecov: true +github_enable_makepot: true +github_enable_stale_action: true +github_enforce_dev_status_compatibility: true include_wkhtmltopdf: false odoo_version: 14.0 org_name: Odoo Community Association (OCA) @@ -11,10 +16,11 @@ org_slug: OCA rebel_module_groups: - web_widget_model_viewer repo_description: "This project aims to deal with modules related to the webclient\ - \ of Odoo. You'll find modules that:\n\n - Add facilities to the UI\n - Add widgets\n\ - \ - Ease the import/export features\n - Generally add clientside functionality" + \ of Odoo. You'll find modules that:\n\n - Add facilities to the UI\n - Add widgets\n\ + \ - Ease the import/export features\n - Generally add clientside functionality" repo_name: Web addons for Odoo repo_slug: web repo_website: https://github.com/OCA/web travis_apt_packages: [] travis_apt_sources: [] + diff --git a/.gitignore b/.gitignore index 818770fb1..9c283fd41 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,6 @@ build/ develop-eggs/ dist/ eggs/ -lib/ lib64/ parts/ sdist/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5bedc50c4..e01273ce8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -119,19 +119,15 @@ repos: - id: flake8 name: flake8 additional_dependencies: ["flake8-bugbear==20.1.4"] - - repo: https://github.com/PyCQA/pylint - rev: v2.11.1 + - repo: https://github.com/OCA/pylint-odoo + rev: 7.0.2 hooks: - - id: pylint + - id: pylint_odoo name: pylint with optional checks args: - --rcfile=.pylintrc - --exit-zero verbose: true - additional_dependencies: &pylint_deps - - pylint-odoo==5.0.5 - - id: pylint - name: pylint with mandatory checks + - id: pylint_odoo args: - --rcfile=.pylintrc-mandatory - additional_dependencies: *pylint_deps diff --git a/.pylintrc b/.pylintrc index e33958833..d1f72970b 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,3 +1,5 @@ + + [MASTER] load-plugins=pylint_odoo score=n diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory index 08bca3cef..3bf8ceefb 100644 --- a/.pylintrc-mandatory +++ b/.pylintrc-mandatory @@ -1,3 +1,4 @@ + [MASTER] load-plugins=pylint_odoo score=n diff --git a/README.md b/README.md index a7d2f2ccd..f2c0f6302 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Available addons addon | version | maintainers | summary --- | --- | --- | --- [support_branding](support_branding/) | 14.0.1.0.0 | | Adds your branding to an Odoo instance -[web_access_rule_buttons](web_access_rule_buttons/) | 14.0.1.0.0 | | Disable Edit button if access rules prevent this action +[web_access_rule_buttons](web_access_rule_buttons/) | 14.0.1.0.1 | | Disable Edit button if access rules prevent this action [web_action_conditionable](web_action_conditionable/) | 14.0.1.0.1 | | web_action_conditionable [web_advanced_search](web_advanced_search/) | 14.0.1.0.1 | | Easier and more powerful searching tools [web_calendar_color_field](web_calendar_color_field/) | 14.0.1.0.0 | | Calendar Color Field @@ -36,8 +36,8 @@ addon | version | maintainers | summary [web_copy_confirm](web_copy_confirm/) | 14.0.1.0.0 | | Show confirmation dialogue before copying records [web_decimal_numpad_dot](web_decimal_numpad_dot/) | 14.0.1.0.0 | | Allows using numpad dot to enter period decimal separator [web_dialog_size](web_dialog_size/) | 14.0.1.0.0 | | A module that lets the user expand a dialog box to the full screen width. -[web_disable_export_group](web_disable_export_group/) | 14.0.1.0.0 | | Web Disable Export Group -[web_domain_field](web_domain_field/) | 14.0.1.0.1 | | Use computed field as domain +[web_disable_export_group](web_disable_export_group/) | 14.0.2.0.0 | | Web Disable Export Group +[web_domain_field](web_domain_field/) | 14.0.1.0.2 | | Use computed field as domain [web_drop_target](web_drop_target/) | 14.0.1.1.1 | | Allows to drag files into Odoo [web_environment_ribbon](web_environment_ribbon/) | 14.0.1.0.0 | | Web Environment Ribbon [web_group_expand](web_group_expand/) | 14.0.1.0.0 | | Group Expand Buttons diff --git a/web_access_rule_buttons/__manifest__.py b/web_access_rule_buttons/__manifest__.py index 3b1ebf025..adeff3855 100644 --- a/web_access_rule_buttons/__manifest__.py +++ b/web_access_rule_buttons/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Web Access Rules Buttons", "summary": "Disable Edit button if access rules prevent this action", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "author": "Camptocamp, Onestein, Odoo Community Association (OCA)", "license": "AGPL-3", "category": "Web", diff --git a/web_access_rule_buttons/models/models.py b/web_access_rule_buttons/models/models.py index ed43cb817..b6b4c08c0 100644 --- a/web_access_rule_buttons/models/models.py +++ b/web_access_rule_buttons/models/models.py @@ -22,19 +22,16 @@ class Base(models.AbstractModel): operations = ["read", "create", "write", "unlink"] result = {} for operation in operations: - try: - self.check_access_rule(operation) - except exceptions.AccessError: - result[operation] = False - if ( - self.is_transient() - or self.ids - and self.env.user.has_group("base.user_admin") - ): + if self.is_transient() or not self.ids: # If we call check_access_rule() without id, it will try to # run a SELECT without ID which will crash, so we just blindly # allow the operations result[operation] = True - else: + continue + try: + self.check_access_rule(operation) + except exceptions.AccessError: result[operation] = False + else: + result[operation] = True return result diff --git a/web_access_rule_buttons/tests/test_access_rule_buttons.py b/web_access_rule_buttons/tests/test_access_rule_buttons.py index f3b9dff67..be29222c8 100644 --- a/web_access_rule_buttons/tests/test_access_rule_buttons.py +++ b/web_access_rule_buttons/tests/test_access_rule_buttons.py @@ -1,25 +1,38 @@ # Copyright 2019 Onestein BV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.tests.common import TransactionCase +from odoo.tests import common, new_test_user, users -class TestAccessRuleButtons(TransactionCase): +class TestAccessRuleButtons(common.TransactionCase): def setUp(self): - super(TestAccessRuleButtons, self).setUp() - - self.curr_obj = self.env["res.currency"] + super().setUp() self.curr_record = self.env.ref("base.USD") + new_test_user(self.env, login="test-user", groups="base.group_system") + self.env.ref("base.user_admin").write( + { + "groups_id": [(4, self.env.ref("base.group_system").id)], + } + ) + @users("admin", "test-user") def test_check_access_rule_1(self): - res = self.curr_obj.check_access_rule_all(["write"]) - self.assertFalse(res["write"]) + res = self.env["res.currency"].check_access_rule_all(["write"]) + self.assertTrue(res["write"]) + @users("admin", "test-user") def test_check_access_rule_2(self): - res = self.curr_record.check_access_rule_all(["write"]) + res = ( + self.env["res.currency"] + .browse(self.curr_record.id) + .check_access_rule_all(["write"]) + ) self.assertFalse(res["write"]) + @users("admin", "test-user") def test_check_access_rule_3(self): - res = self.curr_record.check_access_rule_all() + res = ( + self.env["res.currency"].browse(self.curr_record.id).check_access_rule_all() + ) self.assertFalse(res["read"]) self.assertFalse(res["create"]) self.assertFalse(res["write"]) diff --git a/web_disable_export_group/README.rst b/web_disable_export_group/README.rst index 6d41a552f..58ec4a2a2 100644 --- a/web_disable_export_group/README.rst +++ b/web_disable_export_group/README.rst @@ -25,11 +25,9 @@ Web Disable Export Group |badge1| |badge2| |badge3| |badge4| |badge5| -In the standard Odoo the UI option 'Export' that is present in the 'Action' menu -and the 'Export All' button of any list view is always enabled (for every user). +The standard export group prevents both options: 'Direct Export (xlsx)' and 'Export All'. -This module makes the option 'Export' and 'Export All' enabled only for the users -that belong to the Export Data group. +This module adds a new group for the 'Direct Export (xlsx)' feature, leaving the standard one for only the 'Export All' feature. Admin user can always use the export option. @@ -41,13 +39,13 @@ Admin user can always use the export option. Configuration ============= -Enable the group "Export Data group" to the users who are allowed to -make use of the option 'Export'. +Enable the group "Direct Export" to the users who are allowed to +make use of the option 'Export xlsx'. Usage ===== -Every user without *Export Data* permission won't have the option available. +Every user without *Direct Export (xlsx)* permission won't have the option available. Bug Tracker =========== @@ -81,6 +79,7 @@ Contributors * David Vidal * João Marques * Alexandre Díaz + * Víctor Martínez Maintainers ~~~~~~~~~~~ diff --git a/web_disable_export_group/__manifest__.py b/web_disable_export_group/__manifest__.py index 7a4be4db9..94bf6106b 100644 --- a/web_disable_export_group/__manifest__.py +++ b/web_disable_export_group/__manifest__.py @@ -4,7 +4,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Web Disable Export Group", - "version": "14.0.1.0.0", + "version": "14.0.2.0.0", "license": "AGPL-3", "author": "Onestein, " "Tecnativa, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/web", diff --git a/web_disable_export_group/i18n/es.po b/web_disable_export_group/i18n/es.po index a6de3e09e..18b288f8c 100644 --- a/web_disable_export_group/i18n/es.po +++ b/web_disable_export_group/i18n/es.po @@ -17,19 +17,33 @@ msgstr "" "X-Generator: Weblate 3.10\n" #. module: web_disable_export_group -#. openerp-web -#: code:addons/web_disable_export_group/static/src/js/disable_export_group.js:0 -#: code:addons/web_disable_export_group/static/src/js/web_disable_export_group_tour.js:0 -#, python-format -msgid "Export" -msgstr "Exportar" +#: model:res.groups,name:web_disable_export_group.group_export_xlsx_data +msgid "Direct Export (xlsx)" +msgstr "" #. module: web_disable_export_group -#: model:res.groups,name:web_disable_export_group.group_export_data -msgid "Export Data" -msgstr "Exportar datos" +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http__display_name +msgid "Display Name" +msgstr "" #. module: web_disable_export_group #: model:ir.model,name:web_disable_export_group.model_ir_http msgid "HTTP Routing" msgstr "Ruta HTTP" + +#. module: web_disable_export_group +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http__id +msgid "ID" +msgstr "" + +#. module: web_disable_export_group +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http____last_update +msgid "Last Modified on" +msgstr "" + +#, python-format +#~ msgid "Export" +#~ msgstr "Exportar" + +#~ msgid "Export Data" +#~ msgstr "Exportar datos" diff --git a/web_disable_export_group/i18n/hr.po b/web_disable_export_group/i18n/hr.po index 26041bf6d..8d3f878c9 100644 --- a/web_disable_export_group/i18n/hr.po +++ b/web_disable_export_group/i18n/hr.po @@ -18,19 +18,33 @@ msgstr "" "X-Generator: Weblate 3.9.1\n" #. module: web_disable_export_group -#. openerp-web -#: code:addons/web_disable_export_group/static/src/js/disable_export_group.js:0 -#: code:addons/web_disable_export_group/static/src/js/web_disable_export_group_tour.js:0 -#, python-format -msgid "Export" -msgstr "Izvoz" +#: model:res.groups,name:web_disable_export_group.group_export_xlsx_data +msgid "Direct Export (xlsx)" +msgstr "" #. module: web_disable_export_group -#: model:res.groups,name:web_disable_export_group.group_export_data -msgid "Export Data" -msgstr "Izvoz podataka" +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http__display_name +msgid "Display Name" +msgstr "" #. module: web_disable_export_group #: model:ir.model,name:web_disable_export_group.model_ir_http msgid "HTTP Routing" msgstr "HTTP usmjeravanje" + +#. module: web_disable_export_group +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http__id +msgid "ID" +msgstr "" + +#. module: web_disable_export_group +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http____last_update +msgid "Last Modified on" +msgstr "" + +#, python-format +#~ msgid "Export" +#~ msgstr "Izvoz" + +#~ msgid "Export Data" +#~ msgstr "Izvoz podataka" diff --git a/web_disable_export_group/i18n/pt.po b/web_disable_export_group/i18n/pt.po index e379d0bd9..4a01169ac 100644 --- a/web_disable_export_group/i18n/pt.po +++ b/web_disable_export_group/i18n/pt.po @@ -17,19 +17,33 @@ msgstr "" "X-Generator: Weblate 3.10\n" #. module: web_disable_export_group -#. openerp-web -#: code:addons/web_disable_export_group/static/src/js/disable_export_group.js:0 -#: code:addons/web_disable_export_group/static/src/js/web_disable_export_group_tour.js:0 -#, python-format -msgid "Export" -msgstr "Exportar" +#: model:res.groups,name:web_disable_export_group.group_export_xlsx_data +msgid "Direct Export (xlsx)" +msgstr "" #. module: web_disable_export_group -#: model:res.groups,name:web_disable_export_group.group_export_data -msgid "Export Data" -msgstr "Exportar Dados" +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http__display_name +msgid "Display Name" +msgstr "" #. module: web_disable_export_group #: model:ir.model,name:web_disable_export_group.model_ir_http msgid "HTTP Routing" msgstr "Encaminhamento HTTP" + +#. module: web_disable_export_group +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http__id +msgid "ID" +msgstr "" + +#. module: web_disable_export_group +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http____last_update +msgid "Last Modified on" +msgstr "" + +#, python-format +#~ msgid "Export" +#~ msgstr "Exportar" + +#~ msgid "Export Data" +#~ msgstr "Exportar Dados" diff --git a/web_disable_export_group/i18n/web_disable_export_group.pot b/web_disable_export_group/i18n/web_disable_export_group.pot index 5aa2a3338..cb8e38a24 100644 --- a/web_disable_export_group/i18n/web_disable_export_group.pot +++ b/web_disable_export_group/i18n/web_disable_export_group.pot @@ -13,25 +13,16 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: web_disable_export_group +#: model:res.groups,name:web_disable_export_group.group_export_xlsx_data +msgid "Direct Export (xlsx)" +msgstr "" + #. module: web_disable_export_group #: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http__display_name msgid "Display Name" msgstr "" -#. module: web_disable_export_group -#. openerp-web -#: code:addons/web_disable_export_group/static/src/js/disable_export_group.js:0 -#: code:addons/web_disable_export_group/static/src/js/web_disable_export_group_tour.js:0 -#: code:addons/web_disable_export_group/static/src/js/web_disable_export_group_tour.js:0 -#, python-format -msgid "Export" -msgstr "" - -#. module: web_disable_export_group -#: model:res.groups,name:web_disable_export_group.group_export_data -msgid "Export Data" -msgstr "" - #. module: web_disable_export_group #: model:ir.model,name:web_disable_export_group.model_ir_http msgid "HTTP Routing" diff --git a/web_disable_export_group/i18n/zh_CN.po b/web_disable_export_group/i18n/zh_CN.po index 203977350..2fb410734 100644 --- a/web_disable_export_group/i18n/zh_CN.po +++ b/web_disable_export_group/i18n/zh_CN.po @@ -17,19 +17,33 @@ msgstr "" "X-Generator: Weblate 3.8\n" #. module: web_disable_export_group -#. openerp-web -#: code:addons/web_disable_export_group/static/src/js/disable_export_group.js:0 -#: code:addons/web_disable_export_group/static/src/js/web_disable_export_group_tour.js:0 -#, python-format -msgid "Export" -msgstr "导出" +#: model:res.groups,name:web_disable_export_group.group_export_xlsx_data +msgid "Direct Export (xlsx)" +msgstr "" #. module: web_disable_export_group -#: model:res.groups,name:web_disable_export_group.group_export_data -msgid "Export Data" -msgstr "导出数据" +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http__display_name +msgid "Display Name" +msgstr "" #. module: web_disable_export_group #: model:ir.model,name:web_disable_export_group.model_ir_http msgid "HTTP Routing" msgstr "HTTP路由" + +#. module: web_disable_export_group +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http__id +msgid "ID" +msgstr "" + +#. module: web_disable_export_group +#: model:ir.model.fields,field_description:web_disable_export_group.field_ir_http____last_update +msgid "Last Modified on" +msgstr "" + +#, python-format +#~ msgid "Export" +#~ msgstr "导出" + +#~ msgid "Export Data" +#~ msgstr "导出数据" diff --git a/web_disable_export_group/migrations/14.0.1.1.0/post-migration.py b/web_disable_export_group/migrations/14.0.1.1.0/post-migration.py new file mode 100644 index 000000000..52ff69fc6 --- /dev/null +++ b/web_disable_export_group/migrations/14.0.1.1.0/post-migration.py @@ -0,0 +1,16 @@ +from openupgradelib import openupgrade + + +def add_new_group_from_group(self, env, group, new_group): + groups = env["res.groups"].search([("implied_ids", "=", group.id)]) + groups.write({"implied_ids": [(4, new_group.id)]}) + group.users.write({"groups_id": [(4, new_group.id)]}) + + +@openupgrade.migrate() +def migrate(env, version): + group = env.ref("web_disable_export_group.group_export_data") + new_group = env.ref("web_disable_export_group.group_export_xlsx_data") + add_new_group_from_group(env, group, new_group) + group = env.ref("base.group_allow_export") + add_new_group_from_group(env, group, new_group) diff --git a/web_disable_export_group/models/ir_http.py b/web_disable_export_group/models/ir_http.py index 156f13160..562ff40d9 100644 --- a/web_disable_export_group/models/ir_http.py +++ b/web_disable_export_group/models/ir_http.py @@ -13,8 +13,8 @@ class Http(models.AbstractModel): user = request.env.user res.update( { - "group_export_data": user - and user.has_group("web_disable_export_group.group_export_data"), + "group_xlsx_export_data": user + and user.has_group("web_disable_export_group.group_export_xlsx_data"), } ) return res diff --git a/web_disable_export_group/readme/CONFIGURE.rst b/web_disable_export_group/readme/CONFIGURE.rst index df6b1e4b7..f32251f68 100644 --- a/web_disable_export_group/readme/CONFIGURE.rst +++ b/web_disable_export_group/readme/CONFIGURE.rst @@ -1,2 +1,2 @@ -Enable the group "Export Data group" to the users who are allowed to -make use of the option 'Export'. +Enable the group "Direct Export" to the users who are allowed to +make use of the option 'Export xlsx'. diff --git a/web_disable_export_group/readme/CONTRIBUTORS.rst b/web_disable_export_group/readme/CONTRIBUTORS.rst index d34bdc8b6..10aca8773 100644 --- a/web_disable_export_group/readme/CONTRIBUTORS.rst +++ b/web_disable_export_group/readme/CONTRIBUTORS.rst @@ -8,3 +8,4 @@ * David Vidal * João Marques * Alexandre Díaz + * Víctor Martínez diff --git a/web_disable_export_group/readme/DESCRIPTION.rst b/web_disable_export_group/readme/DESCRIPTION.rst index fc67346c3..cbe8c22ec 100644 --- a/web_disable_export_group/readme/DESCRIPTION.rst +++ b/web_disable_export_group/readme/DESCRIPTION.rst @@ -1,7 +1,5 @@ -In the standard Odoo the UI option 'Export' that is present in the 'Action' menu -and the 'Export All' button of any list view is always enabled (for every user). +The standard export group prevents both options: 'Direct Export (xlsx)' and 'Export All'. -This module makes the option 'Export' and 'Export All' enabled only for the users -that belong to the Export Data group. +This module adds a new group for the 'Direct Export (xlsx)' feature, leaving the standard one for only the 'Export All' feature. Admin user can always use the export option. diff --git a/web_disable_export_group/readme/USAGE.rst b/web_disable_export_group/readme/USAGE.rst index 9e1706a1b..58da01296 100644 --- a/web_disable_export_group/readme/USAGE.rst +++ b/web_disable_export_group/readme/USAGE.rst @@ -1 +1 @@ -Every user without *Export Data* permission won't have the option available. +Every user without *Direct Export (xlsx)* permission won't have the option available. diff --git a/web_disable_export_group/security/groups.xml b/web_disable_export_group/security/groups.xml index 548e4c051..3eb23a749 100644 --- a/web_disable_export_group/security/groups.xml +++ b/web_disable_export_group/security/groups.xml @@ -2,8 +2,10 @@ - - Export Data + + Direct Export (xlsx) + +

Beta License: AGPL-3 OCA/web Translate me on Weblate Try me on Runbot

-

In the standard Odoo the UI option ‘Export’ that is present in the ‘Action’ menu -and the ‘Export All’ button of any list view is always enabled (for every user).

-

This module makes the option ‘Export’ and ‘Export All’ enabled only for the users -that belong to the Export Data group.

+

The standard export group prevents both options: ‘Direct Export (xlsx)’ and ‘Export All’.

+

This module adds a new group for the ‘Direct Export (xlsx)’ feature, leaving the standard one for only the ‘Export All’ feature.

Admin user can always use the export option.

Table of contents

@@ -389,12 +387,12 @@ that belong to the Export Data group.

Configuration

-

Enable the group “Export Data group” to the users who are allowed to -make use of the option ‘Export’.

+

Enable the group “Direct Export” to the users who are allowed to +make use of the option ‘Export xlsx’.

Usage

-

Every user without Export Data permission won’t have the option available.

+

Every user without Direct Export (xlsx) permission won’t have the option available.

Bug Tracker

@@ -425,6 +423,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
  • David Vidal
  • João Marques
  • Alexandre Díaz
  • +
  • Víctor Martínez
  • diff --git a/web_disable_export_group/static/src/js/disable_export_group.js b/web_disable_export_group/static/src/js/disable_export_group.js index a94763f0e..7e499443f 100644 --- a/web_disable_export_group/static/src/js/disable_export_group.js +++ b/web_disable_export_group/static/src/js/disable_export_group.js @@ -1,33 +1,15 @@ /* Copyright 2016 Onestein Copyright 2018 Tecnativa - David Vidal Copyright 2021 Tecnativa - Alexandre Díaz + Copyright 2022 Tecnativa - Víctor Martínez License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). */ -odoo.define("web_disable_export_group", function (require) { +odoo.define("web_disable_export_group.WebDisableExportGroupController", function ( + require +) { "use strict"; - const core = require("web.core"); - const Sidebar = require("web.Sidebar"); const session = require("web.session"); const AbstractController = require("web.AbstractController"); - const _t = core._t; - - Sidebar.include({ - /** - * @override - */ - _addItems: function (sectionCode, items) { - let _items = items; - if ( - !session.is_superuser && - sectionCode === "other" && - items.length && - !session.group_export_data - ) { - _items = _.reject(_items, {label: _t("Export")}); - } - this._super(sectionCode, _items); - }, - }); AbstractController.include({ /** @@ -37,8 +19,8 @@ odoo.define("web_disable_export_group", function (require) { if ( !session.is_superuser && action && - action.startsWith("export_") && - !session.group_export_data + action.startsWith("export_xlsx") && + !session.group_xlsx_export_data ) { return false; } diff --git a/web_disable_export_group/static/src/js/web_disable_export_group_tour.js b/web_disable_export_group/static/src/js/web_disable_export_group_tour.js index d93b75ac6..119e38337 100644 --- a/web_disable_export_group/static/src/js/web_disable_export_group_tour.js +++ b/web_disable_export_group/static/src/js/web_disable_export_group_tour.js @@ -1,16 +1,14 @@ /* Copyright 2020 Tecnativa - João Marques + Copyright 2022 Tecnativa - Víctor Martínez License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). */ odoo.define("web_disable_export_group.tour", function (require) { "use strict"; - var core = require("web.core"); var tour = require("web_tour.tour"); - var _t = core._t; - tour.register( - "export_tour_admin", + "export_tour_xlsx_button_ok", { test: true, url: @@ -21,25 +19,10 @@ odoo.define("web_disable_export_group.tour", function (require) { content: "Check if 'Export all' button exists", trigger: ".o_list_buttons:has(.o_list_export_xlsx)", }, - { - content: "Select all records", - trigger: ".custom-control-input:first", - }, - { - content: "Open actions", - trigger: ".o_dropdown_toggler_btn", - }, - { - content: "Check if Export button exists", - trigger: - '.o_cp_action_menus ul.o_dropdown_menu a:contains("' + - _t("Export") + - '")', - }, ] ); tour.register( - "export_tour_demo", + "export_tour_xlsx_button_ko", { test: true, url: @@ -50,21 +33,6 @@ odoo.define("web_disable_export_group.tour", function (require) { content: "Check if 'Export all' button exists", trigger: ".o_list_buttons:not(:has(.o_list_export_xlsx))", }, - { - content: "Select all records", - trigger: ".custom-control-input:first", - }, - { - content: "Open actions", - trigger: ".o_dropdown_toggler_btn", - }, - { - content: "Check if Export button does not exist", - trigger: - '.o_cp_action_menus ul.o_dropdown_menu a:first:not(:contains("' + - _t("Export") + - '"))', - }, ] ); return {}; diff --git a/web_disable_export_group/tests/test_tour.py b/web_disable_export_group/tests/test_tour.py index c4cadd043..9bfaf27e7 100644 --- a/web_disable_export_group/tests/test_tour.py +++ b/web_disable_export_group/tests/test_tour.py @@ -1,32 +1,33 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # Copyright 2020 Tecnativa - João Marques +# Copyright 2022 Tecnativa - Víctor Martínez import odoo.tests +from odoo.tests import new_test_user @odoo.tests.tagged("post_install", "-at_install") class TestTour(odoo.tests.HttpCase): def setUp(self): super().setUp() - self.env["res.users"].create( - { - "name": "user_not_export", - "login": "user_not_export", - "password": "user_not_export", - "groups_id": [ - ( - 6, - 0, - [ - self.env.ref("base.group_user").id, - self.env.ref("base.group_system").id, - ], - ) - ], - } + new_test_user( + self.env, + login="user_not_export", + password="user_not_export", + groups="base.group_user,base.group_system", + ) + new_test_user( + self.env, + login="user_export_xlsx", + password="user_export_xlsx", + groups="base.group_user,base.group_system,%s" + % ("web_disable_export_group.group_export_xlsx_data"), ) def test_admin(self): - self.start_tour("/web", "export_tour_admin", login="admin") + self.start_tour("/web", "export_tour_xlsx_button_ok", login="admin") def test_user_not_export(self): - self.start_tour("/web", "export_tour_demo", login="user_not_export") + self.start_tour("/web", "export_tour_xlsx_button_ko", login="user_not_export") + + def test_user_export_xlsx(self): + self.start_tour("/web", "export_tour_xlsx_button_ok", login="user_export_xlsx") diff --git a/web_domain_field/README.rst b/web_domain_field/README.rst index a14831b6f..c360a77c2 100644 --- a/web_domain_field/README.rst +++ b/web_domain_field/README.rst @@ -1,11 +1,42 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 - ================ Web Domain Field ================ +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |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%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/14.0/web_domain_field + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_domain_field + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/162/14.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +When you define a view you can specify on the relational fields a domain +attribute. This attribute is evaluated as filter to apply when displaying +existing records for selection. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + When you define a view you can specify on the relational fields a domain attribute. This attribute is evaluated as filter to apply when displaying existing records for selection. @@ -51,7 +82,6 @@ The field used as domain must provide the domain as a JSON encoded string. store=False, ) - @api.multi @api.depends('name') def _compute_product_id_domain(self): for rec in self: @@ -59,49 +89,44 @@ The field used as domain must provide the domain as a JSON encoded string. [('type', '=', 'product'), ('name', 'like', rec.name)] ) - -Usage -===== - -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/162/10.0 - - - 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. +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 ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* ACSONE SA/NV Contributors ------------- +~~~~~~~~~~~~ * Laurent Mignon * Denis Roussel +* Raf Ven -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - 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. -To contribute to this module, please visit https://odoo-community.org. +This module is part of the `OCA/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_domain_field/__manifest__.py b/web_domain_field/__manifest__.py index 6ddcf239b..ad868b8e4 100644 --- a/web_domain_field/__manifest__.py +++ b/web_domain_field/__manifest__.py @@ -5,7 +5,7 @@ "name": "Web Domain Field", "summary": """ Use computed field as domain""", - "version": "14.0.1.0.1", + "version": "14.0.1.0.2", "development_status": "Production/Stable", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", diff --git a/web_domain_field/readme/CONTRIBUTORS.rst b/web_domain_field/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..1294ec29e --- /dev/null +++ b/web_domain_field/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Laurent Mignon +* Denis Roussel +* Raf Ven diff --git a/web_domain_field/readme/DESCRIPTION.rst b/web_domain_field/readme/DESCRIPTION.rst new file mode 100644 index 000000000..5aa1b96f3 --- /dev/null +++ b/web_domain_field/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +When you define a view you can specify on the relational fields a domain +attribute. This attribute is evaluated as filter to apply when displaying +existing records for selection. diff --git a/web_domain_field/readme/USAGE.rst b/web_domain_field/readme/USAGE.rst new file mode 100644 index 000000000..b9c04da19 --- /dev/null +++ b/web_domain_field/readme/USAGE.rst @@ -0,0 +1,51 @@ +When you define a view you can specify on the relational fields a domain +attribute. This attribute is evaluated as filter to apply when displaying +existing records for selection. + +.. code-block:: xml + + + +The value provided for the domain attribute must be a string representing a +valid Odoo domain. This string is evaluated on the client side in a +restricted context where we can reference as right operand the values of +fields present into the form and a limited set of functions. + +In this context it's hard to build complex domain and we are facing to some +limitations as: + + * The syntax to include in your domain a criteria involving values from a + x2many field is complex. + * The right side of domain in case of x2many can involve huge amount of ids + (performance problem). + * Domains computed by an onchange on an other field are not recomputed when + you modify the form and don't modify the field triggering the onchange. + * It's not possible to extend an existing domain. You must completely redefine + the domain in your specialized addon + * etc... + +In order to mitigate these limitations this new addon allows you to use the +value of a field as domain of an other field in the xml definition of your +view. + +.. code-block:: xml + + + + +The field used as domain must provide the domain as a JSON encoded string. + +.. code-block:: python + + product_id_domain = fields.Char( + compute="_compute_product_id_domain", + readonly=True, + store=False, + ) + + @api.depends('name') + def _compute_product_id_domain(self): + for rec in self: + rec.product_id_domain = json.dumps( + [('type', '=', 'product'), ('name', 'like', rec.name)] + ) diff --git a/web_domain_field/static/description/index.html b/web_domain_field/static/description/index.html new file mode 100644 index 000000000..9b4b8512d --- /dev/null +++ b/web_domain_field/static/description/index.html @@ -0,0 +1,474 @@ + + + + + + +Web Domain Field + + + +
    +

    Web Domain Field

    + + +

    Production/Stable License: AGPL-3 OCA/web Translate me on Weblate Try me on Runbot

    +

    When you define a view you can specify on the relational fields a domain +attribute. This attribute is evaluated as filter to apply when displaying +existing records for selection.

    +

    Table of contents

    + +
    +

    Usage

    +

    When you define a view you can specify on the relational fields a domain +attribute. This attribute is evaluated as filter to apply when displaying +existing records for selection.

    +
    +<field name="product_id" domain="[('type','=','product')]"/>
    +
    +

    The value provided for the domain attribute must be a string representing a +valid Odoo domain. This string is evaluated on the client side in a +restricted context where we can reference as right operand the values of +fields present into the form and a limited set of functions.

    +

    In this context it’s hard to build complex domain and we are facing to some +limitations as:

    +
    +
      +
    • The syntax to include in your domain a criteria involving values from a +x2many field is complex.
    • +
    • The right side of domain in case of x2many can involve huge amount of ids +(performance problem).
    • +
    • Domains computed by an onchange on an other field are not recomputed when +you modify the form and don’t modify the field triggering the onchange.
    • +
    • It’s not possible to extend an existing domain. You must completely redefine +the domain in your specialized addon
    • +
    • etc…
    • +
    +
    +

    In order to mitigate these limitations this new addon allows you to use the +value of a field as domain of an other field in the xml definition of your +view.

    +
    +<field name="product_id_domain" invisible="1"/>
    +<field name="product_id" domain="product_id_domain"/>
    +
    +

    The field used as domain must provide the domain as a JSON encoded string.

    +
    +product_id_domain = fields.Char(
    +    compute="_compute_product_id_domain",
    +    readonly=True,
    +    store=False,
    +)
    +
    +@api.depends('name')
    +def _compute_product_id_domain(self):
    +    for rec in self:
    +        rec.product_id_domain = json.dumps(
    +            [('type', '=', 'product'), ('name', 'like', rec.name)]
    +        )
    +
    +
    +
    +

    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

    + +
    +
    +

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

    +

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

    +
    +
    +
    + +