From 7cfce04a50c0dd1bf32f1031c743d787fc367cdf Mon Sep 17 00:00:00 2001 From: BernatPForgeFlow Date: Tue, 18 Jun 2024 12:00:38 +0200 Subject: [PATCH 1/8] [ADD] fs_product_public_category_multi_image: a drop-in replacement of storage_image_product_public_category --- .../README.rst | 87 ++++ .../__init__.py | 1 + .../__manifest__.py | 20 + .../models/__init__.py | 3 + .../fs_product_public_category_image.py | 23 + .../models/image_tag.py | 23 + .../models/product_public_category.py | 18 + .../readme/CONTRIBUTORS.rst | 2 + .../readme/DESCRIPTION.rst | 1 + .../readme/USAGE.rst | 6 + .../fs_product_public_category_image.xml | 34 ++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 431 ++++++++++++++++++ .../tests/__init__.py | 1 + .../tests/test_fs_product_multi_image.py | 92 ++++ .../fs_product_public_category_image.xml | 24 + .../views/product_public_category.xml | 22 + 17 files changed, 788 insertions(+) create mode 100644 fs_product_public_category_multi_image/README.rst create mode 100644 fs_product_public_category_multi_image/__init__.py create mode 100644 fs_product_public_category_multi_image/__manifest__.py create mode 100644 fs_product_public_category_multi_image/models/__init__.py create mode 100644 fs_product_public_category_multi_image/models/fs_product_public_category_image.py create mode 100644 fs_product_public_category_multi_image/models/image_tag.py create mode 100644 fs_product_public_category_multi_image/models/product_public_category.py create mode 100644 fs_product_public_category_multi_image/readme/CONTRIBUTORS.rst create mode 100644 fs_product_public_category_multi_image/readme/DESCRIPTION.rst create mode 100644 fs_product_public_category_multi_image/readme/USAGE.rst create mode 100644 fs_product_public_category_multi_image/security/fs_product_public_category_image.xml create mode 100644 fs_product_public_category_multi_image/static/description/icon.png create mode 100644 fs_product_public_category_multi_image/static/description/index.html create mode 100644 fs_product_public_category_multi_image/tests/__init__.py create mode 100644 fs_product_public_category_multi_image/tests/test_fs_product_multi_image.py create mode 100644 fs_product_public_category_multi_image/views/fs_product_public_category_image.xml create mode 100644 fs_product_public_category_multi_image/views/product_public_category.xml diff --git a/fs_product_public_category_multi_image/README.rst b/fs_product_public_category_multi_image/README.rst new file mode 100644 index 0000000000..17557a420f --- /dev/null +++ b/fs_product_public_category_multi_image/README.rst @@ -0,0 +1,87 @@ +====================================== +Fs Product Public Category Multi Image +====================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:52faa35306ff117e720655c0ff7d10523f12a5d0f19d1213cd6d183ed81c513f + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |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%2Fstorage-lightgray.png?logo=github + :target: https://github.com/OCA/storage/tree/16.0/fs_product_public_category_multi_image + :alt: OCA/storage +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_product_public_category_multi_image + :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/storage&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Attach images to public categories + +.. IMPORTANT:: + This is an alpha version, the data model and design can change at any time without warning. + Only for development or testing purpose, do not use in production. + `More details on development status `_ + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +A) Public Categories + + Go to Website > eCommerce > Products > eCommerce Categories. + A new section Images is available to upload or use an existing image. + +For uploading and managing the images see the module fs_product_multi_image. + +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 +======= + +Contributors +~~~~~~~~~~~~ + +* Juany Davila +* Bernat Puig + +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/storage `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/fs_product_public_category_multi_image/__init__.py b/fs_product_public_category_multi_image/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/fs_product_public_category_multi_image/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/fs_product_public_category_multi_image/__manifest__.py b/fs_product_public_category_multi_image/__manifest__.py new file mode 100644 index 0000000000..dc19b2f4b4 --- /dev/null +++ b/fs_product_public_category_multi_image/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2024 ForgeFlow (http://www.forgeflow.com). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Fs Product Public Category Multi Image", + "summary": """ + Manage multi images from extenal file system on eCommerce public categories""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/storage", + "depends": ["fs_base_multi_image", "website_sale", "image_tag"], + "data": [ + "security/fs_product_public_category_image.xml", + "views/fs_product_public_category_image.xml", + "views/product_public_category.xml", + ], + "demo": [], + "development_status": "Alpha", +} diff --git a/fs_product_public_category_multi_image/models/__init__.py b/fs_product_public_category_multi_image/models/__init__.py new file mode 100644 index 0000000000..a9ec9b952e --- /dev/null +++ b/fs_product_public_category_multi_image/models/__init__.py @@ -0,0 +1,3 @@ +from . import fs_product_public_category_image +from . import image_tag +from . import product_public_category diff --git a/fs_product_public_category_multi_image/models/fs_product_public_category_image.py b/fs_product_public_category_multi_image/models/fs_product_public_category_image.py new file mode 100644 index 0000000000..4a20840dcb --- /dev/null +++ b/fs_product_public_category_multi_image/models/fs_product_public_category_image.py @@ -0,0 +1,23 @@ +# Copyright 2024 ForgeFlow (http://www.forgeflow.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class FsProductPublicCategoryImage(models.Model): + _name = "fs.product.public.category.image" + _inherit = "fs.image.relation.mixin" + _description = "Product Public Category Image" + + public_category_id = fields.Many2one( + "product.public.category", + required=True, + ondelete="cascade", + index=True, + ) + tag_id = fields.Many2one( + "image.tag", + string="Tag", + domain=[("apply_on", "=", "public.category")], + index=True, + ) diff --git a/fs_product_public_category_multi_image/models/image_tag.py b/fs_product_public_category_multi_image/models/image_tag.py new file mode 100644 index 0000000000..3d757b877d --- /dev/null +++ b/fs_product_public_category_multi_image/models/image_tag.py @@ -0,0 +1,23 @@ +# Copyright 2024 ForgeFlow (http://www.forgeflow.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +from odoo import api, fields, models + + +class ImageTag(models.Model): + _inherit = "image.tag" + + @api.model + def _get_default_apply_on(self): + active_model = self.env.context.get("active_model") + return ( + "public.category" + if active_model == "public.category.image.relation" + else super()._get_default_apply_on() + ) + + apply_on = fields.Selection( + selection_add=[("public.category", "Public Category")], + ondelete={"product": "cascade", "category": "cascade"}, + ) diff --git a/fs_product_public_category_multi_image/models/product_public_category.py b/fs_product_public_category_multi_image/models/product_public_category.py new file mode 100644 index 0000000000..228ccebc2e --- /dev/null +++ b/fs_product_public_category_multi_image/models/product_public_category.py @@ -0,0 +1,18 @@ +# Copyright 2024 ForgeFlow (http://www.forgeflow.com). +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + +from odoo.addons.fs_image.fields import FSImage + + +class ProductPublicCategory(models.Model): + _inherit = "product.public.category" + + image_ids = fields.One2many( + string="Images", + comodel_name="fs.product.public.category.image", + inverse_name="public_category_id", + ) + image = FSImage(related="image_ids.image", readonly=True, store=False) + image_medium = FSImage(related="image_ids.image_medium", readonly=True, store=False) diff --git a/fs_product_public_category_multi_image/readme/CONTRIBUTORS.rst b/fs_product_public_category_multi_image/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..2c8e1c7e86 --- /dev/null +++ b/fs_product_public_category_multi_image/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Juany Davila +* Bernat Puig diff --git a/fs_product_public_category_multi_image/readme/DESCRIPTION.rst b/fs_product_public_category_multi_image/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..e021256b62 --- /dev/null +++ b/fs_product_public_category_multi_image/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Attach images to public categories diff --git a/fs_product_public_category_multi_image/readme/USAGE.rst b/fs_product_public_category_multi_image/readme/USAGE.rst new file mode 100644 index 0000000000..486c849cdc --- /dev/null +++ b/fs_product_public_category_multi_image/readme/USAGE.rst @@ -0,0 +1,6 @@ +A) Public Categories + + Go to Website > eCommerce > Products > eCommerce Categories. + A new section Images is available to upload or use an existing image. + +For uploading and managing the images see the module fs_product_multi_image. diff --git a/fs_product_public_category_multi_image/security/fs_product_public_category_image.xml b/fs_product_public_category_multi_image/security/fs_product_public_category_image.xml new file mode 100644 index 0000000000..12898d8377 --- /dev/null +++ b/fs_product_public_category_multi_image/security/fs_product_public_category_image.xml @@ -0,0 +1,34 @@ + + + + + + fs.product.public.category.image access read + + + + + + + + + fs.product.public.category.image access system admin + + + + + + + + + fs.product.public.category.image access sales manager + + + + + + + + + diff --git a/fs_product_public_category_multi_image/static/description/icon.png b/fs_product_public_category_multi_image/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/fs_product_public_category_multi_image/static/description/index.html b/fs_product_public_category_multi_image/static/description/index.html new file mode 100644 index 0000000000..814b7ecfb9 --- /dev/null +++ b/fs_product_public_category_multi_image/static/description/index.html @@ -0,0 +1,431 @@ + + + + + +Fs Product Public Category Multi Image + + + +
+

