From fbc2378d463006dee53d31ab75746d172ab5b760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 3 Apr 2024 10:10:24 +0200 Subject: [PATCH 1/3] [ADD] product_attachment_zipped_download: New module TT48578 [UPD] Update product_attachment_zipped_download.pot Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: product-attribute-15.0/product-attribute-15.0-product_attachment_zipped_download Translate-URL: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_attachment_zipped_download/ --- product_attachment_zipped_download/README.rst | 87 ++++ .../__init__.py | 1 + .../__manifest__.py | 14 + product_attachment_zipped_download/i18n/es.po | 35 ++ .../product_attachment_zipped_download.pot | 30 ++ .../models/__init__.py | 2 + .../models/product_product.py | 23 + .../models/product_template.py | 23 + .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 427 ++++++++++++++++++ .../tests/__init__.py | 3 + ...test_product_attachment_zipped_download.py | 99 ++++ .../views/product_product_views.xml | 13 + .../views/product_template_views.xml | 16 + 16 files changed, 778 insertions(+) create mode 100644 product_attachment_zipped_download/README.rst create mode 100644 product_attachment_zipped_download/__init__.py create mode 100644 product_attachment_zipped_download/__manifest__.py create mode 100644 product_attachment_zipped_download/i18n/es.po create mode 100644 product_attachment_zipped_download/i18n/product_attachment_zipped_download.pot create mode 100644 product_attachment_zipped_download/models/__init__.py create mode 100644 product_attachment_zipped_download/models/product_product.py create mode 100644 product_attachment_zipped_download/models/product_template.py create mode 100644 product_attachment_zipped_download/readme/CONTRIBUTORS.rst create mode 100644 product_attachment_zipped_download/readme/DESCRIPTION.rst create mode 100644 product_attachment_zipped_download/static/description/icon.png create mode 100644 product_attachment_zipped_download/static/description/index.html create mode 100644 product_attachment_zipped_download/tests/__init__.py create mode 100644 product_attachment_zipped_download/tests/test_product_attachment_zipped_download.py create mode 100644 product_attachment_zipped_download/views/product_product_views.xml create mode 100644 product_attachment_zipped_download/views/product_template_views.xml diff --git a/product_attachment_zipped_download/README.rst b/product_attachment_zipped_download/README.rst new file mode 100644 index 00000000000..89ad0d41de0 --- /dev/null +++ b/product_attachment_zipped_download/README.rst @@ -0,0 +1,87 @@ +================================== +Product Attachment Zipped Download +================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:83ad066d1fff91f3a30547d9094b4d4bacd0e7614498a95854047bb2e9e52f0b + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/15.0/product_attachment_zipped_download + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_attachment_zipped_download + :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/product-attribute&target_branch=15.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows the possibility to download attachments in a .zip file of the selected products. + +**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 +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza + +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. + +.. |maintainer-victoralmau| image:: https://github.com/victoralmau.png?size=40px + :target: https://github.com/victoralmau + :alt: victoralmau + +Current `maintainer `__: + +|maintainer-victoralmau| + +This module is part of the `OCA/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_attachment_zipped_download/__init__.py b/product_attachment_zipped_download/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/product_attachment_zipped_download/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_attachment_zipped_download/__manifest__.py b/product_attachment_zipped_download/__manifest__.py new file mode 100644 index 00000000000..d140c5ed0a9 --- /dev/null +++ b/product_attachment_zipped_download/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Product Attachment Zipped Download", + "version": "15.0.1.0.0", + "category": "Product Management", + "website": "https://github.com/OCA/product-attribute", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": ["attachment_zipped_download", "product"], + "data": ["views/product_product_views.xml", "views/product_template_views.xml"], + "installable": True, + "maintainers": ["victoralmau"], +} diff --git a/product_attachment_zipped_download/i18n/es.po b/product_attachment_zipped_download/i18n/es.po new file mode 100644 index 00000000000..8cd23a023a4 --- /dev/null +++ b/product_attachment_zipped_download/i18n/es.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_attachment_zipped_download +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 07:00+0000\n" +"PO-Revision-Date: 2024-04-15 09:01+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 3.0.1\n" + +#. module: product_attachment_zipped_download +#: model:ir.actions.server,name:product_attachment_zipped_download.action_download_product_product_attachements +#: model:ir.actions.server,name:product_attachment_zipped_download.action_download_product_template_attachements +msgid "Download attachments" +msgstr "Descargar adjuntos" + +#. module: product_attachment_zipped_download +#: model:ir.model,name:product_attachment_zipped_download.model_product_product +#, fuzzy +msgid "Product" +msgstr "Producto" + +#. module: product_attachment_zipped_download +#: model:ir.model,name:product_attachment_zipped_download.model_product_template +msgid "Product Template" +msgstr "Plantilla de producto" diff --git a/product_attachment_zipped_download/i18n/product_attachment_zipped_download.pot b/product_attachment_zipped_download/i18n/product_attachment_zipped_download.pot new file mode 100644 index 00000000000..eb4b81b13ac --- /dev/null +++ b/product_attachment_zipped_download/i18n/product_attachment_zipped_download.pot @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_attachment_zipped_download +# +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" + +#. module: product_attachment_zipped_download +#: model:ir.actions.server,name:product_attachment_zipped_download.action_download_product_product_attachements +#: model:ir.actions.server,name:product_attachment_zipped_download.action_download_product_template_attachements +msgid "Download attachments" +msgstr "" + +#. module: product_attachment_zipped_download +#: model:ir.model,name:product_attachment_zipped_download.model_product_product +msgid "Product" +msgstr "" + +#. module: product_attachment_zipped_download +#: model:ir.model,name:product_attachment_zipped_download.model_product_template +msgid "Product Template" +msgstr "" diff --git a/product_attachment_zipped_download/models/__init__.py b/product_attachment_zipped_download/models/__init__.py new file mode 100644 index 00000000000..18b37e85320 --- /dev/null +++ b/product_attachment_zipped_download/models/__init__.py @@ -0,0 +1,2 @@ +from . import product_product +from . import product_template diff --git a/product_attachment_zipped_download/models/product_product.py b/product_attachment_zipped_download/models/product_product.py new file mode 100644 index 00000000000..2b9ae061f02 --- /dev/null +++ b/product_attachment_zipped_download/models/product_product.py @@ -0,0 +1,23 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class Productproduct(models.Model): + _name = "product.product" + _inherit = ["product.product", "ir.attachment.action_download"] + + def _get_downloadable_attachments(self): + """Overwrite to get the attachments from template or variants.""" + return self.env["ir.attachment"].search( + [ + "|", + "&", + ("res_model", "=", "product.product"), + ("res_id", "in", self.ids), + "&", + ("res_model", "=", "product.template"), + ("res_id", "in", self.product_tmpl_id.ids), + ] + ) diff --git a/product_attachment_zipped_download/models/product_template.py b/product_attachment_zipped_download/models/product_template.py new file mode 100644 index 00000000000..077adf1a81c --- /dev/null +++ b/product_attachment_zipped_download/models/product_template.py @@ -0,0 +1,23 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class ProductTemplate(models.Model): + _name = "product.template" + _inherit = ["product.template", "ir.attachment.action_download"] + + def _get_downloadable_attachments(self): + """Overwrite to get the attachments from template or variants.""" + return self.env["ir.attachment"].search( + [ + "|", + "&", + ("res_model", "=", "product.product"), + ("res_id", "in", self.product_variant_ids.ids), + "&", + ("res_model", "=", "product.template"), + ("res_id", "in", self.ids), + ] + ) diff --git a/product_attachment_zipped_download/readme/CONTRIBUTORS.rst b/product_attachment_zipped_download/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..5fb71305308 --- /dev/null +++ b/product_attachment_zipped_download/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza diff --git a/product_attachment_zipped_download/readme/DESCRIPTION.rst b/product_attachment_zipped_download/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..3082a273671 --- /dev/null +++ b/product_attachment_zipped_download/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows the possibility to download attachments in a .zip file of the selected products. diff --git a/product_attachment_zipped_download/static/description/icon.png b/product_attachment_zipped_download/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/product_attachment_zipped_download/static/description/index.html b/product_attachment_zipped_download/static/description/index.html new file mode 100644 index 00000000000..93a5a31d7dd --- /dev/null +++ b/product_attachment_zipped_download/static/description/index.html @@ -0,0 +1,427 @@ + + + + + + +Product Attachment Zipped Download + + + +
+

