From bda5ee858c333dee43f553ca23002e132260f227 Mon Sep 17 00:00:00 2001 From: ArnauCForgeFlow Date: Tue, 19 Nov 2024 16:36:15 +0100 Subject: [PATCH 1/9] [ADD] web_excel_export_dynamic_expand --- web_excel_export_dynamic_expand/README.rst | 78 ++++ web_excel_export_dynamic_expand/__init__.py | 1 + .../__manifest__.py | 18 + .../controllers/__init__.py | 1 + .../controllers/excel_export.py | 38 ++ .../readme/CONTRIBUTORS.rst | 2 + .../readme/DESCRIPTION.rst | 2 + .../static/description/index.html | 424 ++++++++++++++++++ .../static/src/js/data_export.esm.js | 24 + 9 files changed, 588 insertions(+) create mode 100644 web_excel_export_dynamic_expand/README.rst create mode 100644 web_excel_export_dynamic_expand/__init__.py create mode 100644 web_excel_export_dynamic_expand/__manifest__.py create mode 100644 web_excel_export_dynamic_expand/controllers/__init__.py create mode 100644 web_excel_export_dynamic_expand/controllers/excel_export.py create mode 100644 web_excel_export_dynamic_expand/readme/CONTRIBUTORS.rst create mode 100644 web_excel_export_dynamic_expand/readme/DESCRIPTION.rst create mode 100644 web_excel_export_dynamic_expand/static/description/index.html create mode 100644 web_excel_export_dynamic_expand/static/src/js/data_export.esm.js diff --git a/web_excel_export_dynamic_expand/README.rst b/web_excel_export_dynamic_expand/README.rst new file mode 100644 index 000000000000..d39347b2dd85 --- /dev/null +++ b/web_excel_export_dynamic_expand/README.rst @@ -0,0 +1,78 @@ +=============================== +Web Excel Export Dynamic Expand +=============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:ee1ab26433dfe8bd1d3489d5051728dd84a7583b5dc50d0d47a95e71b1e28c67 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/15.0/web_excel_export_dynamic_expand + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_excel_export_dynamic_expand + :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/web&target_branch=15.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +When exporting a tree view to an Excel file, you can decide if you want to expor only +the main groups or the full tree, depending if all groups are collapsed, or there is one open. + +**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 +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Arnau Cruz + + +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/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_excel_export_dynamic_expand/__init__.py b/web_excel_export_dynamic_expand/__init__.py new file mode 100644 index 000000000000..e046e49fbe22 --- /dev/null +++ b/web_excel_export_dynamic_expand/__init__.py @@ -0,0 +1 @@ +from . import controllers diff --git a/web_excel_export_dynamic_expand/__manifest__.py b/web_excel_export_dynamic_expand/__manifest__.py new file mode 100644 index 000000000000..77c1a2f1be5b --- /dev/null +++ b/web_excel_export_dynamic_expand/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright (C) 2024 - ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Web Excel Export Dynamic Expand", + "summary": "Export collapsed groups or the full tree, based on its view.", + "version": "15.0.1.0.0", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web", + "license": "AGPL-3", + "depends": ["web"], + "data": [], + "assets": { + "web.assets_backend": [ + "web_excel_export_dynamic_expand/static/src/js/data_export.esm.js", + ], + }, +} diff --git a/web_excel_export_dynamic_expand/controllers/__init__.py b/web_excel_export_dynamic_expand/controllers/__init__.py new file mode 100644 index 000000000000..14a7468918e2 --- /dev/null +++ b/web_excel_export_dynamic_expand/controllers/__init__.py @@ -0,0 +1 @@ +from . import excel_export diff --git a/web_excel_export_dynamic_expand/controllers/excel_export.py b/web_excel_export_dynamic_expand/controllers/excel_export.py new file mode 100644 index 000000000000..4c702f61b5f8 --- /dev/null +++ b/web_excel_export_dynamic_expand/controllers/excel_export.py @@ -0,0 +1,38 @@ +# Copyright 2024 ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import json +from collections import OrderedDict + +from odoo import http + +from odoo.addons.web.controllers.main import ExcelExport + + +class CustomGroupsTreeNode(ExcelExport): + @http.route("/web/export/xlsx", type="http", auth="user") + def index(self, data): + params = json.loads(data) + self.context = params.get("context", {}) + response = super().index(data) + return response + + @property + def context(self): + return self._context + + @context.setter + def context(self, value): + self._context = value + + def from_group_data(self, fields, groups): + collapse_groups = self.context.get("collapse_groups") + if collapse_groups: + for _child_key, child_node in groups.children.items(): + aggregated_values = child_node.aggregated_values + if child_node.children: + child_node.children = OrderedDict() + if child_node.data: + child_node.data = [] + child_node.aggregated_values = aggregated_values + return super().from_group_data(fields, groups) diff --git a/web_excel_export_dynamic_expand/readme/CONTRIBUTORS.rst b/web_excel_export_dynamic_expand/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..fd654f2a6df1 --- /dev/null +++ b/web_excel_export_dynamic_expand/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Arnau Cruz + diff --git a/web_excel_export_dynamic_expand/readme/DESCRIPTION.rst b/web_excel_export_dynamic_expand/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..9884f7cbad97 --- /dev/null +++ b/web_excel_export_dynamic_expand/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +When exporting a tree view to an Excel file, you can decide if you want to export only +the main groups or the full tree, depending if all groups are collapsed, or there is one open. diff --git a/web_excel_export_dynamic_expand/static/description/index.html b/web_excel_export_dynamic_expand/static/description/index.html new file mode 100644 index 000000000000..3284c2d17c0d --- /dev/null +++ b/web_excel_export_dynamic_expand/static/description/index.html @@ -0,0 +1,424 @@ + + + + + +Web Excel Export Dynamic Expand + + + +
+

Web Excel Export Dynamic Expand

+ + +

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

+

When exporting a tree view to an Excel file, you can decide if you want to expor only +the main groups or the full tree, depending if all groups are collapsed, or there is one open.

+

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

+
    +
  • ForgeFlow
  • +
+
+ +
+

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.

+
+
+
+ + diff --git a/web_excel_export_dynamic_expand/static/src/js/data_export.esm.js b/web_excel_export_dynamic_expand/static/src/js/data_export.esm.js new file mode 100644 index 000000000000..1b5862d96ef5 --- /dev/null +++ b/web_excel_export_dynamic_expand/static/src/js/data_export.esm.js @@ -0,0 +1,24 @@ +/* Copyright 2024 Forgeflow + License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ +odoo.define("web_excel_export_dynamic_expand.DataExport", function (require) { + var DataExport = require("web.DataExport"); + + DataExport.include({ + /** + * @override + */ + _exportData: function () { + var hasDataRow = $(".o_data_row").length > 0; + var hasGroup = $(".o_group_header").length > 0; + var collapseGroups = !hasDataRow && hasGroup; + + var originalGetContext = this.record.getContext; + this.record.getContext = function () { + var context = originalGetContext.call(this); + context.collapse_groups = collapseGroups; + return context; + }; + this._super(...arguments); + }, + }); +}); From 6f4d7179ba2ffd7e736dd25b40e76f97a4091dcc Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 5 May 2025 16:44:57 +0000 Subject: [PATCH 2/9] [UPD] Update web_excel_export_dynamic_expand.pot --- .../i18n/web_excel_export_dynamic_expand.pot | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot diff --git a/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot b/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot new file mode 100644 index 000000000000..a11baf5cd77c --- /dev/null +++ b/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot @@ -0,0 +1,13 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.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" From 99c5fc1af77f4bc63efbda68fc705712a7f7a128 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 5 May 2025 16:48:20 +0000 Subject: [PATCH 3/9] [BOT] post-merge updates --- web_excel_export_dynamic_expand/README.rst | 4 ++-- .../static/description/icon.png | Bin 0 -> 10254 bytes .../static/description/index.html | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 web_excel_export_dynamic_expand/static/description/icon.png diff --git a/web_excel_export_dynamic_expand/README.rst b/web_excel_export_dynamic_expand/README.rst index d39347b2dd85..4319a5c6794f 100644 --- a/web_excel_export_dynamic_expand/README.rst +++ b/web_excel_export_dynamic_expand/README.rst @@ -7,7 +7,7 @@ Web Excel Export Dynamic Expand !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ee1ab26433dfe8bd1d3489d5051728dd84a7583b5dc50d0d47a95e71b1e28c67 + !! source digest: sha256:5ad1b7f0aa063083e8b6f4dc47af3a7a7b3f85ada220e2e86483a74c0e1129f3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -28,7 +28,7 @@ Web Excel Export Dynamic Expand |badge1| |badge2| |badge3| |badge4| |badge5| -When exporting a tree view to an Excel file, you can decide if you want to expor only +When exporting a tree view to an Excel file, you can decide if you want to export only the main groups or the full tree, depending if all groups are collapsed, or there is one open. **Table of contents** diff --git a/web_excel_export_dynamic_expand/static/description/icon.png b/web_excel_export_dynamic_expand/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcc49c24f364e9adf0afbc6fc0bac6dbecdeb11 GIT binary patch literal 10254 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 Excel Export Dynamic Expand !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:ee1ab26433dfe8bd1d3489d5051728dd84a7583b5dc50d0d47a95e71b1e28c67 +!! source digest: sha256:5ad1b7f0aa063083e8b6f4dc47af3a7a7b3f85ada220e2e86483a74c0e1129f3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

