diff --git a/setup/web_disable_export_group/odoo/addons/web_disable_export_group b/setup/web_disable_export_group/odoo/addons/web_disable_export_group new file mode 120000 index 000000000..d8a2f35c1 --- /dev/null +++ b/setup/web_disable_export_group/odoo/addons/web_disable_export_group @@ -0,0 +1 @@ +../../../../web_disable_export_group \ No newline at end of file diff --git a/setup/web_disable_export_group/setup.py b/setup/web_disable_export_group/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/web_disable_export_group/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/web_disable_export_group/__manifest__.py b/web_disable_export_group/__manifest__.py index f17a6f1b2..f4692f43b 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.2.0.0", + "version": "15.0.2.0.0", "license": "AGPL-3", "author": "Onestein, Tecnativa, Odoo Community Association (OCA)", "website": "https://github.com/OCA/web", @@ -12,8 +12,12 @@ "depends": ["web"], "data": [ "security/groups.xml", - "templates/assets.xml", - "templates/tour_assets.xml", + "security/ir.model.access.csv", ], "installable": True, + "assets": { + "web.assets_backend": ["/web_disable_export_group/static/src/js/*.js"], + "web.assets_tests": ["/web_disable_export_group/static/src/tours/*.js"], + "web.assets_qweb": ["/web_disable_export_group/static/src/xml/**/*"], + }, } diff --git a/web_disable_export_group/migrations/14.0.1.1.0/pre-migration.py b/web_disable_export_group/migrations/14.0.1.1.0/pre-migration.py deleted file mode 100644 index 6ba053019..000000000 --- a/web_disable_export_group/migrations/14.0.1.1.0/pre-migration.py +++ /dev/null @@ -1,16 +0,0 @@ -from openupgradelib import openupgrade - - -@openupgrade.migrate() -def migrate(env, version): - # Otherwise, the migration already happened on 13.0 - if not env.ref("web_disable_export_group.group_export_xlsx_data", False): - openupgrade.rename_xmlids( - env.cr, - [ - ( - "web_disable_export_group.group_export_data", - "web_disable_export_group.group_export_xlsx_data", - ) - ], - ) diff --git a/web_disable_export_group/models/__init__.py b/web_disable_export_group/models/__init__.py index 9a5eb7187..ea997b3c5 100644 --- a/web_disable_export_group/models/__init__.py +++ b/web_disable_export_group/models/__init__.py @@ -1 +1,2 @@ from . import ir_http +from . import models diff --git a/web_disable_export_group/models/models.py b/web_disable_export_group/models/models.py new file mode 100644 index 000000000..63a911d91 --- /dev/null +++ b/web_disable_export_group/models/models.py @@ -0,0 +1,23 @@ +# Copyright 2023 Tecnativa - David Vidal +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). +from odoo import models + + +class Base(models.AbstractModel): + _inherit = "base" + + def export_data(self, fields_to_export): + """Export fields for selected objects + + :param fields_to_export: list of fields + :param raw_data: True to return value in native Python type + :rtype: dictionary with a *datas* matrix + + This method is used when exporting data via client menu + """ + if self.env.user.has_group("web_disable_export_group.group_export_xlsx_data"): + fields_to_export = [ + models.fix_import_export_id_paths(f) for f in fields_to_export + ] + return {"datas": self._export_rows(fields_to_export)} + return super().export_data(fields_to_export) diff --git a/web_disable_export_group/readme/CONFIGURE.rst b/web_disable_export_group/readme/CONFIGURE.rst index f32251f68..e1c825c1a 100644 --- a/web_disable_export_group/readme/CONFIGURE.rst +++ b/web_disable_export_group/readme/CONFIGURE.rst @@ -1,2 +1,2 @@ -Enable the group "Direct Export" to the users who are allowed to -make use of the option 'Export xlsx'. +Enable the group *Direct Export* to the users who are allowed to make use of the option +'Export xlsx' from the list view. diff --git a/web_disable_export_group/readme/CONTRIBUTORS.rst b/web_disable_export_group/readme/CONTRIBUTORS.rst index 10aca8773..fa584642e 100644 --- a/web_disable_export_group/readme/CONTRIBUTORS.rst +++ b/web_disable_export_group/readme/CONTRIBUTORS.rst @@ -9,3 +9,4 @@ * João Marques * Alexandre Díaz * Víctor Martínez + * David Vidal diff --git a/web_disable_export_group/readme/DESCRIPTION.rst b/web_disable_export_group/readme/DESCRIPTION.rst index cbe8c22ec..8e9916e39 100644 --- a/web_disable_export_group/readme/DESCRIPTION.rst +++ b/web_disable_export_group/readme/DESCRIPTION.rst @@ -1,5 +1,7 @@ -The standard export group prevents both options: 'Direct Export (xlsx)' and 'Export All'. +The standard grants/prevents access to any UI export via *Access to export feature* +group. -This module adds a new group for the 'Direct Export (xlsx)' feature, leaving the standard one for only the 'Export All' feature. +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. +Admin users 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 58da01296..e35c9bd40 100644 --- a/web_disable_export_group/readme/USAGE.rst +++ b/web_disable_export_group/readme/USAGE.rst @@ -1 +1,3 @@ -Every user without *Direct Export (xlsx)* permission won't have the option available. +- Users in the *Access to export feature* group or admins can export in any way. +- Users in the *Direct Export (xlsx)* group can only use the default export feature + from the list view. diff --git a/web_disable_export_group/security/groups.xml b/web_disable_export_group/security/groups.xml index 3eb23a749..cdcf4e0e7 100644 --- a/web_disable_export_group/security/groups.xml +++ b/web_disable_export_group/security/groups.xml @@ -4,11 +4,16 @@ Direct Export (xlsx) - + + + diff --git a/web_disable_export_group/security/ir.model.access.csv b/web_disable_export_group/security/ir.model.access.csv new file mode 100644 index 000000000..589bcc421 --- /dev/null +++ b/web_disable_export_group/security/ir.model.access.csv @@ -0,0 +1,2 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_ir_exports_group_xls","ir_exports group_xls","base.model_ir_exports","web_disable_export_group.group_export_xlsx_data",1,0,0,0 diff --git a/web_disable_export_group/static/src/js/abstract_controller.esm.js b/web_disable_export_group/static/src/js/abstract_controller.esm.js new file mode 100644 index 000000000..8576a18a2 --- /dev/null +++ b/web_disable_export_group/static/src/js/abstract_controller.esm.js @@ -0,0 +1,26 @@ +/** @odoo-module **/ +/* 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). */ +import AbstractController from "web.AbstractController"; +import session from "web.session"; + +AbstractController.include({ + /** + * @override + */ + is_action_enabled: function (action) { + if ( + !session.is_superuser && + action && + action === "export_xlsx" && + !session.group_xlsx_export_data + ) { + return false; + } + + return this._super.apply(this, arguments); + }, +}); 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 deleted file mode 100644 index 7e499443f..000000000 --- a/web_disable_export_group/static/src/js/disable_export_group.js +++ /dev/null @@ -1,31 +0,0 @@ -/* 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.WebDisableExportGroupController", function ( - require -) { - "use strict"; - - const session = require("web.session"); - const AbstractController = require("web.AbstractController"); - - AbstractController.include({ - /** - * @override - */ - is_action_enabled: function (action) { - if ( - !session.is_superuser && - action && - action.startsWith("export_xlsx") && - !session.group_xlsx_export_data - ) { - return false; - } - - return this._super.apply(this, arguments); - }, - }); -}); diff --git a/web_disable_export_group/static/src/js/list_controller.esm.js b/web_disable_export_group/static/src/js/list_controller.esm.js new file mode 100644 index 000000000..a38c4decf --- /dev/null +++ b/web_disable_export_group/static/src/js/list_controller.esm.js @@ -0,0 +1,19 @@ +/** @odoo-module **/ +/* Copyright 2018 Tecnativa - David Vidal + License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). */ +import ListController from "web.ListController"; +import session from "web.session"; + +ListController.include({ + init() { + this._super(...arguments); + this.isExportXlsEnable = false; + }, + async willStart() { + const res = await this._super(...arguments); + this.isExportXlsEnable = await session.user_has_group( + "web_disable_export_group.group_export_xlsx_data" + ); + return res; + }, +}); 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 deleted file mode 100644 index 119e38337..000000000 --- a/web_disable_export_group/static/src/js/web_disable_export_group_tour.js +++ /dev/null @@ -1,39 +0,0 @@ -/* 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 tour = require("web_tour.tour"); - - tour.register( - "export_tour_xlsx_button_ok", - { - test: true, - url: - "/web#model=ir.ui.view&view_type=list&cids=&action=base.action_ui_view", - }, - [ - { - content: "Check if 'Export all' button exists", - trigger: ".o_list_buttons:has(.o_list_export_xlsx)", - }, - ] - ); - tour.register( - "export_tour_xlsx_button_ko", - { - test: true, - url: - "/web#model=ir.ui.view&view_type=list&cids=&action=base.action_ui_view", - }, - [ - { - content: "Check if 'Export all' button exists", - trigger: ".o_list_buttons:not(:has(.o_list_export_xlsx))", - }, - ] - ); - return {}; -}); diff --git a/web_disable_export_group/static/src/tours/web_disable_export_group_tour.esm.js b/web_disable_export_group/static/src/tours/web_disable_export_group_tour.esm.js new file mode 100644 index 000000000..1702df8d6 --- /dev/null +++ b/web_disable_export_group/static/src/tours/web_disable_export_group_tour.esm.js @@ -0,0 +1,33 @@ +/** @odoo-module **/ +/* 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). */ + +import tour from "web_tour.tour"; + +tour.register( + "export_tour_xlsx_button_ok", + { + test: true, + url: "/web#model=ir.ui.view&view_type=list&cids=&action=base.action_ui_view", + }, + [ + { + content: "Check if 'Export all' button exists", + trigger: ".o_list_buttons:has(.o_list_export_xlsx)", + }, + ] +); +tour.register( + "export_tour_xlsx_button_ko", + { + test: true, + url: "/web#model=ir.ui.view&view_type=list&cids=&action=base.action_ui_view", + }, + [ + { + content: "Check if 'Export all' button exists", + trigger: ".o_list_buttons:not(:has(.o_list_export_xlsx))", + }, + ] +); diff --git a/web_disable_export_group/static/src/xml/export_xls_views.xml b/web_disable_export_group/static/src/xml/export_xls_views.xml new file mode 100644 index 000000000..84fecc27a --- /dev/null +++ b/web_disable_export_group/static/src/xml/export_xls_views.xml @@ -0,0 +1,12 @@ + + + + + + widget.is_action_enabled('export_xlsx') and widget.isExportXlsEnable + + + + diff --git a/web_disable_export_group/templates/assets.xml b/web_disable_export_group/templates/assets.xml deleted file mode 100644 index ec5155977..000000000 --- a/web_disable_export_group/templates/assets.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - -