From 58a7e3ca4c70b7d01eed7095321faaefce93e059 Mon Sep 17 00:00:00 2001 From: BernatPForgeFlow Date: Tue, 18 Jun 2024 12:00:38 +0200 Subject: [PATCH 1/4] [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 + ...fs_product_public_category_multi_image.pot | 133 ++++++ .../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 | 434 ++++++++++++++++++ .../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 + 18 files changed, 924 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/i18n/fs_product_public_category_multi_image.pot 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..0a31535ae9 --- /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:d738d87f799859c8be87121897cd1f848a68a1852585a074c5c00b987b974991 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/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 "" 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 z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N 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..4cbe2157ac --- /dev/null +++ b/fs_product_public_category_multi_image/static/description/index.html @@ -0,0 +1,434 @@ + + + + + +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 dcf12a55ea3d32692e2db40d05a8ffa7109940ff Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 11 Nov 2024 11:19:49 +0000 Subject: [PATCH 2/4] Added translation using Weblate (Italian) --- .../i18n/it.po | 136 ++++++++++++++++++ 1 file changed, 136 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..21739d1d22 --- /dev/null +++ b/fs_product_public_category_multi_image/i18n/it.po @@ -0,0 +1,136 @@ +# 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" +"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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "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 "Categoria prodotto sito web" From 51490a965adbfa228cfbf13ef1e671ff494eb9ef Mon Sep 17 00:00:00 2001 From: Ruchir Shukla Date: Tue, 2 Sep 2025 15:26:36 +0530 Subject: [PATCH 3/4] [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 ----- .../static/description/index.html | 15 ++++++----- 8 files changed, 34 insertions(+), 28 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..b35bc32a8d 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/17.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-17-0/storage-17-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=17.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..78bbd36a9f --- /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/static/description/index.html b/fs_product_public_category_multi_image/static/description/index.html index 4cbe2157ac..867c8afac6 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.

From 0be0eb6f923cbf37c51cc9002f433c56c1d739aa Mon Sep 17 00:00:00 2001 From: Ruchir Shukla Date: Tue, 2 Sep 2025 15:31:01 +0530 Subject: [PATCH 4/4] [MIG] fs_product_public_category_multi_image: Migration to 17.0 --- fs_product_public_category_multi_image/__manifest__.py | 2 +- .../tests/test_fs_product_multi_image.py | 7 +++++-- .../views/product_public_category.xml | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/fs_product_public_category_multi_image/__manifest__.py b/fs_product_public_category_multi_image/__manifest__.py index dc19b2f4b4..52f7727ecc 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": "17.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/tests/test_fs_product_multi_image.py b/fs_product_public_category_multi_image/tests/test_fs_product_multi_image.py index 35e64f1636..0627f85328 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 @@ -47,14 +47,17 @@ def setUpClass(cls): def setUp(self): super().setUp() + model_xmlids = """ + fs_product_multi_image.model_fs_product_category_image, + fs_product_multi_image.model_fs_product_image + """ 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", + "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..397db70a54 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,8 +4,8 @@ product.public.category - -
+ +