-

When exporting a tree view to an Excel file, you can decide if you want to expor only +

When exporting a tree view to an Excel file, you can decide if you want to export only the main groups or the full tree, depending if all groups are collapsed, or there is one open.

Table of contents

From e009b2bc6c1330fb7dac1b89287f281d0988ed69 Mon Sep 17 00:00:00 2001 From: Arnau Date: Thu, 7 Aug 2025 11:26:58 +0200 Subject: [PATCH 4/9] [IMP] web_excel_export_dynamic_expand: pre-commit auto fixes --- web_excel_export_dynamic_expand/README.rst | 24 +++++++++---------- .../pyproject.toml | 3 +++ .../readme/CONTRIBUTORS.md | 1 + .../readme/CONTRIBUTORS.rst | 2 -- .../readme/DESCRIPTION.md | 3 +++ .../readme/DESCRIPTION.rst | 2 -- .../static/description/index.html | 11 +++++---- 7 files changed, 25 insertions(+), 21 deletions(-) create mode 100644 web_excel_export_dynamic_expand/pyproject.toml create mode 100644 web_excel_export_dynamic_expand/readme/CONTRIBUTORS.md delete mode 100644 web_excel_export_dynamic_expand/readme/CONTRIBUTORS.rst create mode 100644 web_excel_export_dynamic_expand/readme/DESCRIPTION.md delete mode 100644 web_excel_export_dynamic_expand/readme/DESCRIPTION.rst diff --git a/web_excel_export_dynamic_expand/README.rst b/web_excel_export_dynamic_expand/README.rst index 4319a5c6794f..be552181b08f 100644 --- a/web_excel_export_dynamic_expand/README.rst +++ b/web_excel_export_dynamic_expand/README.rst @@ -17,19 +17,20 @@ Web Excel Export Dynamic Expand :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/15.0/web_excel_export_dynamic_expand + :target: https://github.com/OCA/web/tree/18.0/web_excel_export_dynamic_expand :alt: OCA/web .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_excel_export_dynamic_expand + :target: https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_excel_export_dynamic_expand :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/web&target_branch=15.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| -When exporting a tree view to an Excel file, you can decide if you want to export only -the main groups or the full tree, depending if all groups are collapsed, or there is one open. +When exporting a tree view to an Excel file, you can decide if you want +to export only the main groups or the full tree, depending if all groups +are collapsed, or there is one open. **Table of contents** @@ -42,7 +43,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -50,18 +51,17 @@ Credits ======= Authors -~~~~~~~ +------- * ForgeFlow Contributors -~~~~~~~~~~~~ - -* Arnau Cruz +------------ +- Arnau Cruz Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -73,6 +73,6 @@ 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. +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_excel_export_dynamic_expand/pyproject.toml b/web_excel_export_dynamic_expand/pyproject.toml new file mode 100644 index 000000000000..4231d0cccb3d --- /dev/null +++ b/web_excel_export_dynamic_expand/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/web_excel_export_dynamic_expand/readme/CONTRIBUTORS.md b/web_excel_export_dynamic_expand/readme/CONTRIBUTORS.md new file mode 100644 index 000000000000..05cf886890dd --- /dev/null +++ b/web_excel_export_dynamic_expand/readme/CONTRIBUTORS.md @@ -0,0 +1 @@ +- Arnau Cruz \ diff --git a/web_excel_export_dynamic_expand/readme/CONTRIBUTORS.rst b/web_excel_export_dynamic_expand/readme/CONTRIBUTORS.rst deleted file mode 100644 index fd654f2a6df1..000000000000 --- a/web_excel_export_dynamic_expand/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,2 +0,0 @@ -* Arnau Cruz - diff --git a/web_excel_export_dynamic_expand/readme/DESCRIPTION.md b/web_excel_export_dynamic_expand/readme/DESCRIPTION.md new file mode 100644 index 000000000000..a4c59ad43d70 --- /dev/null +++ b/web_excel_export_dynamic_expand/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +When exporting a tree view to an Excel file, you can decide if you want +to export only the main groups or the full tree, depending if all groups +are collapsed, or there is one open. diff --git a/web_excel_export_dynamic_expand/readme/DESCRIPTION.rst b/web_excel_export_dynamic_expand/readme/DESCRIPTION.rst deleted file mode 100644 index 9884f7cbad97..000000000000 --- a/web_excel_export_dynamic_expand/readme/DESCRIPTION.rst +++ /dev/null @@ -1,2 +0,0 @@ -When exporting a tree view to an Excel file, you can decide if you want to export only -the main groups or the full tree, depending if all groups are collapsed, or there is one open. diff --git a/web_excel_export_dynamic_expand/static/description/index.html b/web_excel_export_dynamic_expand/static/description/index.html index 704d38f5c08e..69be98684075 100644 --- a/web_excel_export_dynamic_expand/static/description/index.html +++ b/web_excel_export_dynamic_expand/static/description/index.html @@ -369,9 +369,10 @@

Web Excel Export Dynamic Expand

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:5ad1b7f0aa063083e8b6f4dc47af3a7a7b3f85ada220e2e86483a74c0e1129f3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

-

When exporting a tree view to an Excel file, you can decide if you want to export only -the main groups or the full tree, depending if all groups are collapsed, or there is one open.

+

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

+

When exporting a tree view to an Excel file, you can decide if you want +to export only the main groups or the full tree, depending if all groups +are collapsed, or there is one open.

Table of contents

    @@ -389,7 +390,7 @@

    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.

    +feedback.

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

@@ -415,7 +416,7 @@

Maintainers

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.

+

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.

From d775b7a41f38fd6a3dbbfb00181fc4c6dd06f81a Mon Sep 17 00:00:00 2001 From: Arnau Date: Thu, 7 Aug 2025 14:17:21 +0200 Subject: [PATCH 5/9] [MIG] web_excel_export_dynamic_expand: Migration to 18.0 --- .../__manifest__.py | 2 +- .../controllers/excel_export.py | 10 +++--- .../static/src/js/data_export.esm.js | 35 ++++++++----------- 3 files changed, 20 insertions(+), 27 deletions(-) diff --git a/web_excel_export_dynamic_expand/__manifest__.py b/web_excel_export_dynamic_expand/__manifest__.py index 77c1a2f1be5b..c7829110e1cf 100644 --- a/web_excel_export_dynamic_expand/__manifest__.py +++ b/web_excel_export_dynamic_expand/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Web Excel Export Dynamic Expand", "summary": "Export collapsed groups or the full tree, based on its view.", - "version": "15.0.1.0.0", + "version": "18.0.1.0.0", "author": "ForgeFlow, Odoo Community Association (OCA)", "website": "https://github.com/OCA/web", "license": "AGPL-3", diff --git a/web_excel_export_dynamic_expand/controllers/excel_export.py b/web_excel_export_dynamic_expand/controllers/excel_export.py index 4c702f61b5f8..a5d96f866abb 100644 --- a/web_excel_export_dynamic_expand/controllers/excel_export.py +++ b/web_excel_export_dynamic_expand/controllers/excel_export.py @@ -6,15 +6,15 @@ from odoo import http -from odoo.addons.web.controllers.main import ExcelExport +from odoo.addons.web.controllers.export import ExcelExport class CustomGroupsTreeNode(ExcelExport): @http.route("/web/export/xlsx", type="http", auth="user") - def index(self, data): + def web_export_xlsx(self, data): params = json.loads(data) self.context = params.get("context", {}) - response = super().index(data) + response = super().web_export_xlsx(data) return response @property @@ -25,7 +25,7 @@ def context(self): def context(self, value): self._context = value - def from_group_data(self, fields, groups): + def from_group_data(self, fields, columns_headers, groups): collapse_groups = self.context.get("collapse_groups") if collapse_groups: for _child_key, child_node in groups.children.items(): @@ -35,4 +35,4 @@ def from_group_data(self, fields, groups): if child_node.data: child_node.data = [] child_node.aggregated_values = aggregated_values - return super().from_group_data(fields, groups) + return super().from_group_data(fields, columns_headers, groups) diff --git a/web_excel_export_dynamic_expand/static/src/js/data_export.esm.js b/web_excel_export_dynamic_expand/static/src/js/data_export.esm.js index 1b5862d96ef5..96158ab00cb2 100644 --- a/web_excel_export_dynamic_expand/static/src/js/data_export.esm.js +++ b/web_excel_export_dynamic_expand/static/src/js/data_export.esm.js @@ -1,24 +1,17 @@ -/* Copyright 2024 Forgeflow - License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */ -odoo.define("web_excel_export_dynamic_expand.DataExport", function (require) { - var DataExport = require("web.DataExport"); +import {patch} from "@web/core/utils/patch"; +import {ListController} from "@web/views/list/list_controller"; - DataExport.include({ - /** - * @override - */ - _exportData: function () { - var hasDataRow = $(".o_data_row").length > 0; - var hasGroup = $(".o_group_header").length > 0; - var collapseGroups = !hasDataRow && hasGroup; +patch(ListController.prototype, { + async downloadExport() { + const hasDataRow = document.querySelectorAll(".o_data_row").length > 0; + const hasGroup = document.querySelectorAll(".o_group_header").length > 0; + const collapseGroups = !hasDataRow && hasGroup; - var originalGetContext = this.record.getContext; - this.record.getContext = function () { - var context = originalGetContext.call(this); - context.collapse_groups = collapseGroups; - return context; - }; - this._super(...arguments); - }, - }); + this.props.context = { + ...this.props.context, + collapse_groups: collapseGroups, + }; + + await super.downloadExport(...arguments); + }, }); From d3657d5b9a425e2037d763d2f79cc32eecf8c179 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 8 Sep 2025 13:04:15 +0000 Subject: [PATCH 6/9] [UPD] Update web_excel_export_dynamic_expand.pot --- .../i18n/web_excel_export_dynamic_expand.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot b/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot index a11baf5cd77c..aadee09bfeda 100644 --- a/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot +++ b/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot @@ -3,7 +3,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" From ccfa84ac1b2c05e8e9e88811909d589eeca2ff2e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 8 Sep 2025 13:09:46 +0000 Subject: [PATCH 7/9] [BOT] post-merge updates --- web_excel_export_dynamic_expand/README.rst | 8 ++++-- .../static/description/index.html | 26 ++++++++++++------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/web_excel_export_dynamic_expand/README.rst b/web_excel_export_dynamic_expand/README.rst index be552181b08f..91705a9b6a1d 100644 --- a/web_excel_export_dynamic_expand/README.rst +++ b/web_excel_export_dynamic_expand/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + =============================== Web Excel Export Dynamic Expand =============================== @@ -7,13 +11,13 @@ Web Excel Export Dynamic Expand !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5ad1b7f0aa063083e8b6f4dc47af3a7a7b3f85ada220e2e86483a74c0e1129f3 + !! source digest: sha256:0ebaf3ae34e14b004119de667f5e9923e0e3cc6a0e57349fd4b860af03a2b9c2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 +.. |badge2| image:: https://img.shields.io/badge/license-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 diff --git a/web_excel_export_dynamic_expand/static/description/index.html b/web_excel_export_dynamic_expand/static/description/index.html index 69be98684075..efbef42210e4 100644 --- a/web_excel_export_dynamic_expand/static/description/index.html +++ b/web_excel_export_dynamic_expand/static/description/index.html @@ -3,7 +3,7 @@ -Web Excel Export Dynamic Expand +README.rst -
-

Web Excel Export Dynamic Expand

+
+ + +Odoo Community Association + +
+

Web Excel Export Dynamic Expand

-

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

+

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

When exporting a tree view to an Excel file, you can decide if you want to export only the main groups or the full tree, depending if all groups are collapsed, or there is one open.

@@ -386,7 +391,7 @@

Web Excel Export Dynamic Expand

-

Bug Tracker

+

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 @@ -394,21 +399,21 @@

Bug Tracker

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

+
From c47e8303ea041d9c14aff09c84d7fd23ab4e3a2c Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 9 Sep 2025 10:49:56 +0000 Subject: [PATCH 8/9] Added translation using Weblate (Italian) --- web_excel_export_dynamic_expand/i18n/it.po | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 web_excel_export_dynamic_expand/i18n/it.po diff --git a/web_excel_export_dynamic_expand/i18n/it.po b/web_excel_export_dynamic_expand/i18n/it.po new file mode 100644 index 000000000000..c0d5085374bd --- /dev/null +++ b/web_excel_export_dynamic_expand/i18n/it.po @@ -0,0 +1,14 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\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" From 7b8fea130a2db90a3a29c9b2d27cf4dd1595da97 Mon Sep 17 00:00:00 2001 From: prayag Date: Fri, 17 Jul 2026 15:28:27 +0530 Subject: [PATCH 9/9] [MIG] web_excel_export_dynamic_expand: Migration to 19.0 --- web_excel_export_dynamic_expand/README.rst | 14 ++-- .../__manifest__.py | 2 +- web_excel_export_dynamic_expand/i18n/it.po | 2 +- .../i18n/web_excel_export_dynamic_expand.pot | 2 +- .../readme/DESCRIPTION.md | 2 +- .../static/description/index.html | 10 +-- .../static/src/js/data_export.esm.js | 39 ++++++--- .../tests/__init__.py | 1 + .../tests/test_excel_export.py | 80 +++++++++++++++++++ 9 files changed, 127 insertions(+), 25 deletions(-) create mode 100644 web_excel_export_dynamic_expand/tests/__init__.py create mode 100644 web_excel_export_dynamic_expand/tests/test_excel_export.py diff --git a/web_excel_export_dynamic_expand/README.rst b/web_excel_export_dynamic_expand/README.rst index 91705a9b6a1d..5e8407e41f76 100644 --- a/web_excel_export_dynamic_expand/README.rst +++ b/web_excel_export_dynamic_expand/README.rst @@ -21,20 +21,20 @@ Web Excel Export Dynamic Expand :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/18.0/web_excel_export_dynamic_expand + :target: https://github.com/OCA/web/tree/19.0/web_excel_export_dynamic_expand :alt: OCA/web .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_excel_export_dynamic_expand + :target: https://translation.odoo-community.org/projects/web-19-0/web-19-0-web_excel_export_dynamic_expand :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/web&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| When exporting a tree view to an Excel file, you can decide if you want -to export only the main groups or the full tree, depending if all groups -are collapsed, or there is one open. +to export only the main groups or the full tree, depending on if all +groups are collapsed, or there is one open. **Table of contents** @@ -47,7 +47,7 @@ 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -77,6 +77,6 @@ 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. +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_excel_export_dynamic_expand/__manifest__.py b/web_excel_export_dynamic_expand/__manifest__.py index c7829110e1cf..962b71739097 100644 --- a/web_excel_export_dynamic_expand/__manifest__.py +++ b/web_excel_export_dynamic_expand/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Web Excel Export Dynamic Expand", "summary": "Export collapsed groups or the full tree, based on its view.", - "version": "18.0.1.0.0", + "version": "19.0.1.0.0", "author": "ForgeFlow, Odoo Community Association (OCA)", "website": "https://github.com/OCA/web", "license": "AGPL-3", diff --git a/web_excel_export_dynamic_expand/i18n/it.po b/web_excel_export_dynamic_expand/i18n/it.po index c0d5085374bd..5eaf2c20946c 100644 --- a/web_excel_export_dynamic_expand/i18n/it.po +++ b/web_excel_export_dynamic_expand/i18n/it.po @@ -3,7 +3,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" diff --git a/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot b/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot index aadee09bfeda..6603b4a88cd9 100644 --- a/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot +++ b/web_excel_export_dynamic_expand/i18n/web_excel_export_dynamic_expand.pot @@ -3,7 +3,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/web_excel_export_dynamic_expand/readme/DESCRIPTION.md b/web_excel_export_dynamic_expand/readme/DESCRIPTION.md index a4c59ad43d70..86a4b3cb99a2 100644 --- a/web_excel_export_dynamic_expand/readme/DESCRIPTION.md +++ b/web_excel_export_dynamic_expand/readme/DESCRIPTION.md @@ -1,3 +1,3 @@ When exporting a tree view to an Excel file, you can decide if you want -to export only the main groups or the full tree, depending if all groups +to export only the main groups or the full tree, depending on if all groups are collapsed, or there is one open. diff --git a/web_excel_export_dynamic_expand/static/description/index.html b/web_excel_export_dynamic_expand/static/description/index.html index efbef42210e4..de95bb4d6916 100644 --- a/web_excel_export_dynamic_expand/static/description/index.html +++ b/web_excel_export_dynamic_expand/static/description/index.html @@ -374,10 +374,10 @@