Product Attachment Zipped Download

+ + +

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

+

This module allows the possibility to download attachments in a .zip file of the selected products.

+

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

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • Víctor Martínez
    • +
    • Pedro M. Baeza
    • +
    +
  • +
+
+
+

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.

+

Current maintainer:

+

victoralmau

+

This module is part of the OCA/product-attribute project on GitHub.

+

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

+
+
+
+ + diff --git a/product_attachment_zipped_download/tests/__init__.py b/product_attachment_zipped_download/tests/__init__.py new file mode 100644 index 00000000000..2474da3059c --- /dev/null +++ b/product_attachment_zipped_download/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) + +from . import test_product_attachment_zipped_download diff --git a/product_attachment_zipped_download/tests/test_product_attachment_zipped_download.py b/product_attachment_zipped_download/tests/test_product_attachment_zipped_download.py new file mode 100644 index 00000000000..2208e9458c6 --- /dev/null +++ b/product_attachment_zipped_download/tests/test_product_attachment_zipped_download.py @@ -0,0 +1,99 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.tests import TransactionCase + +from odoo.addons.attachment_zipped_download.tests.test_attachment_zipped_download import ( + TestAttachmentZippedDownloadBase, +) + + +class TestProductAttachmentZippedDownload( + TransactionCase, TestAttachmentZippedDownloadBase +): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.product_a = cls.env["product.product"].create({"name": "Test product A"}) + cls.product_b = cls.env["product.product"].create({"name": "Test product B"}) + cls.product_c = cls.env["product.product"].create({"name": "Test product C"}) + cls.attachment_a = cls._create_attachment( + cls.env, + cls.env.uid, + "product-a.txt", + model=cls.product_a._name, + res_id=cls.product_a.id, + ) + cls.attachment_b = cls._create_attachment( + cls.env, + cls.env.uid, + "product-b.txt", + model=cls.product_b._name, + res_id=cls.product_b.id, + ) + cls.attachment_b_extra = cls._create_attachment( + cls.env, + cls.env.uid, + "product-template-b.txt", + model=cls.product_b.product_tmpl_id._name, + res_id=cls.product_b.product_tmpl_id.id, + ) + + def test_action_download_attachments_no_attachment(self): + action = self.product_c.product_tmpl_id.action_download_attachments() + self.assertEqual(action["type"], "ir.actions.client") + self.assertEqual(action["tag"], "display_notification") + action = self.product_c.action_download_attachments() + self.assertEqual(action["type"], "ir.actions.client") + self.assertEqual(action["tag"], "display_notification") + + def test_action_download_attachments_one_attachment_1(self): + action = self.product_a.product_tmpl_id.action_download_attachments() + self.assertEqual(action["type"], "ir.actions.act_url") + self.assertEqual(action["target"], "self") + self.assertEqual( + action["url"], "/web/content/%s?download=1" % self.attachment_a.id + ) + action = self.product_a.action_download_attachments() + self.assertEqual(action["type"], "ir.actions.act_url") + self.assertEqual(action["target"], "self") + self.assertEqual( + action["url"], "/web/content/%s?download=1" % self.attachment_a.id + ) + + def test_action_download_attachments_one_attachment_2(self): + action = self.product_b.product_tmpl_id.action_download_attachments() + self.assertEqual(action["type"], "ir.actions.act_url") + self.assertEqual(action["target"], "self") + self.assertTrue(action["url"].startswith("/web/attachment/download_zip?ids=")) + attachment_ids = sorted(map(int, action["url"].split("=")[1].split(","))) + self.assertNotIn(self.attachment_a.id, attachment_ids) + self.assertIn(self.attachment_b.id, attachment_ids) + self.assertIn(self.attachment_b_extra.id, attachment_ids) + action = self.product_b.action_download_attachments() + self.assertEqual(action["type"], "ir.actions.act_url") + self.assertEqual(action["target"], "self") + self.assertTrue(action["url"].startswith("/web/attachment/download_zip?ids=")) + attachment_ids = sorted(map(int, action["url"].split("=")[1].split(","))) + self.assertNotIn(self.attachment_a.id, attachment_ids) + self.assertIn(self.attachment_b.id, attachment_ids) + self.assertIn(self.attachment_b_extra.id, attachment_ids) + + def test_action_download_attachments_multi_attachment(self): + products = self.product_a + self.product_b + self.product_c + product_templates = products.mapped("product_tmpl_id") + action = product_templates.action_download_attachments() + self.assertEqual(action["type"], "ir.actions.act_url") + self.assertEqual(action["target"], "self") + self.assertTrue(action["url"].startswith("/web/attachment/download_zip?ids=")) + attachment_ids = sorted(map(int, action["url"].split("=")[1].split(","))) + self.assertIn(self.attachment_a.id, attachment_ids) + self.assertIn(self.attachment_b.id, attachment_ids) + self.assertIn(self.attachment_b_extra.id, attachment_ids) + action = products.action_download_attachments() + self.assertEqual(action["type"], "ir.actions.act_url") + self.assertEqual(action["target"], "self") + self.assertTrue(action["url"].startswith("/web/attachment/download_zip?ids=")) + attachment_ids = sorted(map(int, action["url"].split("=")[1].split(","))) + self.assertIn(self.attachment_a.id, attachment_ids) + self.assertIn(self.attachment_b.id, attachment_ids) + self.assertIn(self.attachment_b_extra.id, attachment_ids) diff --git a/product_attachment_zipped_download/views/product_product_views.xml b/product_attachment_zipped_download/views/product_product_views.xml new file mode 100644 index 00000000000..6e6d3e169f1 --- /dev/null +++ b/product_attachment_zipped_download/views/product_product_views.xml @@ -0,0 +1,13 @@ + + + + Download attachments + + + list + code + + action = records.action_download_attachments() + + + diff --git a/product_attachment_zipped_download/views/product_template_views.xml b/product_attachment_zipped_download/views/product_template_views.xml new file mode 100644 index 00000000000..b5b5e6df8f4 --- /dev/null +++ b/product_attachment_zipped_download/views/product_template_views.xml @@ -0,0 +1,16 @@ + + + + Download attachments + + + list + code + + action = records.action_download_attachments() + + + From ea831d857e06bf4f5e81e1715855f3c4f222f2c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 18 Dec 2024 13:30:16 +0100 Subject: [PATCH 2/3] [IMP] product_attachment_zipped_download: pre-commit stuff --- .../odoo/addons/product_attachment_zipped_download | 1 + setup/product_attachment_zipped_download/setup.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 120000 setup/product_attachment_zipped_download/odoo/addons/product_attachment_zipped_download create mode 100644 setup/product_attachment_zipped_download/setup.py diff --git a/setup/product_attachment_zipped_download/odoo/addons/product_attachment_zipped_download b/setup/product_attachment_zipped_download/odoo/addons/product_attachment_zipped_download new file mode 120000 index 00000000000..f5d4f868484 --- /dev/null +++ b/setup/product_attachment_zipped_download/odoo/addons/product_attachment_zipped_download @@ -0,0 +1 @@ +../../../../product_attachment_zipped_download \ No newline at end of file diff --git a/setup/product_attachment_zipped_download/setup.py b/setup/product_attachment_zipped_download/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/product_attachment_zipped_download/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 843275b2eb01154a768564566aabcbba6853c6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 18 Dec 2024 13:31:44 +0100 Subject: [PATCH 3/3] [MIG] product_attachment_zipped_download: Migration to 16.0 TT52271 --- product_attachment_zipped_download/README.rst | 10 +++---- .../__manifest__.py | 4 +-- .../data/ir_actions_server_data.xml | 26 +++++++++++++++++++ .../static/description/index.html | 7 +++-- .../views/product_product_views.xml | 13 ---------- .../views/product_template_views.xml | 16 ------------ 6 files changed, 36 insertions(+), 40 deletions(-) create mode 100644 product_attachment_zipped_download/data/ir_actions_server_data.xml delete mode 100644 product_attachment_zipped_download/views/product_product_views.xml delete mode 100644 product_attachment_zipped_download/views/product_template_views.xml diff --git a/product_attachment_zipped_download/README.rst b/product_attachment_zipped_download/README.rst index 89ad0d41de0..d001565b509 100644 --- a/product_attachment_zipped_download/README.rst +++ b/product_attachment_zipped_download/README.rst @@ -17,13 +17,13 @@ Product Attachment Zipped Download :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/15.0/product_attachment_zipped_download + :target: https://github.com/OCA/product-attribute/tree/16.0/product_attachment_zipped_download :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-15-0/product-attribute-15-0-product_attachment_zipped_download + :target: https://translation.odoo-community.org/projects/product-attribute-16-0/product-attribute-16-0-product_attachment_zipped_download :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/product-attribute&target_branch=15.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=16.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -41,7 +41,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. @@ -82,6 +82,6 @@ Current `maintainer `__: |maintainer-victoralmau| -This module is part of the `OCA/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_attachment_zipped_download/__manifest__.py b/product_attachment_zipped_download/__manifest__.py index d140c5ed0a9..85655731280 100644 --- a/product_attachment_zipped_download/__manifest__.py +++ b/product_attachment_zipped_download/__manifest__.py @@ -2,13 +2,13 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Product Attachment Zipped Download", - "version": "15.0.1.0.0", + "version": "16.0.1.0.0", "category": "Product Management", "website": "https://github.com/OCA/product-attribute", "author": "Tecnativa, Odoo Community Association (OCA)", "license": "AGPL-3", "depends": ["attachment_zipped_download", "product"], - "data": ["views/product_product_views.xml", "views/product_template_views.xml"], + "data": ["data/ir_actions_server_data.xml"], "installable": True, "maintainers": ["victoralmau"], } diff --git a/product_attachment_zipped_download/data/ir_actions_server_data.xml b/product_attachment_zipped_download/data/ir_actions_server_data.xml new file mode 100644 index 00000000000..88b273208bc --- /dev/null +++ b/product_attachment_zipped_download/data/ir_actions_server_data.xml @@ -0,0 +1,26 @@ + + + + Download attachments + + + list,form + code + + action = records.action_download_attachments() + + + + Download attachments + + + list,form + code + + action = records.action_download_attachments() + + + diff --git a/product_attachment_zipped_download/static/description/index.html b/product_attachment_zipped_download/static/description/index.html index 93a5a31d7dd..603e89fb7eb 100644 --- a/product_attachment_zipped_download/static/description/index.html +++ b/product_attachment_zipped_download/static/description/index.html @@ -1,4 +1,3 @@ - @@ -369,7 +368,7 @@

Product Attachment Zipped Download

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:83ad066d1fff91f3a30547d9094b4d4bacd0e7614498a95854047bb2e9e52f0b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module allows the possibility to download attachments in a .zip file of the selected products.

Table of contents

@@ -388,7 +387,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.

@@ -418,7 +417,7 @@

Maintainers

promote its widespread use.

Current maintainer:

victoralmau

-

This module is part of the OCA/product-attribute project on GitHub.

+

This module is part of the OCA/product-attribute project on GitHub.

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

diff --git a/product_attachment_zipped_download/views/product_product_views.xml b/product_attachment_zipped_download/views/product_product_views.xml deleted file mode 100644 index 6e6d3e169f1..00000000000 --- a/product_attachment_zipped_download/views/product_product_views.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Download attachments - - - list - code - - action = records.action_download_attachments() - - - diff --git a/product_attachment_zipped_download/views/product_template_views.xml b/product_attachment_zipped_download/views/product_template_views.xml deleted file mode 100644 index b5b5e6df8f4..00000000000 --- a/product_attachment_zipped_download/views/product_template_views.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - Download attachments - - - list - code - - action = records.action_download_attachments() - - -