Fs Product Public Category Multi Image

+ + +

Alpha License: AGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

+

Attach images to public categories

+
+

Important

+

This is an alpha version, the data model and design can change at any time without warning. +Only for development or testing purpose, do not use in production. +More details on development status

+
+

Table of contents

+ +
+

Usage

+
    +
  1. Public Categories

    +

    Go to Website > eCommerce > Products > eCommerce Categories. +A new section Images is available to upload or use an existing image.

    +
  2. +
+

For uploading and managing the images see the module fs_product_multi_image.

+
+
+

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

+ +
+

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

+

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

+
+
+
+ + diff --git a/fs_product_public_category_multi_image/tests/__init__.py b/fs_product_public_category_multi_image/tests/__init__.py new file mode 100644 index 0000000000..c686b22ff1 --- /dev/null +++ b/fs_product_public_category_multi_image/tests/__init__.py @@ -0,0 +1 @@ +from . import test_fs_product_multi_image diff --git a/fs_product_public_category_multi_image/tests/test_fs_product_multi_image.py b/fs_product_public_category_multi_image/tests/test_fs_product_multi_image.py new file mode 100644 index 0000000000..35e64f1636 --- /dev/null +++ b/fs_product_public_category_multi_image/tests/test_fs_product_multi_image.py @@ -0,0 +1,92 @@ +# Copyright 2017 Akretion (http://www.akretion.com). +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import base64 +import io + +from PIL import Image + +from odoo.tests.common import TransactionCase + + +class TestFsProductMultiImage(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.white_image = cls._create_image(16, 16, color="#FFFFFF") + cls.logo_image = cls._create_image(16, 16, color="#FFA500") + cls.product_public_category = cls.env["product.public.category"].create( + { + "name": "Public Category", + } + ) + cls.image_white = cls.env["fs.image"].create( + { + "image": { + "filename": "white.png", + "content": base64.b64encode(cls.white_image), + } + } + ) + cls.image_logo = cls.env["fs.image"].create( + { + "image": { + "filename": "logo.png", + "content": base64.b64encode(cls.logo_image), + } + } + ) + cls.image_tag = cls.env["image.tag"].create( + { + "name": "Icon", + "apply_on": "public.category", + } + ) + + def setUp(self): + super().setUp() + self.temp_dir = self.env["fs.storage"].create( + { + "name": "Temp FS Storage", + "protocol": "memory", + "code": "mem_dir", + "directory_path": "/tmp/", + "model_xmlids": "fs_product_multi_image.model_fs_product_category_image," + "fs_product_multi_image.model_fs_product_image", + } + ) + + @classmethod + def _create_image(cls, width, height, color="#4169E1", img_format="PNG"): + f = io.BytesIO() + Image.new("RGB", (width, height), color).save(f, img_format) + f.seek(0) + return f.read() + + def _create_multiple_images(self): + logo = self.env["fs.product.public.category.image"].create( + { + "public_category_id": self.product_public_category.id, + "tag_id": self.image_tag.id, + "image_id": self.image_logo.id, + "sequence": 10, + "link_existing": True, + } + ) + image_wh = self.env["fs.product.public.category.image"].create( + { + "public_category_id": self.product_public_category.id, + "tag_id": self.image_tag.id, + "image_id": self.image_white.id, + "sequence": 2, + "link_existing": True, + } + ) + return logo, image_wh + + def test_add_image_for_product_public_category(self): + logo, image_wh = self._create_multiple_images() + # White product should have the white image and the logo + self.assertEqual(self.product_public_category.image_ids, image_wh + logo) diff --git a/fs_product_public_category_multi_image/views/fs_product_public_category_image.xml b/fs_product_public_category_multi_image/views/fs_product_public_category_image.xml new file mode 100644 index 0000000000..6fd05b945c --- /dev/null +++ b/fs_product_public_category_multi_image/views/fs_product_public_category_image.xml @@ -0,0 +1,24 @@ + + + + + + product.public.category.fs.image.form + fs.product.public.category.image + + primary + + + + + + + + diff --git a/fs_product_public_category_multi_image/views/product_public_category.xml b/fs_product_public_category_multi_image/views/product_public_category.xml new file mode 100644 index 0000000000..73e3e3961e --- /dev/null +++ b/fs_product_public_category_multi_image/views/product_public_category.xml @@ -0,0 +1,22 @@ + + + + product.public.category + + + +
+ + + + + +
+
+
+
+
From 15f2877e8542c6ddfa3bbfb04e8955f2f3cf865d Mon Sep 17 00:00:00 2001 From: oca-ci Date: Sun, 10 Nov 2024 11:04:33 +0000 Subject: [PATCH 2/8] [UPD] Update fs_product_public_category_multi_image.pot --- ...fs_product_public_category_multi_image.pot | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 fs_product_public_category_multi_image/i18n/fs_product_public_category_multi_image.pot diff --git a/fs_product_public_category_multi_image/i18n/fs_product_public_category_multi_image.pot b/fs_product_public_category_multi_image/i18n/fs_product_public_category_multi_image.pot new file mode 100644 index 0000000000..55167f9f56 --- /dev/null +++ b/fs_product_public_category_multi_image/i18n/fs_product_public_category_multi_image.pot @@ -0,0 +1,133 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fs_product_public_category_multi_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_image_tag__apply_on +msgid "Apply On" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__create_uid +msgid "Created by" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__create_date +msgid "Created on" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__display_name +msgid "Display Name" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__id +msgid "ID" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__image_medium +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_product_public_category__image_medium +msgid "Image (128)" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_product_public_category__image +msgid "Image (original)" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model,name:fs_product_public_category_multi_image.model_image_tag +msgid "Image Tag" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_product_public_category__image_ids +#: model_terms:ir.ui.view,arch_db:fs_product_public_category_multi_image.product_public_category_form_view +msgid "Images" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__link_existing +msgid "Link Existing" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__image_id +msgid "Linked image" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__mimetype +msgid "Mimetype" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__name +msgid "Name" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model,name:fs_product_public_category_multi_image.model_fs_product_public_category_image +msgid "Product Public Category Image" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__public_category_id +#: model:ir.model.fields.selection,name:fs_product_public_category_multi_image.selection__image_tag__apply_on__public_category +msgid "Public Category" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__sequence +msgid "Sequence" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__specific_image +msgid "Specific Image" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__specific_image_medium +msgid "Specific Image (128)" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__tag_id +msgid "Tag" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model,name:fs_product_public_category_multi_image.model_product_public_category +msgid "Website Product Category" +msgstr "" From 83ec0bdc1d11e38c4528cb731e9bb64d6536b762 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 10 Nov 2024 11:07:22 +0000 Subject: [PATCH 3/8] [BOT] post-merge updates --- fs_product_public_category_multi_image/README.rst | 2 +- .../static/description/index.html | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/fs_product_public_category_multi_image/README.rst b/fs_product_public_category_multi_image/README.rst index 17557a420f..0a31535ae9 100644 --- a/fs_product_public_category_multi_image/README.rst +++ b/fs_product_public_category_multi_image/README.rst @@ -7,7 +7,7 @@ Fs Product Public Category Multi Image !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:52faa35306ff117e720655c0ff7d10523f12a5d0f19d1213cd6d183ed81c513f + !! source digest: sha256:d738d87f799859c8be87121897cd1f848a68a1852585a074c5c00b987b974991 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/fs_product_public_category_multi_image/static/description/index.html b/fs_product_public_category_multi_image/static/description/index.html index 814b7ecfb9..4cbe2157ac 100644 --- a/fs_product_public_category_multi_image/static/description/index.html +++ b/fs_product_public_category_multi_image/static/description/index.html @@ -8,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -274,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -300,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -366,7 +367,7 @@