Web Excel Export Dynamic Expand

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:0ebaf3ae34e14b004119de667f5e9923e0e3cc6a0e57349fd4b860af03a2b9c2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

When exporting a tree view to an Excel file, you can decide if you want -to export only the main groups or the full tree, depending if all groups -are collapsed, or there is one open.

+to export only the main groups or the full tree, depending on if all +groups are collapsed, or there is one open.

Table of contents

    @@ -395,7 +395,7 @@

    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.

    +feedback.

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

@@ -421,7 +421,7 @@

Maintainers

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.

+

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_excel_export_dynamic_expand/static/src/js/data_export.esm.js b/web_excel_export_dynamic_expand/static/src/js/data_export.esm.js index 96158ab00cb2..19a7fb9ba427 100644 --- a/web_excel_export_dynamic_expand/static/src/js/data_export.esm.js +++ b/web_excel_export_dynamic_expand/static/src/js/data_export.esm.js @@ -1,17 +1,38 @@ import {patch} from "@web/core/utils/patch"; import {ListController} from "@web/views/list/list_controller"; +import {useBus} from "@web/core/utils/hooks"; + +function computeCollapseGroups(root) { + const groups = root.groups; // Undefined/empty for ungrouped lists + return ( + Array.isArray(groups) && groups.length > 0 && groups.every((g) => g.isFolded) + ); +} patch(ListController.prototype, { - async downloadExport() { - const hasDataRow = document.querySelectorAll(".o_data_row").length > 0; - const hasGroup = document.querySelectorAll(".o_group_header").length > 0; - const collapseGroups = !hasDataRow && hasGroup; + setup() { + const searchModel = this.env.searchModel; + if (searchModel) { + useBus(searchModel, "direct-export-data", () => { + if (this.model && this.model.root) { + this.model.root.config.context = { + ...this.model.root.config.context, + collapse_groups: computeCollapseGroups(this.model.root), + }; + } + }); + } + super.setup(...arguments); - this.props.context = { - ...this.props.context, - collapse_groups: collapseGroups, + const originalExportRecords = this.exportRecords; + this.exportRecords = async (...args) => { + if (this.model && this.model.root) { + this.model.root.config.context = { + ...this.model.root.config.context, + collapse_groups: computeCollapseGroups(this.model.root), + }; + } + return originalExportRecords.call(this, ...args); }; - - await super.downloadExport(...arguments); }, }); diff --git a/web_excel_export_dynamic_expand/tests/__init__.py b/web_excel_export_dynamic_expand/tests/__init__.py new file mode 100644 index 000000000000..e08618ff665a --- /dev/null +++ b/web_excel_export_dynamic_expand/tests/__init__.py @@ -0,0 +1 @@ +from . import test_excel_export diff --git a/web_excel_export_dynamic_expand/tests/test_excel_export.py b/web_excel_export_dynamic_expand/tests/test_excel_export.py new file mode 100644 index 000000000000..b490f9c98e35 --- /dev/null +++ b/web_excel_export_dynamic_expand/tests/test_excel_export.py @@ -0,0 +1,80 @@ +# Copyright 2024 ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import json +from collections import OrderedDict +from unittest.mock import patch + +from odoo.tests.common import TransactionCase + +from odoo.addons.web_excel_export_dynamic_expand.controllers.excel_export import ( + CustomGroupsTreeNode, +) + + +class MockGroupNode: + def __init__(self, children=None, data=None, aggregated_values=None): + self.children = OrderedDict(children) if children else OrderedDict() + self.data = data or [] + self.aggregated_values = aggregated_values or {} + + +class TestExcelExportDynamicExpand(TransactionCase): + def setUp(self): + super().setUp() + self.controller = CustomGroupsTreeNode() + + @patch("odoo.addons.web.controllers.export.ExcelExport.web_export_xlsx") + def test_web_export_xlsx_context(self, mock_super_export): + mock_super_export.return_value = "dummy_response" + data = json.dumps({"context": {"collapse_groups": True}}) + + response = self.controller.web_export_xlsx(data) + + if hasattr(response, "data"): + self.assertEqual(response.data, b"dummy_response") + else: + self.assertEqual(response, "dummy_response") + + self.assertEqual(self.controller.context.get("collapse_groups"), True) + mock_super_export.assert_called_once_with(data) + + @patch("odoo.addons.web.controllers.export.ExcelExport.from_group_data") + def test_from_group_data_collapse(self, mock_super_from_group_data): + self.controller.context = {"collapse_groups": True} + + child1 = MockGroupNode( + data=[1, 2], + aggregated_values={"val": 10}, + children={"sub": MockGroupNode()}, + ) + groups = MockGroupNode(children={"child1": child1}) + + self.controller.from_group_data([], [], groups) + + self.assertEqual(child1.children, OrderedDict()) + self.assertEqual(child1.data, []) + self.assertEqual(child1.aggregated_values, {"val": 10}) + mock_super_from_group_data.assert_called_once() + + @patch("odoo.addons.web.controllers.export.ExcelExport.from_group_data") + def test_from_group_data_no_collapse(self, mock_super_from_group_data): + self.controller.context = {"collapse_groups": False} + + child1 = MockGroupNode( + data=[1, 2], + aggregated_values={"val": 10}, + children={"sub": MockGroupNode()}, + ) + groups = MockGroupNode(children={"child1": child1}) + + self.controller.from_group_data([], [], groups) + + self.assertEqual(len(child1.children), 1) + self.assertEqual(child1.data, [1, 2]) + self.assertEqual(child1.aggregated_values, {"val": 10}) + mock_super_from_group_data.assert_called_once() + + def test_context_property(self): + self.controller.context = {"test": 1} + self.assertEqual(self.controller.context, {"test": 1})