Fs Product Public Category Multi Image

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:52faa35306ff117e720655c0ff7d10523f12a5d0f19d1213cd6d183ed81c513f +!! source digest: sha256:d738d87f799859c8be87121897cd1f848a68a1852585a074c5c00b987b974991 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Alpha License: AGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

Attach images to public categories

@@ -418,7 +419,9 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +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.

From 0e3181294eaea9d95032fe09d1df9473d9994083 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 11 Nov 2024 11:19:49 +0000 Subject: [PATCH 4/8] Added translation using Weblate (Italian) --- .../i18n/it.po | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 fs_product_public_category_multi_image/i18n/it.po diff --git a/fs_product_public_category_multi_image/i18n/it.po b/fs_product_public_category_multi_image/i18n/it.po new file mode 100644 index 0000000000..a392b2fe14 --- /dev/null +++ b/fs_product_public_category_multi_image/i18n/it.po @@ -0,0 +1,134 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fs_product_public_category_multi_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.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" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_image_tag__apply_on +msgid "Apply On" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__create_uid +msgid "Created by" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__create_date +msgid "Created on" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__display_name +msgid "Display Name" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__id +msgid "ID" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__image_medium +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_product_public_category__image_medium +msgid "Image (128)" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_product_public_category__image +msgid "Image (original)" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model,name:fs_product_public_category_multi_image.model_image_tag +msgid "Image Tag" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_product_public_category__image_ids +#: model_terms:ir.ui.view,arch_db:fs_product_public_category_multi_image.product_public_category_form_view +msgid "Images" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__link_existing +msgid "Link Existing" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__image_id +msgid "Linked image" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__mimetype +msgid "Mimetype" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__name +msgid "Name" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model,name:fs_product_public_category_multi_image.model_fs_product_public_category_image +msgid "Product Public Category Image" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__public_category_id +#: model:ir.model.fields.selection,name:fs_product_public_category_multi_image.selection__image_tag__apply_on__public_category +msgid "Public Category" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__sequence +msgid "Sequence" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__specific_image +msgid "Specific Image" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__specific_image_medium +msgid "Specific Image (128)" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__tag_id +msgid "Tag" +msgstr "" + +#. module: fs_product_public_category_multi_image +#: model:ir.model,name:fs_product_public_category_multi_image.model_product_public_category +msgid "Website Product Category" +msgstr "" From ae73fc3d4a57d15983e01beee5ee281a9a60c1bf Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 11 Nov 2024 11:22:20 +0000 Subject: [PATCH 5/8] Translated using Weblate (Italian) Currently translated at 100.0% (23 of 23 strings) Translation: storage-16.0/storage-16.0-fs_product_public_category_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_product_public_category_multi_image/it/ --- .../i18n/it.po | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/fs_product_public_category_multi_image/i18n/it.po b/fs_product_public_category_multi_image/i18n/it.po index a392b2fe14..21739d1d22 100644 --- a/fs_product_public_category_multi_image/i18n/it.po +++ b/fs_product_public_category_multi_image/i18n/it.po @@ -6,129 +6,131 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-11-11 14:06+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_image_tag__apply_on msgid "Apply On" -msgstr "" +msgstr "Applica a" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__create_uid msgid "Created by" -msgstr "" +msgstr "Creato da" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__create_date msgid "Created on" -msgstr "" +msgstr "Creato il" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__display_name msgid "Display Name" -msgstr "" +msgstr "Nome visualizzato" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__id msgid "ID" -msgstr "" +msgstr "ID" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__image_medium #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_product_public_category__image_medium msgid "Image (128)" -msgstr "" +msgstr "Immagine 128" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_product_public_category__image msgid "Image (original)" -msgstr "" +msgstr "Immagine (originale)" #. module: fs_product_public_category_multi_image #: model:ir.model,name:fs_product_public_category_multi_image.model_image_tag msgid "Image Tag" -msgstr "" +msgstr "Etichetta immagine" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_product_public_category__image_ids #: model_terms:ir.ui.view,arch_db:fs_product_public_category_multi_image.product_public_category_form_view msgid "Images" -msgstr "" +msgstr "Immagini" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image____last_update msgid "Last Modified on" -msgstr "" +msgstr "Ultima modifica il" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Ultimo aggiornamento di" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__write_date msgid "Last Updated on" -msgstr "" +msgstr "Ultimo aggiornamento il" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__link_existing msgid "Link Existing" -msgstr "" +msgstr "Collegamento esistente" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__image_id msgid "Linked image" -msgstr "" +msgstr "Immagine collegata" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__mimetype msgid "Mimetype" -msgstr "" +msgstr "Tipo MIME" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__name msgid "Name" -msgstr "" +msgstr "Nome" #. module: fs_product_public_category_multi_image #: model:ir.model,name:fs_product_public_category_multi_image.model_fs_product_public_category_image msgid "Product Public Category Image" -msgstr "" +msgstr "Immagine prodotto categoria pubblica" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__public_category_id #: model:ir.model.fields.selection,name:fs_product_public_category_multi_image.selection__image_tag__apply_on__public_category msgid "Public Category" -msgstr "" +msgstr "Categoria pubblica" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__sequence msgid "Sequence" -msgstr "" +msgstr "Sequenza" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__specific_image msgid "Specific Image" -msgstr "" +msgstr "Immagine specifica" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__specific_image_medium msgid "Specific Image (128)" -msgstr "" +msgstr "Immagine specifica (128)" #. module: fs_product_public_category_multi_image #: model:ir.model.fields,field_description:fs_product_public_category_multi_image.field_fs_product_public_category_image__tag_id msgid "Tag" -msgstr "" +msgstr "Etichetta" #. module: fs_product_public_category_multi_image #: model:ir.model,name:fs_product_public_category_multi_image.model_product_public_category msgid "Website Product Category" -msgstr "" +msgstr "Categoria prodotto sito web" From ef23d6748b4a3bff4f476c1c6b2eee19217c06b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Duy=20=28=C4=90=E1=BB=97=20Anh=29?= Date: Fri, 18 Apr 2025 16:10:47 +0700 Subject: [PATCH 6/8] [IMP] fs_product_public_category_multi_image: pre-commit auto fixes --- .../README.rst | 27 ++++++++++--------- .../pyproject.toml | 3 +++ .../readme/CONTRIBUTORS.md | 2 ++ .../readme/CONTRIBUTORS.rst | 2 -- .../{DESCRIPTION.rst => DESCRIPTION.md} | 0 .../readme/USAGE.md | 7 +++++ .../readme/USAGE.rst | 6 ----- .../fs_product_public_category_image.xml | 2 -- .../static/description/index.html | 15 ++++++----- .../fs_product_public_category_image.xml | 2 -- 10 files changed, 34 insertions(+), 32 deletions(-) create mode 100644 fs_product_public_category_multi_image/pyproject.toml create mode 100644 fs_product_public_category_multi_image/readme/CONTRIBUTORS.md delete mode 100644 fs_product_public_category_multi_image/readme/CONTRIBUTORS.rst rename fs_product_public_category_multi_image/readme/{DESCRIPTION.rst => DESCRIPTION.md} (100%) create mode 100644 fs_product_public_category_multi_image/readme/USAGE.md delete mode 100644 fs_product_public_category_multi_image/readme/USAGE.rst diff --git a/fs_product_public_category_multi_image/README.rst b/fs_product_public_category_multi_image/README.rst index 0a31535ae9..7284ba99d9 100644 --- a/fs_product_public_category_multi_image/README.rst +++ b/fs_product_public_category_multi_image/README.rst @@ -17,13 +17,13 @@ Fs Product Public Category Multi Image :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstorage-lightgray.png?logo=github - :target: https://github.com/OCA/storage/tree/16.0/fs_product_public_category_multi_image + :target: https://github.com/OCA/storage/tree/18.0/fs_product_public_category_multi_image :alt: OCA/storage .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_product_public_category_multi_image + :target: https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-fs_product_public_category_multi_image :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/storage&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/storage&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -43,12 +43,13 @@ Attach images to public categories Usage ===== -A) Public Categories +1) Public Categories - Go to Website > eCommerce > Products > eCommerce Categories. - A new section Images is available to upload or use an existing image. + Go to Website > eCommerce > Products > eCommerce Categories. A new + section Images is available to upload or use an existing image. -For uploading and managing the images see the module fs_product_multi_image. +For uploading and managing the images see the module +fs_product_multi_image. Bug Tracker =========== @@ -56,7 +57,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. @@ -64,13 +65,13 @@ Credits ======= Contributors -~~~~~~~~~~~~ +------------ -* Juany Davila -* Bernat Puig +- Juany Davila +- Bernat Puig Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -82,6 +83,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/storage `_ project on GitHub. +This module is part of the `OCA/storage `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/fs_product_public_category_multi_image/pyproject.toml b/fs_product_public_category_multi_image/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/fs_product_public_category_multi_image/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/fs_product_public_category_multi_image/readme/CONTRIBUTORS.md b/fs_product_public_category_multi_image/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..a803230968 --- /dev/null +++ b/fs_product_public_category_multi_image/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- Juany Davila \<\> +- Bernat Puig \<\> diff --git a/fs_product_public_category_multi_image/readme/CONTRIBUTORS.rst b/fs_product_public_category_multi_image/readme/CONTRIBUTORS.rst deleted file mode 100644 index 2c8e1c7e86..0000000000 --- a/fs_product_public_category_multi_image/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,2 +0,0 @@ -* Juany Davila -* Bernat Puig diff --git a/fs_product_public_category_multi_image/readme/DESCRIPTION.rst b/fs_product_public_category_multi_image/readme/DESCRIPTION.md similarity index 100% rename from fs_product_public_category_multi_image/readme/DESCRIPTION.rst rename to fs_product_public_category_multi_image/readme/DESCRIPTION.md diff --git a/fs_product_public_category_multi_image/readme/USAGE.md b/fs_product_public_category_multi_image/readme/USAGE.md new file mode 100644 index 0000000000..590778edb8 --- /dev/null +++ b/fs_product_public_category_multi_image/readme/USAGE.md @@ -0,0 +1,7 @@ +1) Public Categories + + Go to Website \> eCommerce \> Products \> eCommerce Categories. A + new section Images is available to upload or use an existing image. + +For uploading and managing the images see the module +fs_product_multi_image. diff --git a/fs_product_public_category_multi_image/readme/USAGE.rst b/fs_product_public_category_multi_image/readme/USAGE.rst deleted file mode 100644 index 486c849cdc..0000000000 --- a/fs_product_public_category_multi_image/readme/USAGE.rst +++ /dev/null @@ -1,6 +0,0 @@ -A) Public Categories - - Go to Website > eCommerce > Products > eCommerce Categories. - A new section Images is available to upload or use an existing image. - -For uploading and managing the images see the module fs_product_multi_image. diff --git a/fs_product_public_category_multi_image/security/fs_product_public_category_image.xml b/fs_product_public_category_multi_image/security/fs_product_public_category_image.xml index 12898d8377..bbea45e06b 100644 --- a/fs_product_public_category_multi_image/security/fs_product_public_category_image.xml +++ b/fs_product_public_category_multi_image/security/fs_product_public_category_image.xml @@ -2,7 +2,6 @@ - fs.product.public.category.image access read @@ -30,5 +29,4 @@ - diff --git a/fs_product_public_category_multi_image/static/description/index.html b/fs_product_public_category_multi_image/static/description/index.html index 4cbe2157ac..69493bdca9 100644 --- a/fs_product_public_category_multi_image/static/description/index.html +++ b/fs_product_public_category_multi_image/static/description/index.html @@ -369,7 +369,7 @@

Fs Product Public Category Multi Image

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:d738d87f799859c8be87121897cd1f848a68a1852585a074c5c00b987b974991 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Alpha License: AGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

+

Alpha License: AGPL-3 OCA/storage Translate me on Weblate Try me on Runboat

Attach images to public categories

Important

@@ -391,20 +391,21 @@

Fs Product Public Category Multi Image

Usage

-
    +
    1. Public Categories

      -

      Go to Website > eCommerce > Products > eCommerce Categories. -A new section Images is available to upload or use an existing image.

      +

      Go to Website > eCommerce > Products > eCommerce Categories. A new +section Images is available to upload or use an existing image.

    -

    For uploading and managing the images see the module fs_product_multi_image.

    +

    For uploading and managing the images see the module +fs_product_multi_image.

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.

@@ -425,7 +426,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/storage project on GitHub.

+

This module is part of the OCA/storage project on GitHub.

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

diff --git a/fs_product_public_category_multi_image/views/fs_product_public_category_image.xml b/fs_product_public_category_multi_image/views/fs_product_public_category_image.xml index 6fd05b945c..ea87bd7167 100644 --- a/fs_product_public_category_multi_image/views/fs_product_public_category_image.xml +++ b/fs_product_public_category_multi_image/views/fs_product_public_category_image.xml @@ -2,7 +2,6 @@ - product.public.category.fs.image.form fs.product.public.category.image @@ -20,5 +19,4 @@ - From 1dfda9957b7d2c4cee17ad54aa021bf4d1008a7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Duy=20=28=C4=90=E1=BB=97=20Anh=29?= Date: Mon, 21 Apr 2025 09:33:24 +0700 Subject: [PATCH 7/8] [MIG] fs_product_public_category_multi_image: Migration to 18.0 --- .../README.rst | 1 + .../__manifest__.py | 2 +- .../readme/CONTRIBUTORS.md | 1 + .../static/description/index.html | 1 + .../tests/test_fs_product_multi_image.py | 17 ++++++++-------- .../views/product_public_category.xml | 20 ++++++++----------- 6 files changed, 20 insertions(+), 22 deletions(-) diff --git a/fs_product_public_category_multi_image/README.rst b/fs_product_public_category_multi_image/README.rst index 7284ba99d9..61d784a2d9 100644 --- a/fs_product_public_category_multi_image/README.rst +++ b/fs_product_public_category_multi_image/README.rst @@ -69,6 +69,7 @@ Contributors - Juany Davila - Bernat Puig +- Do Anh Duy Maintainers ----------- diff --git a/fs_product_public_category_multi_image/__manifest__.py b/fs_product_public_category_multi_image/__manifest__.py index dc19b2f4b4..69141cfa14 100644 --- a/fs_product_public_category_multi_image/__manifest__.py +++ b/fs_product_public_category_multi_image/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Product Public Category Multi Image", "summary": """ Manage multi images from extenal file system on eCommerce public categories""", - "version": "16.0.1.0.0", + "version": "18.0.1.0.0", "license": "AGPL-3", "author": "Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_product_public_category_multi_image/readme/CONTRIBUTORS.md b/fs_product_public_category_multi_image/readme/CONTRIBUTORS.md index a803230968..c37f5edb82 100644 --- a/fs_product_public_category_multi_image/readme/CONTRIBUTORS.md +++ b/fs_product_public_category_multi_image/readme/CONTRIBUTORS.md @@ -1,2 +1,3 @@ - Juany Davila \<\> - Bernat Puig \<\> +- Do Anh Duy \<\> diff --git a/fs_product_public_category_multi_image/static/description/index.html b/fs_product_public_category_multi_image/static/description/index.html index 69493bdca9..11b3d7abbd 100644 --- a/fs_product_public_category_multi_image/static/description/index.html +++ b/fs_product_public_category_multi_image/static/description/index.html @@ -415,6 +415,7 @@

Contributors

diff --git a/fs_product_public_category_multi_image/tests/test_fs_product_multi_image.py b/fs_product_public_category_multi_image/tests/test_fs_product_multi_image.py index 35e64f1636..bce6803e9e 100644 --- a/fs_product_public_category_multi_image/tests/test_fs_product_multi_image.py +++ b/fs_product_public_category_multi_image/tests/test_fs_product_multi_image.py @@ -7,14 +7,13 @@ from PIL import Image -from odoo.tests.common import TransactionCase +from odoo.addons.base.tests.common import BaseCommon -class TestFsProductMultiImage(TransactionCase): +class TestFsProductMultiImage(BaseCommon): @classmethod def setUpClass(cls): super().setUpClass() - cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) cls.white_image = cls._create_image(16, 16, color="#FFFFFF") cls.logo_image = cls._create_image(16, 16, color="#FFA500") cls.product_public_category = cls.env["product.public.category"].create( @@ -44,17 +43,17 @@ def setUpClass(cls): "apply_on": "public.category", } ) - - def setUp(self): - super().setUp() - self.temp_dir = self.env["fs.storage"].create( + model_xmlids = """ + fs_product_multi_image.model_fs_product_category_image, + fs_product_multi_image.model_fs_product_image + """ + cls.temp_dir = cls.env["fs.storage"].create( { "name": "Temp FS Storage", "protocol": "memory", "code": "mem_dir", "directory_path": "/tmp/", - "model_xmlids": "fs_product_multi_image.model_fs_product_category_image," - "fs_product_multi_image.model_fs_product_image", + "model_xmlids": model_xmlids, } ) diff --git a/fs_product_public_category_multi_image/views/product_public_category.xml b/fs_product_public_category_multi_image/views/product_public_category.xml index 73e3e3961e..bcb6ed3736 100644 --- a/fs_product_public_category_multi_image/views/product_public_category.xml +++ b/fs_product_public_category_multi_image/views/product_public_category.xml @@ -4,18 +4,14 @@ product.public.category - -
- - - - - -
+ + + +
From e016a9f9b4f6d57d6d499eaddd6b98d90b07ae07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Duy=20=28=C4=90=E1=BB=97=20Anh=29?= Date: Mon, 21 Apr 2025 09:35:40 +0700 Subject: [PATCH 8/8] [DONT MERGE] test-requirements.txt --- test-requirements.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test-requirements.txt b/test-requirements.txt index e63f876677..e61a9cd40c 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -2,3 +2,5 @@ odoo_test_helper requests_mock vcrpy-unittest s3fs>=2025.3.0 +odoo-addon-fs_image @ git+https://github.com/OCA/storage.git@refs/pull/446/head#subdirectory=fs_image +odoo-addon-fs_base_multi_image @ git+https://github.com/xaviedoanhduy/storage.git@refs/pull/4/head#subdirectory=fs_base_multi_image