From 146c94fd21b8687ef12b17c73ef489edeb49c42b Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Tue, 5 Sep 2023 19:36:32 +0200 Subject: [PATCH 01/18] [ADD] fs_product_multi_media: A drop-in replacement of storage_product_media and storage_media --- fs_product_multi_media/README.rst | 35 ++++ fs_product_multi_media/__init__.py | 1 + fs_product_multi_media/__manifest__.py | 25 +++ fs_product_multi_media/models/__init__.py | 6 + .../models/fs_product_category_media.py | 17 ++ .../models/fs_product_media.py | 44 ++++ .../models/product_category.py | 15 ++ .../models/product_product.py | 38 ++++ .../models/product_template.py | 15 ++ .../models/product_template_attribute_line.py | 31 +++ .../readme/CONTRIBUTORS.rst | 2 + fs_product_multi_media/readme/DESCRIPTION.rst | 4 + fs_product_multi_media/readme/USAGE.rst | 6 + .../security/fs_product_category_media.xml | 34 +++ .../security/fs_product_media.xml | 34 +++ .../static/description/icon.png | Bin 0 -> 9455 bytes fs_product_multi_media/tests/__init__.py | 1 + .../tests/test_fs_product_multi_media.py | 196 ++++++++++++++++++ .../views/fs_product_category_media.xml | 22 ++ .../views/fs_product_media.xml | 31 +++ .../views/product_category.xml | 24 +++ .../views/product_product.xml | 19 ++ .../views/product_template.xml | 20 ++ 23 files changed, 620 insertions(+) create mode 100644 fs_product_multi_media/README.rst create mode 100644 fs_product_multi_media/__init__.py create mode 100644 fs_product_multi_media/__manifest__.py create mode 100644 fs_product_multi_media/models/__init__.py create mode 100644 fs_product_multi_media/models/fs_product_category_media.py create mode 100644 fs_product_multi_media/models/fs_product_media.py create mode 100644 fs_product_multi_media/models/product_category.py create mode 100644 fs_product_multi_media/models/product_product.py create mode 100644 fs_product_multi_media/models/product_template.py create mode 100644 fs_product_multi_media/models/product_template_attribute_line.py create mode 100644 fs_product_multi_media/readme/CONTRIBUTORS.rst create mode 100644 fs_product_multi_media/readme/DESCRIPTION.rst create mode 100644 fs_product_multi_media/readme/USAGE.rst create mode 100644 fs_product_multi_media/security/fs_product_category_media.xml create mode 100644 fs_product_multi_media/security/fs_product_media.xml create mode 100644 fs_product_multi_media/static/description/icon.png create mode 100644 fs_product_multi_media/tests/__init__.py create mode 100644 fs_product_multi_media/tests/test_fs_product_multi_media.py create mode 100644 fs_product_multi_media/views/fs_product_category_media.xml create mode 100644 fs_product_multi_media/views/fs_product_media.xml create mode 100644 fs_product_multi_media/views/product_category.xml create mode 100644 fs_product_multi_media/views/product_product.xml create mode 100644 fs_product_multi_media/views/product_template.xml diff --git a/fs_product_multi_media/README.rst b/fs_product_multi_media/README.rst new file mode 100644 index 0000000000..38929e8775 --- /dev/null +++ b/fs_product_multi_media/README.rst @@ -0,0 +1,35 @@ +**This file is going to be generated by oca-gen-addon-readme.** + +*Manual changes will be overwritten.* + +Please provide content in the ``readme`` directory: + +* **DESCRIPTION.rst** (required) +* INSTALL.rst (optional) +* CONFIGURE.rst (optional) +* **USAGE.rst** (optional, highly recommended) +* DEVELOP.rst (optional) +* ROADMAP.rst (optional) +* HISTORY.rst (optional, recommended) +* **CONTRIBUTORS.rst** (optional, highly recommended) +* CREDITS.rst (optional) + +Content of this README will also be drawn from the addon manifest, +from keys such as name, authors, maintainers, development_status, +and license. + +A good, one sentence summary in the manifest is also highly recommended. + + +Automatic changelog generation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`HISTORY.rst` can be auto generated using `towncrier `_. + +Just put towncrier compatible changelog fragments into `readme/newsfragments` +and the changelog file will be automatically generated and updated when a new fragment is added. + +Please refer to `towncrier` documentation to know more. + +NOTE: the changelog will be automatically generated when using `/ocabot merge $option`. +If you need to run it manually, refer to `OCA/maintainer-tools README `_. diff --git a/fs_product_multi_media/__init__.py b/fs_product_multi_media/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/fs_product_multi_media/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/fs_product_multi_media/__manifest__.py b/fs_product_multi_media/__manifest__.py new file mode 100644 index 0000000000..75e31d1b0e --- /dev/null +++ b/fs_product_multi_media/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Fs Product Multi Media", + "summary": """ + Link media to products and categories""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "ACSONE SA/NV,Akretion,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/storage", + "depends": ["fs_base_multi_media", "product", "sales_team"], + "data": [ + "security/fs_product_category_media.xml", + "security/fs_product_media.xml", + "views/fs_product_category_media.xml", + "views/fs_product_media.xml", + "views/product_category.xml", + "views/product_product.xml", + "views/product_template.xml", + ], + "demo": [], + "maintainers": ["lmignon"], + "development_status": "Alpha", +} diff --git a/fs_product_multi_media/models/__init__.py b/fs_product_multi_media/models/__init__.py new file mode 100644 index 0000000000..18e5bfc92d --- /dev/null +++ b/fs_product_multi_media/models/__init__.py @@ -0,0 +1,6 @@ +from . import fs_product_category_media +from . import fs_product_media +from . import product_category +from . import product_template +from . import product_product +from . import product_template_attribute_line diff --git a/fs_product_multi_media/models/fs_product_category_media.py b/fs_product_multi_media/models/fs_product_category_media.py new file mode 100644 index 0000000000..527699bacc --- /dev/null +++ b/fs_product_multi_media/models/fs_product_category_media.py @@ -0,0 +1,17 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class FsProductCategoryMedia(models.Model): + _name = "fs.product.category.media" + _inherit = "fs.media.relation.mixin" + _description = "Product Category Media" + + product_categ_id = fields.Many2one( + comodel_name="product.category", + string="Product Category", + ondelete="cascade", + index=True, + ) diff --git a/fs_product_multi_media/models/fs_product_media.py b/fs_product_multi_media/models/fs_product_media.py new file mode 100644 index 0000000000..2796e9745a --- /dev/null +++ b/fs_product_multi_media/models/fs_product_media.py @@ -0,0 +1,44 @@ +# Copyright 2023 ACSONE SA/NV +# Copyright 2018 Akretion (http://www.akretion.com). +# @author Raphaël Reverdy +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class FsProductMedia(models.Model): + _name = "fs.product.media" + _inherit = "fs.media.relation.mixin" + _description = "Product Media" + + product_tmpl_id = fields.Many2one( + comodel_name="product.template", + string="Product Template", + ondelete="cascade", + index=True, + ) + attribute_value_ids = fields.Many2many( + "product.attribute.value", + string="Attributes", + domain="[('id', 'in', available_attribute_value_ids)]", + ) + # This field will list all attribute value used by the template + # in order to filter the attribute value available for the current media + available_attribute_value_ids = fields.Many2many( + "product.attribute.value", + string="Available Attributes", + compute="_compute_available_attribute", + ) + + @api.depends("product_tmpl_id.attribute_line_ids.value_ids") + def _compute_available_attribute(self): + for rec in self: + rec.available_attribute_value_ids = rec.product_tmpl_id.mapped( + "attribute_line_ids.value_ids" + ) + + def _match_variant(self, variant): + variant_attribute_values = variant.mapped( + "product_template_attribute_value_ids.product_attribute_value_id" + ) + return not bool(self.attribute_value_ids - variant_attribute_values) diff --git a/fs_product_multi_media/models/product_category.py b/fs_product_multi_media/models/product_category.py new file mode 100644 index 0000000000..869e3a700b --- /dev/null +++ b/fs_product_multi_media/models/product_category.py @@ -0,0 +1,15 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductCategory(models.Model): + + _inherit = "product.category" + + media_ids = fields.One2many( + string="Medias", + comodel_name="fs.product.category.media", + inverse_name="product_categ_id", + ) diff --git a/fs_product_multi_media/models/product_product.py b/fs_product_multi_media/models/product_product.py new file mode 100644 index 0000000000..fe2d72c707 --- /dev/null +++ b/fs_product_multi_media/models/product_product.py @@ -0,0 +1,38 @@ +# Copyright 2017 Akretion (http://www.akretion.com). +# @author Sébastien BEAU +# Copyright 2021 Camptocamp SA (http://www.camptocamp.com) +# @author Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import api, fields, models + + +class ProductProduct(models.Model): + _inherit = "product.product" + + variant_media_ids = fields.Many2many( + "fs.product.media", + compute="_compute_variant_media_ids", + store=True, + string="Variant Medias", + ) + + @api.depends( + "product_tmpl_id.media_ids", + "product_tmpl_id.media_ids.sequence", + "product_tmpl_id.media_ids.attribute_value_ids", + "product_template_attribute_value_ids", + ) + def _compute_variant_media_ids(self): + for variant in self: + media_relations = set() + # Not sure sorting is needed here + sorted_media_relations = variant.media_ids.sorted( + key=lambda i: (i.sequence, i.id) + ) + for media_rel in sorted_media_relations: + if media_rel._match_variant(variant): + media_relations.add(media_rel.id) + variant.variant_media_ids = ( + list(media_relations) if media_relations else False + ) diff --git a/fs_product_multi_media/models/product_template.py b/fs_product_multi_media/models/product_template.py new file mode 100644 index 0000000000..2fe5ddca09 --- /dev/null +++ b/fs_product_multi_media/models/product_template.py @@ -0,0 +1,15 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductTemplate(models.Model): + + _inherit = "product.template" + + media_ids = fields.One2many( + string="Medias", + comodel_name="fs.product.media", + inverse_name="product_tmpl_id", + ) diff --git a/fs_product_multi_media/models/product_template_attribute_line.py b/fs_product_multi_media/models/product_template_attribute_line.py new file mode 100644 index 0000000000..fd852340ab --- /dev/null +++ b/fs_product_multi_media/models/product_template_attribute_line.py @@ -0,0 +1,31 @@ +# Copyright 2023 ACSONE SA/NV +# Copyright 2017 Akretion (http://www.akretion.com). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class ProductTemplateAttributeLine(models.Model): + + _inherit = "product.template.attribute.line" + + def write(self, values): + res = super().write(values) + if "value_ids" in values: + product_media_attribute_value_ids = self.product_tmpl_id.media_ids.mapped( + "attribute_value_ids" + ).filtered(lambda x: x.attribute_id == self.attribute_id) + available_attribute_values_ids = self.value_ids + to_remove = product_media_attribute_value_ids.filtered( + lambda x: x not in available_attribute_values_ids + ) + if to_remove: + for media in self.product_tmpl_id.media_ids: + media.attribute_value_ids -= to_remove + return res + + def unlink(self): + for line in self: + for media in line.product_tmpl_id.media_ids: + media.attribute_value_ids -= line.value_ids + return super().unlink() diff --git a/fs_product_multi_media/readme/CONTRIBUTORS.rst b/fs_product_multi_media/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..be1d6a64a7 --- /dev/null +++ b/fs_product_multi_media/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Raphaël Reverdy +* Laurent Mignon (https://www.acsone.eu/) diff --git a/fs_product_multi_media/readme/DESCRIPTION.rst b/fs_product_multi_media/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..b4a8c781d8 --- /dev/null +++ b/fs_product_multi_media/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +Attach medias to products and categories and store them on an external +filesystem instead of the database. + +This addon is a drop-in replacement for the **storage_media_product** addon. diff --git a/fs_product_multi_media/readme/USAGE.rst b/fs_product_multi_media/readme/USAGE.rst new file mode 100644 index 0000000000..3887f12e3a --- /dev/null +++ b/fs_product_multi_media/readme/USAGE.rst @@ -0,0 +1,6 @@ +On the category and product form, a new tab allows you to add medias to the +related object. The medias can be specific to the model or you can use an +existing one. + +When attaching a media to a product you can also specify for which variant +attribute values the media is valid. diff --git a/fs_product_multi_media/security/fs_product_category_media.xml b/fs_product_multi_media/security/fs_product_category_media.xml new file mode 100644 index 0000000000..2650bb3932 --- /dev/null +++ b/fs_product_multi_media/security/fs_product_category_media.xml @@ -0,0 +1,34 @@ + + + + + + fs.product.category.media access read + + + + + + + + + fs.product.category.media access system admin + + + + + + + + + fs.product.category.media access sales manager + + + + + + + + + diff --git a/fs_product_multi_media/security/fs_product_media.xml b/fs_product_multi_media/security/fs_product_media.xml new file mode 100644 index 0000000000..c0a937463b --- /dev/null +++ b/fs_product_multi_media/security/fs_product_media.xml @@ -0,0 +1,34 @@ + + + + + + fs.product.media access read + + + + + + + + + fs.product.media access erp manager + + + + + + + + + fs.product.media access sales manager + + + + + + + + + diff --git a/fs_product_multi_media/static/description/icon.png b/fs_product_multi_media/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/fs_product_multi_media/tests/__init__.py b/fs_product_multi_media/tests/__init__.py new file mode 100644 index 0000000000..db4b2970f6 --- /dev/null +++ b/fs_product_multi_media/tests/__init__.py @@ -0,0 +1 @@ +from . import test_fs_product_multi_media diff --git a/fs_product_multi_media/tests/test_fs_product_multi_media.py b/fs_product_multi_media/tests/test_fs_product_multi_media.py new file mode 100644 index 0000000000..4cc5ebfe0f --- /dev/null +++ b/fs_product_multi_media/tests/test_fs_product_multi_media.py @@ -0,0 +1,196 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import base64 + +from odoo.tests.common import TransactionCase + + +class TestFsProductMultiMedia(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + cls.media_content_a = b"media content a" + cls.media_content_b = b"media content b" + cls.media_content_c = b"media content c" + cls.template = cls.env.ref("product.product_product_4_product_template") + cls.product_a = cls.env.ref("product.product_product_4") + cls.product_b = cls.env.ref("product.product_product_4b") + cls.product_c = cls.env.ref("product.product_product_4c") + cls.media_type_a = cls.env["fs.media.type"].create( + {"name": "Media Type A", "code": "media_type_a"} + ) + cls.media_type_b = cls.env["fs.media.type"].create( + {"name": "Media Type B", "code": "media_type_b"} + ) + cls.media_type_c = cls.env["fs.media.type"].create( + {"name": "Media Type C", "code": "media_type_c"} + ) + cls.media_a = cls.env["fs.media"].create( + { + "file": { + "filename": "a.txt", + "content": base64.b64encode(cls.media_content_a), + }, + "media_type_id": cls.media_type_a.id, + } + ) + cls.media_c = cls.env["fs.media"].create( + { + "file": { + "filename": "c.txt", + "content": base64.b64encode(cls.media_content_c), + }, + "media_type_id": cls.media_type_c.id, + } + ) + cls.media_b = cls.env["fs.media"].create( + { + "file": { + "filename": "b.txt", + "content": base64.b64encode(cls.media_content_b), + }, + "media_type_id": cls.media_type_b.id, + } + ) + + 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_media.model_fs_product_category_media," + "fs_product_multi_media.model_fs_product_media", + } + ) + + def test_available_attribute_value(self): + # The template have already 5 attribute values + # see demo data of ipad + media = self.env["fs.product.media"].new({"product_tmpl_id": self.template.id}) + self.assertEqual(len(media.available_attribute_value_ids), 4) + + def test_add_image_for_all_variant(self): + self.assertEqual(len(self.product_a.variant_media_ids), 0) + media = self.env["fs.product.media"].create( + { + "product_tmpl_id": self.template.id, + "specific_file": { + "filename": "a.txt", + "content": base64.b64encode(self.media_content_a), + }, + } + ) + self.assertEqual(self.product_a.variant_media_ids, media) + self.assertEqual( + self.product_a.variant_media_ids.file.getvalue(), self.media_content_a + ) + self.assertEqual(self.product_b.variant_media_ids, media) + self.assertEqual( + self.product_b.variant_media_ids.file.getvalue(), self.media_content_a + ) + self.assertEqual(self.product_c.variant_media_ids, media) + self.assertEqual( + self.product_c.variant_media_ids.file.getvalue(), self.media_content_a + ) + + def test_add_media_for_white_variant(self): + media = self.env["fs.product.media"].create( + { + "product_tmpl_id": self.template.id, + "media_id": self.media_a.id, + "attribute_value_ids": [ + (6, 0, [self.env.ref("product.product_attribute_value_3").id]) + ], + } + ) + # White product should have the media + self.assertEqual(self.product_a.variant_media_ids, media) + self.assertEqual(self.product_c.variant_media_ids, media) + # Black product should not have the media + self.assertEqual(len(self.product_b.variant_media_ids), 0) + + def _create_multiple_medias(self): + media_c = self.env["fs.product.media"].create( + { + "product_tmpl_id": self.template.id, + "media_id": self.media_c.id, + "sequence": 10, + "link_existing": True, + } + ) + media_a = self.env["fs.product.media"].create( + { + "product_tmpl_id": self.template.id, + "media_id": self.media_a.id, + "attribute_value_ids": [ + (6, 0, [self.env.ref("product.product_attribute_value_3").id]) + ], + "sequence": 2, + "link_existing": True, + } + ) + media_b = self.env["fs.product.media"].create( + { + "product_tmpl_id": self.template.id, + "media_id": self.media_b.id, + "attribute_value_ids": [ + (6, 0, [self.env.ref("product.product_attribute_value_4").id]) + ], + "sequence": 1, + "link_existing": True, + } + ) + return media_c, media_a, media_b + + def test_add_media_for_white_and_black_variant(self): + media_c, media_a, media_b = self._create_multiple_medias() + # White product should have the media_a and the media_c + self.assertEqual(self.product_a.variant_media_ids, media_a + media_c) + self.assertEqual(self.product_c.variant_media_ids, media_a + media_c) + # Black product should have the media_b and the media_c + self.assertEqual(self.product_b.variant_media_ids, media_b + media_c) + + def test_drop_template_attribute_value_propagation_to_media(self): + media_content_b = self.env["fs.product.media"].create( + { + "product_tmpl_id": self.template.id, + "media_id": self.media_b.id, + "attribute_value_ids": [ + ( + 6, + 0, + [ + self.env.ref("product.product_attribute_value_4").id, + self.env.ref("product.product_attribute_value_1").id, + ], + ) + ], + "sequence": 10, + "link_existing": True, + } + ) + # Remove Color black from variant tab: + self.template.attribute_line_ids.sudo().filtered( + lambda x: x.display_name == "Color" + ).value_ids -= self.env.ref("product.product_attribute_value_4") + # Attribute black is removed from media: + self.assertTrue( + self.env.ref("product.product_attribute_value_4") + not in media_content_b.attribute_value_ids + ) + + # Remove Leg attribute line from variant tab: + attr = self.template.attribute_line_ids.sudo().filtered( + lambda x: x.display_name == "Legs" + ) + attr.unlink() + # Product media attribute values from Legs are removed: + self.assertTrue( + self.env.ref("product.product_attribute_value_1") + not in media_content_b.attribute_value_ids + ) diff --git a/fs_product_multi_media/views/fs_product_category_media.xml b/fs_product_multi_media/views/fs_product_category_media.xml new file mode 100644 index 0000000000..257f34688d --- /dev/null +++ b/fs_product_multi_media/views/fs_product_category_media.xml @@ -0,0 +1,22 @@ + + + + + + product.category.fs.media.form + fs.product.category.media + + primary + + + + + + + + + diff --git a/fs_product_multi_media/views/fs_product_media.xml b/fs_product_multi_media/views/fs_product_media.xml new file mode 100644 index 0000000000..0fda034b8e --- /dev/null +++ b/fs_product_multi_media/views/fs_product_media.xml @@ -0,0 +1,31 @@ + + + + + + fs.product.media.form + fs.product.media + + primary + + + + + + + + + diff --git a/fs_product_multi_media/views/product_category.xml b/fs_product_multi_media/views/product_category.xml new file mode 100644 index 0000000000..ffba58215d --- /dev/null +++ b/fs_product_multi_media/views/product_category.xml @@ -0,0 +1,24 @@ + + + + + + product.category.form + product.category + + + + + + + + + + + + + diff --git a/fs_product_multi_media/views/product_product.xml b/fs_product_multi_media/views/product_product.xml new file mode 100644 index 0000000000..0ba5795057 --- /dev/null +++ b/fs_product_multi_media/views/product_product.xml @@ -0,0 +1,19 @@ + + + + + product.product + + + + + + + + + + diff --git a/fs_product_multi_media/views/product_template.xml b/fs_product_multi_media/views/product_template.xml new file mode 100644 index 0000000000..895927643b --- /dev/null +++ b/fs_product_multi_media/views/product_template.xml @@ -0,0 +1,20 @@ + + + + + product.template + + + + + + + + + + + From 9f1a3919e5413d05659bd8eda83c1318d8745cda Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Mon, 25 Sep 2023 12:11:13 +0200 Subject: [PATCH 02/18] [IMP] image_tag: Removes dependency on sale module --- .../tests/test_fs_product_multi_media.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs_product_multi_media/tests/test_fs_product_multi_media.py b/fs_product_multi_media/tests/test_fs_product_multi_media.py index 4cc5ebfe0f..23ac71fb9b 100644 --- a/fs_product_multi_media/tests/test_fs_product_multi_media.py +++ b/fs_product_multi_media/tests/test_fs_product_multi_media.py @@ -54,6 +54,9 @@ def setUpClass(cls): "media_type_id": cls.media_type_b.id, } ) + cls.is_sale_addon_installed = cls.env["ir.module.module"].search( + [("name", "=", "sale"), ("state", "=", "installed")] + ) def setUp(self): super().setUp() @@ -72,7 +75,10 @@ def test_available_attribute_value(self): # The template have already 5 attribute values # see demo data of ipad media = self.env["fs.product.media"].new({"product_tmpl_id": self.template.id}) - self.assertEqual(len(media.available_attribute_value_ids), 4) + expected = 4 + if self.is_sale_addon_installed: + expected += 1 + self.assertEqual(len(media.available_attribute_value_ids), expected) def test_add_image_for_all_variant(self): self.assertEqual(len(self.product_a.variant_media_ids), 0) From 8d0c3d12a3be4b077416763ae19860b325c602bc Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 25 Sep 2023 10:56:02 +0000 Subject: [PATCH 03/18] [UPD] Update fs_product_multi_media.pot --- .../i18n/fs_product_multi_media.pot | 171 ++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 fs_product_multi_media/i18n/fs_product_multi_media.pot diff --git a/fs_product_multi_media/i18n/fs_product_multi_media.pot b/fs_product_multi_media/i18n/fs_product_multi_media.pot new file mode 100644 index 0000000000..e8d9908080 --- /dev/null +++ b/fs_product_multi_media/i18n/fs_product_multi_media.pot @@ -0,0 +1,171 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fs_product_multi_media +# +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_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__attribute_value_ids +msgid "Attributes" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__available_attribute_value_ids +msgid "Available Attributes" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__create_uid +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__create_uid +msgid "Created by" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__create_date +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__create_date +msgid "Created on" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__display_name +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__display_name +msgid "Display Name" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__id +msgid "ID" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media____last_update +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_uid +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_date +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__link_existing +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__link_existing +msgid "Link existing media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__media_id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__media_id +msgid "Linked media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__file +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__file +msgid "Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__media_type_id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__media_type_id +msgid "Media Type" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_category__media_ids +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_product__media_ids +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_template__media_ids +#: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_category_form_view +#: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_template_only_form_view +msgid "Medias" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__mimetype +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__mimetype +msgid "Mimetype" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__name +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__name +msgid "Name" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_template +msgid "Product" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_category +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__product_categ_id +msgid "Product Category" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_fs_product_category_media +msgid "Product Category Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_fs_product_media +msgid "Product Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__product_tmpl_id +msgid "Product Template" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_template_attribute_line +msgid "Product Template Attribute Line" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__sequence +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__sequence +msgid "Sequence" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__specific_file +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__specific_file +msgid "Specific Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__specific_media_type_id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__specific_media_type_id +msgid "Specific Media Type" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_product__variant_media_ids +msgid "Variant Medias" +msgstr "" From e2f928d9874d0c4246756f64f3e15f37b6d1ab73 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 25 Sep 2023 10:59:47 +0000 Subject: [PATCH 04/18] [BOT] post-merge updates --- fs_product_multi_media/README.rst | 117 ++++- fs_product_multi_media/__manifest__.py | 2 +- .../static/description/index.html | 442 ++++++++++++++++++ 3 files changed, 536 insertions(+), 25 deletions(-) create mode 100644 fs_product_multi_media/static/description/index.html diff --git a/fs_product_multi_media/README.rst b/fs_product_multi_media/README.rst index 38929e8775..c0d1c21e5a 100644 --- a/fs_product_multi_media/README.rst +++ b/fs_product_multi_media/README.rst @@ -1,35 +1,104 @@ -**This file is going to be generated by oca-gen-addon-readme.** +====================== +Fs Product Multi Media +====================== -*Manual changes will be overwritten.* +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:b649191cb95b8b72063aeb4dcae0a56ce173ba8e39aa0a6ac71809d55865720f + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -Please provide content in the ``readme`` directory: +.. |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_multi_media + :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_multi_media + :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 -* **DESCRIPTION.rst** (required) -* INSTALL.rst (optional) -* CONFIGURE.rst (optional) -* **USAGE.rst** (optional, highly recommended) -* DEVELOP.rst (optional) -* ROADMAP.rst (optional) -* HISTORY.rst (optional, recommended) -* **CONTRIBUTORS.rst** (optional, highly recommended) -* CREDITS.rst (optional) +|badge1| |badge2| |badge3| |badge4| |badge5| -Content of this README will also be drawn from the addon manifest, -from keys such as name, authors, maintainers, development_status, -and license. +Attach medias to products and categories and store them on an external +filesystem instead of the database. -A good, one sentence summary in the manifest is also highly recommended. +This addon is a drop-in replacement for the **storage_media_product** addon. +.. 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 `_ -Automatic changelog generation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**Table of contents** -`HISTORY.rst` can be auto generated using `towncrier `_. +.. contents:: + :local: -Just put towncrier compatible changelog fragments into `readme/newsfragments` -and the changelog file will be automatically generated and updated when a new fragment is added. +Usage +===== -Please refer to `towncrier` documentation to know more. +On the category and product form, a new tab allows you to add medias to the +related object. The medias can be specific to the model or you can use an +existing one. -NOTE: the changelog will be automatically generated when using `/ocabot merge $option`. -If you need to run it manually, refer to `OCA/maintainer-tools README `_. +When attaching a media to a product you can also specify for which variant +attribute values the media is valid. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ACSONE SA/NV +* Akretion + +Contributors +~~~~~~~~~~~~ + +* Raphaël Reverdy +* Laurent Mignon (https://www.acsone.eu/) + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-lmignon| image:: https://github.com/lmignon.png?size=40px + :target: https://github.com/lmignon + :alt: lmignon + +Current `maintainer `__: + +|maintainer-lmignon| + +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_multi_media/__manifest__.py b/fs_product_multi_media/__manifest__.py index 75e31d1b0e..37cb64d998 100644 --- a/fs_product_multi_media/__manifest__.py +++ b/fs_product_multi_media/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Product Multi Media", "summary": """ Link media to products and categories""", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "license": "AGPL-3", "author": "ACSONE SA/NV,Akretion,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_product_multi_media/static/description/index.html b/fs_product_multi_media/static/description/index.html new file mode 100644 index 0000000000..e64d8e1eed --- /dev/null +++ b/fs_product_multi_media/static/description/index.html @@ -0,0 +1,442 @@ + + + + + + +Fs Product Multi Media + + + +
+

Fs Product Multi Media

+ + +

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

+

Attach medias to products and categories and store them on an external +filesystem instead of the database.

+

This addon is a drop-in replacement for the storage_media_product addon.

+
+

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

+

On the category and product form, a new tab allows you to add medias to the +related object. The medias can be specific to the model or you can use an +existing one.

+

When attaching a media to a product you can also specify for which variant +attribute values the media is valid.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • ACSONE SA/NV
  • +
  • Akretion
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

lmignon

+

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 cada014865da2e39974a0f60a5ecb7dda8bfadbc Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Wed, 4 Oct 2023 09:24:08 +0200 Subject: [PATCH 05/18] [FIX] fs_product_multi_media: Sort variant_media_ids by sequence Ensures the variant_media_ids are sorted by sequence and name. Before this change, the order was random and could change between runs. --- .../models/product_product.py | 14 +++++--------- .../readme/newsfragments/.gitignore | 0 .../readme/newsfragments/282.bugfix | 2 ++ .../tests/test_fs_product_multi_media.py | 17 +++++++++++++++++ 4 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 fs_product_multi_media/readme/newsfragments/.gitignore create mode 100644 fs_product_multi_media/readme/newsfragments/282.bugfix diff --git a/fs_product_multi_media/models/product_product.py b/fs_product_multi_media/models/product_product.py index fe2d72c707..b7801b4de8 100644 --- a/fs_product_multi_media/models/product_product.py +++ b/fs_product_multi_media/models/product_product.py @@ -25,14 +25,10 @@ class ProductProduct(models.Model): ) def _compute_variant_media_ids(self): for variant in self: - media_relations = set() - # Not sure sorting is needed here - sorted_media_relations = variant.media_ids.sorted( - key=lambda i: (i.sequence, i.id) + variant_media_ids = variant.media_ids.filtered( + lambda i: i._match_variant(variant) ) - for media_rel in sorted_media_relations: - if media_rel._match_variant(variant): - media_relations.add(media_rel.id) - variant.variant_media_ids = ( - list(media_relations) if media_relations else False + variant_media_ids = variant_media_ids.sorted( + key=lambda i: (i.sequence, i.name) ) + variant.variant_media_ids = variant_media_ids diff --git a/fs_product_multi_media/readme/newsfragments/.gitignore b/fs_product_multi_media/readme/newsfragments/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/fs_product_multi_media/readme/newsfragments/282.bugfix b/fs_product_multi_media/readme/newsfragments/282.bugfix new file mode 100644 index 0000000000..d2c21e6758 --- /dev/null +++ b/fs_product_multi_media/readme/newsfragments/282.bugfix @@ -0,0 +1,2 @@ +Ensures the variant_media_ids are sorted by sequence and name. Before this +change, the order was random and could change between runs. diff --git a/fs_product_multi_media/tests/test_fs_product_multi_media.py b/fs_product_multi_media/tests/test_fs_product_multi_media.py index 23ac71fb9b..fe6f229e22 100644 --- a/fs_product_multi_media/tests/test_fs_product_multi_media.py +++ b/fs_product_multi_media/tests/test_fs_product_multi_media.py @@ -161,6 +161,23 @@ def test_add_media_for_white_and_black_variant(self): # Black product should have the media_b and the media_c self.assertEqual(self.product_b.variant_media_ids, media_b + media_c) + def test_media_variant_sequence(self): + media_c, media_a, media_b = self._create_multiple_medias() + # White product should have the media_a and the media_c + self.assertEqual(self.product_a.variant_media_ids, media_a + media_c) + # white product should have medias sorted by sequence + self.assertListEqual( + self.product_a.variant_media_ids.mapped("sequence"), + [media_a.sequence, media_c.sequence], + ) + # change sequence + media_c.sequence = 10 + media_a.sequence = 20 + self.assertListEqual( + self.product_a.variant_media_ids.mapped("sequence"), + [media_c.sequence, media_a.sequence], + ) + def test_drop_template_attribute_value_propagation_to_media(self): media_content_b = self.env["fs.product.media"].create( { From 9bb632b93519cdba9a570a6ddd95f2bef705a568 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 4 Oct 2023 07:52:30 +0000 Subject: [PATCH 06/18] [BOT] post-merge updates --- fs_product_multi_media/README.rst | 13 ++++++- fs_product_multi_media/__manifest__.py | 2 +- fs_product_multi_media/readme/HISTORY.rst | 7 ++++ .../readme/newsfragments/282.bugfix | 2 - .../static/description/index.html | 37 +++++++++++++------ 5 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 fs_product_multi_media/readme/HISTORY.rst delete mode 100644 fs_product_multi_media/readme/newsfragments/282.bugfix diff --git a/fs_product_multi_media/README.rst b/fs_product_multi_media/README.rst index c0d1c21e5a..529605f814 100644 --- a/fs_product_multi_media/README.rst +++ b/fs_product_multi_media/README.rst @@ -7,7 +7,7 @@ Fs Product Multi Media !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:b649191cb95b8b72063aeb4dcae0a56ce173ba8e39aa0a6ac71809d55865720f + !! source digest: sha256:3911858ee6494b88ab7dce64232131c25f9ef04a96d9e4604f06b2c56f24ec76 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png @@ -53,6 +53,17 @@ existing one. When attaching a media to a product you can also specify for which variant attribute values the media is valid. +Changelog +========= + +16.0.1.0.2 (2023-10-04) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Bugfixes** + +- Ensures the variant_media_ids are sorted by sequence and name. Before this + change, the order was random and could change between runs. (`#282 `_) + Bug Tracker =========== diff --git a/fs_product_multi_media/__manifest__.py b/fs_product_multi_media/__manifest__.py index 37cb64d998..67192d95ac 100644 --- a/fs_product_multi_media/__manifest__.py +++ b/fs_product_multi_media/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Product Multi Media", "summary": """ Link media to products and categories""", - "version": "16.0.1.0.1", + "version": "16.0.1.0.2", "license": "AGPL-3", "author": "ACSONE SA/NV,Akretion,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_product_multi_media/readme/HISTORY.rst b/fs_product_multi_media/readme/HISTORY.rst new file mode 100644 index 0000000000..60921bc9b2 --- /dev/null +++ b/fs_product_multi_media/readme/HISTORY.rst @@ -0,0 +1,7 @@ +16.0.1.0.2 (2023-10-04) +~~~~~~~~~~~~~~~~~~~~~~~ + +**Bugfixes** + +- Ensures the variant_media_ids are sorted by sequence and name. Before this + change, the order was random and could change between runs. (`#282 `_) diff --git a/fs_product_multi_media/readme/newsfragments/282.bugfix b/fs_product_multi_media/readme/newsfragments/282.bugfix deleted file mode 100644 index d2c21e6758..0000000000 --- a/fs_product_multi_media/readme/newsfragments/282.bugfix +++ /dev/null @@ -1,2 +0,0 @@ -Ensures the variant_media_ids are sorted by sequence and name. Before this -change, the order was random and could change between runs. diff --git a/fs_product_multi_media/static/description/index.html b/fs_product_multi_media/static/description/index.html index e64d8e1eed..0e54d5231c 100644 --- a/fs_product_multi_media/static/description/index.html +++ b/fs_product_multi_media/static/description/index.html @@ -367,7 +367,7 @@

Fs Product Multi Media

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:b649191cb95b8b72063aeb4dcae0a56ce173ba8e39aa0a6ac71809d55865720f +!! source digest: sha256:3911858ee6494b88ab7dce64232131c25f9ef04a96d9e4604f06b2c56f24ec76 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

Attach medias to products and categories and store them on an external @@ -383,11 +383,15 @@

Fs Product Multi Media

+
+

Changelog

+
+

16.0.1.0.2 (2023-10-04)

+

Bugfixes

+
    +
  • Ensures the variant_media_ids are sorted by sequence and name. Before this +change, the order was random and could change between runs. (#282)
  • +
+
+
-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -409,23 +424,23 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • ACSONE SA/NV
  • Akretion
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose From e2534db9e00ff37558692fb98103b7c85164b41b Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Fri, 27 Oct 2023 11:28:20 +0000 Subject: [PATCH 07/18] Added translation using Weblate (Spanish) --- fs_product_multi_media/i18n/es.po | 172 ++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 fs_product_multi_media/i18n/es.po diff --git a/fs_product_multi_media/i18n/es.po b/fs_product_multi_media/i18n/es.po new file mode 100644 index 0000000000..0d883b2a02 --- /dev/null +++ b/fs_product_multi_media/i18n/es.po @@ -0,0 +1,172 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fs_product_multi_media +# +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: es\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_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__attribute_value_ids +msgid "Attributes" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__available_attribute_value_ids +msgid "Available Attributes" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__create_uid +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__create_uid +msgid "Created by" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__create_date +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__create_date +msgid "Created on" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__display_name +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__display_name +msgid "Display Name" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__id +msgid "ID" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media____last_update +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_uid +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_date +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__link_existing +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__link_existing +msgid "Link existing media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__media_id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__media_id +msgid "Linked media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__file +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__file +msgid "Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__media_type_id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__media_type_id +msgid "Media Type" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_category__media_ids +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_product__media_ids +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_template__media_ids +#: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_category_form_view +#: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_template_only_form_view +msgid "Medias" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__mimetype +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__mimetype +msgid "Mimetype" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__name +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__name +msgid "Name" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_template +msgid "Product" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_category +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__product_categ_id +msgid "Product Category" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_fs_product_category_media +msgid "Product Category Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_fs_product_media +msgid "Product Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__product_tmpl_id +msgid "Product Template" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_template_attribute_line +msgid "Product Template Attribute Line" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__sequence +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__sequence +msgid "Sequence" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__specific_file +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__specific_file +msgid "Specific Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__specific_media_type_id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__specific_media_type_id +msgid "Specific Media Type" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_product__variant_media_ids +msgid "Variant Medias" +msgstr "" From 7cb7dcadf0d8fa0bd05f1c4e6c8abedfeed1e22e Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Fri, 27 Oct 2023 11:30:24 +0000 Subject: [PATCH 08/18] Translated using Weblate (Spanish) Currently translated at 100.0% (27 of 27 strings) Translation: storage-16.0/storage-16.0-fs_product_multi_media Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_product_multi_media/es/ --- fs_product_multi_media/i18n/es.po | 58 ++++++++++++++++--------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/fs_product_multi_media/i18n/es.po b/fs_product_multi_media/i18n/es.po index 0d883b2a02..d082f02e52 100644 --- a/fs_product_multi_media/i18n/es.po +++ b/fs_product_multi_media/i18n/es.po @@ -6,89 +6,91 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2023-10-29 00:15+0000\n" +"Last-Translator: Ivorra78 \n" "Language-Team: none\n" "Language: es\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 4.17\n" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__attribute_value_ids msgid "Attributes" -msgstr "" +msgstr "Atributos" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__available_attribute_value_ids msgid "Available Attributes" -msgstr "" +msgstr "Atributos Disponibles" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__create_uid #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__create_uid msgid "Created by" -msgstr "" +msgstr "Creado por" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__create_date #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__create_date msgid "Created on" -msgstr "" +msgstr "Creado el" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__display_name #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__display_name msgid "Display Name" -msgstr "" +msgstr "Mostrar Nombre" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__id #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__id msgid "ID" -msgstr "" +msgstr "ID (identificación)" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media____last_update #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media____last_update msgid "Last Modified on" -msgstr "" +msgstr "Última Modificación el" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_uid #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Actualizado por Última vez por" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_date #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_date msgid "Last Updated on" -msgstr "" +msgstr "Última Actualización el" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__link_existing #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__link_existing msgid "Link existing media" -msgstr "" +msgstr "Vincular los medios existentes" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__media_id #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__media_id msgid "Linked media" -msgstr "" +msgstr "Medios vinculados" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__file #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__file msgid "Media" -msgstr "" +msgstr "Medios de comunicación" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__media_type_id #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__media_type_id msgid "Media Type" -msgstr "" +msgstr "Tipo de Medio" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_product_category__media_ids @@ -98,75 +100,75 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_normal_form_view #: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_template_only_form_view msgid "Medias" -msgstr "" +msgstr "Medios" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__mimetype #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__mimetype msgid "Mimetype" -msgstr "" +msgstr "Tipo Mimo" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__name #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__name msgid "Name" -msgstr "" +msgstr "Nombre" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_product_template msgid "Product" -msgstr "" +msgstr "Producto" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_product_category #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__product_categ_id msgid "Product Category" -msgstr "" +msgstr "Categoría de Producto" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_fs_product_category_media msgid "Product Category Media" -msgstr "" +msgstr "Categoría de productos Medios de Comunicación" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_fs_product_media msgid "Product Media" -msgstr "" +msgstr "Medios del Producto" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__product_tmpl_id msgid "Product Template" -msgstr "" +msgstr "Plantilla del Producto" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_product_template_attribute_line msgid "Product Template Attribute Line" -msgstr "" +msgstr "Plantilla de Línea de Atributo de Producto" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_product_product msgid "Product Variant" -msgstr "" +msgstr "Variante de Producto" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__sequence #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__sequence msgid "Sequence" -msgstr "" +msgstr "Secuencia" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__specific_file #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__specific_file msgid "Specific Media" -msgstr "" +msgstr "Medios Específicos" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__specific_media_type_id #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__specific_media_type_id msgid "Specific Media Type" -msgstr "" +msgstr "Tipo de Medio Específico" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_product_product__variant_media_ids msgid "Variant Medias" -msgstr "" +msgstr "Medios Variantes" From 7e2a391fdc7b40ca39103ef2ca6aa2901d9a18de Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 28 Nov 2023 06:36:40 +0000 Subject: [PATCH 09/18] Added translation using Weblate (Italian) --- fs_product_multi_media/i18n/it.po | 172 ++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 fs_product_multi_media/i18n/it.po diff --git a/fs_product_multi_media/i18n/it.po b/fs_product_multi_media/i18n/it.po new file mode 100644 index 0000000000..0d1be458fc --- /dev/null +++ b/fs_product_multi_media/i18n/it.po @@ -0,0 +1,172 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fs_product_multi_media +# +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_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__attribute_value_ids +msgid "Attributes" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__available_attribute_value_ids +msgid "Available Attributes" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__create_uid +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__create_uid +msgid "Created by" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__create_date +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__create_date +msgid "Created on" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__display_name +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__display_name +msgid "Display Name" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__id +msgid "ID" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media____last_update +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_uid +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_date +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__link_existing +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__link_existing +msgid "Link existing media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__media_id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__media_id +msgid "Linked media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__file +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__file +msgid "Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__media_type_id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__media_type_id +msgid "Media Type" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_category__media_ids +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_product__media_ids +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_template__media_ids +#: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_category_form_view +#: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_normal_form_view +#: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_template_only_form_view +msgid "Medias" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__mimetype +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__mimetype +msgid "Mimetype" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__name +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__name +msgid "Name" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_template +msgid "Product" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_category +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__product_categ_id +msgid "Product Category" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_fs_product_category_media +msgid "Product Category Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_fs_product_media +msgid "Product Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__product_tmpl_id +msgid "Product Template" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_template_attribute_line +msgid "Product Template Attribute Line" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model,name:fs_product_multi_media.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__sequence +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__sequence +msgid "Sequence" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__specific_file +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__specific_file +msgid "Specific Media" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__specific_media_type_id +#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__specific_media_type_id +msgid "Specific Media Type" +msgstr "" + +#. module: fs_product_multi_media +#: model:ir.model.fields,field_description:fs_product_multi_media.field_product_product__variant_media_ids +msgid "Variant Medias" +msgstr "" From acb4f7938aa2ade99931fc1703730d2e5fd5410b Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 29 Nov 2023 17:36:44 +0000 Subject: [PATCH 10/18] Translated using Weblate (Italian) Currently translated at 100.0% (27 of 27 strings) Translation: storage-16.0/storage-16.0-fs_product_multi_media Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_product_multi_media/it/ --- fs_product_multi_media/i18n/it.po | 58 ++++++++++++++++--------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/fs_product_multi_media/i18n/it.po b/fs_product_multi_media/i18n/it.po index 0d1be458fc..05bf0ccd6b 100644 --- a/fs_product_multi_media/i18n/it.po +++ b/fs_product_multi_media/i18n/it.po @@ -6,89 +6,91 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2023-11-29 20:33+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 4.17\n" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__attribute_value_ids msgid "Attributes" -msgstr "" +msgstr "Attributi" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__available_attribute_value_ids msgid "Available Attributes" -msgstr "" +msgstr "Attributi disponibili" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__create_uid #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__create_uid msgid "Created by" -msgstr "" +msgstr "Creato da" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__create_date #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__create_date msgid "Created on" -msgstr "" +msgstr "Creato il" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__display_name #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__display_name msgid "Display Name" -msgstr "" +msgstr "Nome visualizzato" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__id #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__id msgid "ID" -msgstr "" +msgstr "ID" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media____last_update #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media____last_update msgid "Last Modified on" -msgstr "" +msgstr "Ultima modifica il" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_uid #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Ultimo aggiornamento di" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_date #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_date msgid "Last Updated on" -msgstr "" +msgstr "Ultimo aggiornamento il" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__link_existing #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__link_existing msgid "Link existing media" -msgstr "" +msgstr "Collega media esistente" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__media_id #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__media_id msgid "Linked media" -msgstr "" +msgstr "Media collegato" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__file #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__file msgid "Media" -msgstr "" +msgstr "Media" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__media_type_id #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__media_type_id msgid "Media Type" -msgstr "" +msgstr "Tipo media" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_product_category__media_ids @@ -98,75 +100,75 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_normal_form_view #: model_terms:ir.ui.view,arch_db:fs_product_multi_media.product_template_only_form_view msgid "Medias" -msgstr "" +msgstr "Media" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__mimetype #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__mimetype msgid "Mimetype" -msgstr "" +msgstr "Tipo MIME" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__name #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__name msgid "Name" -msgstr "" +msgstr "Nome" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_product_template msgid "Product" -msgstr "" +msgstr "Prodotto" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_product_category #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__product_categ_id msgid "Product Category" -msgstr "" +msgstr "Categoria prodotto" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_fs_product_category_media msgid "Product Category Media" -msgstr "" +msgstr "Media categoria prodotto" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_fs_product_media msgid "Product Media" -msgstr "" +msgstr "Media prodotto" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__product_tmpl_id msgid "Product Template" -msgstr "" +msgstr "Modello prodotto" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_product_template_attribute_line msgid "Product Template Attribute Line" -msgstr "" +msgstr "Riga attributo modello prodotto" #. module: fs_product_multi_media #: model:ir.model,name:fs_product_multi_media.model_product_product msgid "Product Variant" -msgstr "" +msgstr "Variante prodotto" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__sequence #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__sequence msgid "Sequence" -msgstr "" +msgstr "Sequenza" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__specific_file #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__specific_file msgid "Specific Media" -msgstr "" +msgstr "Media specifico" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__specific_media_type_id #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__specific_media_type_id msgid "Specific Media Type" -msgstr "" +msgstr "Tipo media specifico" #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_product_product__variant_media_ids msgid "Variant Medias" -msgstr "" +msgstr "Media variante" From 9fab2aa3ba5a8dc273ac6df60482460807992de5 Mon Sep 17 00:00:00 2001 From: chien Date: Fri, 1 Mar 2024 14:45:24 +0700 Subject: [PATCH 11/18] [IMP] fs_product_multi_media: pre-commit auto fixes --- fs_product_multi_media/README.rst | 40 ++++++++++--------- .../models/product_category.py | 1 - .../models/product_template.py | 1 - .../models/product_template_attribute_line.py | 1 - fs_product_multi_media/pyproject.toml | 3 ++ fs_product_multi_media/readme/CONTRIBUTORS.md | 3 ++ .../readme/CONTRIBUTORS.rst | 2 - .../{DESCRIPTION.rst => DESCRIPTION.md} | 3 +- fs_product_multi_media/readme/HISTORY.md | 7 ++++ fs_product_multi_media/readme/HISTORY.rst | 7 ---- fs_product_multi_media/readme/USAGE.md | 6 +++ fs_product_multi_media/readme/USAGE.rst | 6 --- .../static/description/index.html | 24 ++++++----- 13 files changed, 55 insertions(+), 49 deletions(-) create mode 100644 fs_product_multi_media/pyproject.toml create mode 100644 fs_product_multi_media/readme/CONTRIBUTORS.md delete mode 100644 fs_product_multi_media/readme/CONTRIBUTORS.rst rename fs_product_multi_media/readme/{DESCRIPTION.rst => DESCRIPTION.md} (92%) create mode 100644 fs_product_multi_media/readme/HISTORY.md delete mode 100644 fs_product_multi_media/readme/HISTORY.rst create mode 100644 fs_product_multi_media/readme/USAGE.md delete mode 100644 fs_product_multi_media/readme/USAGE.rst diff --git a/fs_product_multi_media/README.rst b/fs_product_multi_media/README.rst index 529605f814..7e9496ba32 100644 --- a/fs_product_multi_media/README.rst +++ b/fs_product_multi_media/README.rst @@ -17,13 +17,13 @@ Fs Product Multi Media :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_multi_media + :target: https://github.com/OCA/storage/tree/17.0/fs_product_multi_media :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_multi_media + :target: https://translation.odoo-community.org/projects/storage-17-0/storage-17-0-fs_product_multi_media :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| @@ -31,7 +31,8 @@ Fs Product Multi Media Attach medias to products and categories and store them on an external filesystem instead of the database. -This addon is a drop-in replacement for the **storage_media_product** addon. +This addon is a drop-in replacement for the **storage_media_product** +addon. .. IMPORTANT:: This is an alpha version, the data model and design can change at any time without warning. @@ -46,23 +47,24 @@ This addon is a drop-in replacement for the **storage_media_product** addon. Usage ===== -On the category and product form, a new tab allows you to add medias to the -related object. The medias can be specific to the model or you can use an -existing one. +On the category and product form, a new tab allows you to add medias to +the related object. The medias can be specific to the model or you can +use an existing one. -When attaching a media to a product you can also specify for which variant -attribute values the media is valid. +When attaching a media to a product you can also specify for which +variant attribute values the media is valid. Changelog ========= 16.0.1.0.2 (2023-10-04) -~~~~~~~~~~~~~~~~~~~~~~~ +----------------------- **Bugfixes** -- Ensures the variant_media_ids are sorted by sequence and name. Before this - change, the order was random and could change between runs. (`#282 `_) +- Ensures the variant_media_ids are sorted by sequence and name. Before + this change, the order was random and could change between runs. + (`#282 `__) Bug Tracker =========== @@ -70,7 +72,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. @@ -78,19 +80,19 @@ Credits ======= Authors -~~~~~~~ +------- * ACSONE SA/NV * Akretion Contributors -~~~~~~~~~~~~ +------------ -* Raphaël Reverdy -* Laurent Mignon (https://www.acsone.eu/) +- Raphaël Reverdy +- Laurent Mignon (https://www.acsone.eu/) Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -110,6 +112,6 @@ Current `maintainer `__: |maintainer-lmignon| -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_multi_media/models/product_category.py b/fs_product_multi_media/models/product_category.py index 869e3a700b..002472dd91 100644 --- a/fs_product_multi_media/models/product_category.py +++ b/fs_product_multi_media/models/product_category.py @@ -5,7 +5,6 @@ class ProductCategory(models.Model): - _inherit = "product.category" media_ids = fields.One2many( diff --git a/fs_product_multi_media/models/product_template.py b/fs_product_multi_media/models/product_template.py index 2fe5ddca09..713cb6d8fe 100644 --- a/fs_product_multi_media/models/product_template.py +++ b/fs_product_multi_media/models/product_template.py @@ -5,7 +5,6 @@ class ProductTemplate(models.Model): - _inherit = "product.template" media_ids = fields.One2many( diff --git a/fs_product_multi_media/models/product_template_attribute_line.py b/fs_product_multi_media/models/product_template_attribute_line.py index fd852340ab..c72cdd5792 100644 --- a/fs_product_multi_media/models/product_template_attribute_line.py +++ b/fs_product_multi_media/models/product_template_attribute_line.py @@ -6,7 +6,6 @@ class ProductTemplateAttributeLine(models.Model): - _inherit = "product.template.attribute.line" def write(self, values): diff --git a/fs_product_multi_media/pyproject.toml b/fs_product_multi_media/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/fs_product_multi_media/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/fs_product_multi_media/readme/CONTRIBUTORS.md b/fs_product_multi_media/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..e11922195a --- /dev/null +++ b/fs_product_multi_media/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- Raphaël Reverdy \<\> +- Laurent Mignon \<\> + () diff --git a/fs_product_multi_media/readme/CONTRIBUTORS.rst b/fs_product_multi_media/readme/CONTRIBUTORS.rst deleted file mode 100644 index be1d6a64a7..0000000000 --- a/fs_product_multi_media/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,2 +0,0 @@ -* Raphaël Reverdy -* Laurent Mignon (https://www.acsone.eu/) diff --git a/fs_product_multi_media/readme/DESCRIPTION.rst b/fs_product_multi_media/readme/DESCRIPTION.md similarity index 92% rename from fs_product_multi_media/readme/DESCRIPTION.rst rename to fs_product_multi_media/readme/DESCRIPTION.md index b4a8c781d8..7b65ee1cf0 100644 --- a/fs_product_multi_media/readme/DESCRIPTION.rst +++ b/fs_product_multi_media/readme/DESCRIPTION.md @@ -1,4 +1,5 @@ Attach medias to products and categories and store them on an external filesystem instead of the database. -This addon is a drop-in replacement for the **storage_media_product** addon. +This addon is a drop-in replacement for the **storage_media_product** +addon. diff --git a/fs_product_multi_media/readme/HISTORY.md b/fs_product_multi_media/readme/HISTORY.md new file mode 100644 index 0000000000..5ca361acb6 --- /dev/null +++ b/fs_product_multi_media/readme/HISTORY.md @@ -0,0 +1,7 @@ +## 16.0.1.0.2 (2023-10-04) + +**Bugfixes** + +- Ensures the variant_media_ids are sorted by sequence and name. Before + this change, the order was random and could change between runs. + ([\#282](https://github.com/OCA/storage/issues/282)) diff --git a/fs_product_multi_media/readme/HISTORY.rst b/fs_product_multi_media/readme/HISTORY.rst deleted file mode 100644 index 60921bc9b2..0000000000 --- a/fs_product_multi_media/readme/HISTORY.rst +++ /dev/null @@ -1,7 +0,0 @@ -16.0.1.0.2 (2023-10-04) -~~~~~~~~~~~~~~~~~~~~~~~ - -**Bugfixes** - -- Ensures the variant_media_ids are sorted by sequence and name. Before this - change, the order was random and could change between runs. (`#282 `_) diff --git a/fs_product_multi_media/readme/USAGE.md b/fs_product_multi_media/readme/USAGE.md new file mode 100644 index 0000000000..4750756078 --- /dev/null +++ b/fs_product_multi_media/readme/USAGE.md @@ -0,0 +1,6 @@ +On the category and product form, a new tab allows you to add medias to +the related object. The medias can be specific to the model or you can +use an existing one. + +When attaching a media to a product you can also specify for which +variant attribute values the media is valid. diff --git a/fs_product_multi_media/readme/USAGE.rst b/fs_product_multi_media/readme/USAGE.rst deleted file mode 100644 index 3887f12e3a..0000000000 --- a/fs_product_multi_media/readme/USAGE.rst +++ /dev/null @@ -1,6 +0,0 @@ -On the category and product form, a new tab allows you to add medias to the -related object. The medias can be specific to the model or you can use an -existing one. - -When attaching a media to a product you can also specify for which variant -attribute values the media is valid. diff --git a/fs_product_multi_media/static/description/index.html b/fs_product_multi_media/static/description/index.html index 0e54d5231c..dd5b8eb726 100644 --- a/fs_product_multi_media/static/description/index.html +++ b/fs_product_multi_media/static/description/index.html @@ -369,10 +369,11 @@

Fs Product Multi Media

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:3911858ee6494b88ab7dce64232131c25f9ef04a96d9e4604f06b2c56f24ec76 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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 medias to products and categories and store them on an external filesystem instead of the database.

-

This addon is a drop-in replacement for the storage_media_product addon.

+

This addon is a drop-in replacement for the storage_media_product +addon.

Important

This is an alpha version, the data model and design can change at any time without warning. @@ -398,11 +399,11 @@

Fs Product Multi Media

Usage

-

On the category and product form, a new tab allows you to add medias to the -related object. The medias can be specific to the model or you can use an -existing one.

-

When attaching a media to a product you can also specify for which variant -attribute values the media is valid.

+

On the category and product form, a new tab allows you to add medias to +the related object. The medias can be specific to the model or you can +use an existing one.

+

When attaching a media to a product you can also specify for which +variant attribute values the media is valid.

Changelog

@@ -410,8 +411,9 @@

Changelog

16.0.1.0.2 (2023-10-04)

Bugfixes

    -
  • Ensures the variant_media_ids are sorted by sequence and name. Before this -change, the order was random and could change between runs. (#282)
  • +
  • Ensures the variant_media_ids are sorted by sequence and name. Before +this change, the order was random and could change between runs. +(#282)
@@ -420,7 +422,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.

@@ -448,7 +450,7 @@

Maintainers

promote its widespread use.

Current maintainer:

lmignon

-

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 e0a9c252eacfe023e600f93c04d134938fce832b Mon Sep 17 00:00:00 2001 From: chien Date: Fri, 1 Mar 2024 15:14:30 +0700 Subject: [PATCH 12/18] [MIG] fs_product_multi_media: Migration to 17.0 --- fs_product_multi_media/__manifest__.py | 2 +- fs_product_multi_media/models/product_product.py | 2 +- fs_product_multi_media/static/description/index.html | 1 - fs_product_multi_media/tests/test_fs_product_multi_media.py | 4 ++-- fs_product_multi_media/views/fs_product_media.xml | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/fs_product_multi_media/__manifest__.py b/fs_product_multi_media/__manifest__.py index 67192d95ac..eeddd6af5f 100644 --- a/fs_product_multi_media/__manifest__.py +++ b/fs_product_multi_media/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Product Multi Media", "summary": """ Link media to products and categories""", - "version": "16.0.1.0.2", + "version": "17.0.1.0.0", "license": "AGPL-3", "author": "ACSONE SA/NV,Akretion,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_product_multi_media/models/product_product.py b/fs_product_multi_media/models/product_product.py index b7801b4de8..52573d175c 100644 --- a/fs_product_multi_media/models/product_product.py +++ b/fs_product_multi_media/models/product_product.py @@ -26,7 +26,7 @@ class ProductProduct(models.Model): def _compute_variant_media_ids(self): for variant in self: variant_media_ids = variant.media_ids.filtered( - lambda i: i._match_variant(variant) + lambda i, v=variant: i._match_variant(v) ) variant_media_ids = variant_media_ids.sorted( key=lambda i: (i.sequence, i.name) diff --git a/fs_product_multi_media/static/description/index.html b/fs_product_multi_media/static/description/index.html index dd5b8eb726..4e54861c31 100644 --- a/fs_product_multi_media/static/description/index.html +++ b/fs_product_multi_media/static/description/index.html @@ -1,4 +1,3 @@ - diff --git a/fs_product_multi_media/tests/test_fs_product_multi_media.py b/fs_product_multi_media/tests/test_fs_product_multi_media.py index fe6f229e22..880d080dcf 100644 --- a/fs_product_multi_media/tests/test_fs_product_multi_media.py +++ b/fs_product_multi_media/tests/test_fs_product_multi_media.py @@ -66,8 +66,8 @@ def setUp(self): "protocol": "memory", "code": "mem_dir", "directory_path": "/tmp/", - "model_xmlids": "fs_product_multi_media.model_fs_product_category_media," - "fs_product_multi_media.model_fs_product_media", + "model_xmlids": "fs_product_multi_media.model_fs_product_category_media" + ",fs_product_multi_media.model_fs_product_media", } ) diff --git a/fs_product_multi_media/views/fs_product_media.xml b/fs_product_multi_media/views/fs_product_media.xml index 0fda034b8e..85d0a8161d 100644 --- a/fs_product_multi_media/views/fs_product_media.xml +++ b/fs_product_multi_media/views/fs_product_media.xml @@ -22,7 +22,7 @@ name="attribute_value_ids" widget="many2many_tags" domain="[('id', 'in', available_attribute_value_ids)]" - attrs="{'invisible': [('available_attribute_value_ids', '=', [])]}" + invisible="not available_attribute_value_ids" /> From 3498ff7c63704a417ce652eac6bee5062e0d202d Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 31 May 2024 07:23:59 +0000 Subject: [PATCH 13/18] [UPD] Update fs_product_multi_media.pot --- fs_product_multi_media/i18n/fs_product_multi_media.pot | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/fs_product_multi_media/i18n/fs_product_multi_media.pot b/fs_product_multi_media/i18n/fs_product_multi_media.pot index e8d9908080..6bcdd98956 100644 --- a/fs_product_multi_media/i18n/fs_product_multi_media.pot +++ b/fs_product_multi_media/i18n/fs_product_multi_media.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" +"Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -47,12 +47,6 @@ msgstr "" msgid "ID" msgstr "" -#. module: fs_product_multi_media -#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media____last_update -#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media____last_update -msgid "Last Modified on" -msgstr "" - #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_uid #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_uid From a5e47c4c43e74691e12929b2dd4f605de03eda60 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 31 May 2024 07:26:41 +0000 Subject: [PATCH 14/18] [BOT] post-merge updates --- fs_product_multi_media/README.rst | 2 +- fs_product_multi_media/static/description/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs_product_multi_media/README.rst b/fs_product_multi_media/README.rst index 7e9496ba32..2bf8bbc800 100644 --- a/fs_product_multi_media/README.rst +++ b/fs_product_multi_media/README.rst @@ -7,7 +7,7 @@ Fs Product Multi Media !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:3911858ee6494b88ab7dce64232131c25f9ef04a96d9e4604f06b2c56f24ec76 + !! source digest: sha256:8a638a6029b8f2404d9f2577ce7e960bdbead43281d29241da43dca0e1e7e787 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/fs_product_multi_media/static/description/index.html b/fs_product_multi_media/static/description/index.html index 4e54861c31..d485a1387d 100644 --- a/fs_product_multi_media/static/description/index.html +++ b/fs_product_multi_media/static/description/index.html @@ -366,7 +366,7 @@

Fs Product Multi Media

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:3911858ee6494b88ab7dce64232131c25f9ef04a96d9e4604f06b2c56f24ec76 +!! source digest: sha256:8a638a6029b8f2404d9f2577ce7e960bdbead43281d29241da43dca0e1e7e787 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

Attach medias to products and categories and store them on an external From 0c5d951cd8cb7bebb5b3e52357dadd0e622971cd Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 31 May 2024 11:10:09 +0000 Subject: [PATCH 15/18] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: storage-17.0/storage-17.0-fs_product_multi_media Translate-URL: https://translation.odoo-community.org/projects/storage-17-0/storage-17-0-fs_product_multi_media/ --- fs_product_multi_media/i18n/es.po | 9 +++------ fs_product_multi_media/i18n/it.po | 9 +++------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/fs_product_multi_media/i18n/es.po b/fs_product_multi_media/i18n/es.po index d082f02e52..c0036e96a5 100644 --- a/fs_product_multi_media/i18n/es.po +++ b/fs_product_multi_media/i18n/es.po @@ -50,12 +50,6 @@ msgstr "Mostrar Nombre" msgid "ID" msgstr "ID (identificación)" -#. module: fs_product_multi_media -#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media____last_update -#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media____last_update -msgid "Last Modified on" -msgstr "Última Modificación el" - #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_uid #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_uid @@ -172,3 +166,6 @@ msgstr "Tipo de Medio Específico" #: model:ir.model.fields,field_description:fs_product_multi_media.field_product_product__variant_media_ids msgid "Variant Medias" msgstr "Medios Variantes" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" diff --git a/fs_product_multi_media/i18n/it.po b/fs_product_multi_media/i18n/it.po index 05bf0ccd6b..6cff595272 100644 --- a/fs_product_multi_media/i18n/it.po +++ b/fs_product_multi_media/i18n/it.po @@ -50,12 +50,6 @@ msgstr "Nome visualizzato" msgid "ID" msgstr "ID" -#. module: fs_product_multi_media -#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media____last_update -#: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - #. module: fs_product_multi_media #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_category_media__write_uid #: model:ir.model.fields,field_description:fs_product_multi_media.field_fs_product_media__write_uid @@ -172,3 +166,6 @@ msgstr "Tipo media specifico" #: model:ir.model.fields,field_description:fs_product_multi_media.field_product_product__variant_media_ids msgid "Variant Medias" msgstr "Media variante" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" From b92353c75edddcb69aaff8371f9045b91e2dc911 Mon Sep 17 00:00:00 2001 From: kobros-tech Date: Thu, 21 Aug 2025 00:57:38 +0300 Subject: [PATCH 16/18] [IMP] fs_product_multi_media: pre-commit auto fixes --- .../security/fs_product_category_media.xml | 2 -- fs_product_multi_media/security/fs_product_media.xml | 2 -- fs_product_multi_media/views/fs_product_category_media.xml | 2 -- fs_product_multi_media/views/fs_product_media.xml | 6 ++---- fs_product_multi_media/views/product_category.xml | 4 ---- fs_product_multi_media/views/product_product.xml | 2 +- 6 files changed, 3 insertions(+), 15 deletions(-) diff --git a/fs_product_multi_media/security/fs_product_category_media.xml b/fs_product_multi_media/security/fs_product_category_media.xml index 2650bb3932..40addf828c 100644 --- a/fs_product_multi_media/security/fs_product_category_media.xml +++ b/fs_product_multi_media/security/fs_product_category_media.xml @@ -2,7 +2,6 @@ - fs.product.category.media access read @@ -30,5 +29,4 @@ - diff --git a/fs_product_multi_media/security/fs_product_media.xml b/fs_product_multi_media/security/fs_product_media.xml index c0a937463b..50d8ad2eb0 100644 --- a/fs_product_multi_media/security/fs_product_media.xml +++ b/fs_product_multi_media/security/fs_product_media.xml @@ -2,7 +2,6 @@ - fs.product.media access read @@ -30,5 +29,4 @@ - diff --git a/fs_product_multi_media/views/fs_product_category_media.xml b/fs_product_multi_media/views/fs_product_category_media.xml index 257f34688d..8717d7b511 100644 --- a/fs_product_multi_media/views/fs_product_category_media.xml +++ b/fs_product_multi_media/views/fs_product_category_media.xml @@ -2,7 +2,6 @@ - product.category.fs.media.form fs.product.category.media @@ -18,5 +17,4 @@ - diff --git a/fs_product_multi_media/views/fs_product_media.xml b/fs_product_multi_media/views/fs_product_media.xml index 85d0a8161d..cda432ea53 100644 --- a/fs_product_multi_media/views/fs_product_media.xml +++ b/fs_product_multi_media/views/fs_product_media.xml @@ -2,11 +2,10 @@ - - + fs.product.media.form fs.product.media - @@ -27,5 +26,4 @@ - diff --git a/fs_product_multi_media/views/product_category.xml b/fs_product_multi_media/views/product_category.xml index ffba58215d..e870de8c8c 100644 --- a/fs_product_multi_media/views/product_category.xml +++ b/fs_product_multi_media/views/product_category.xml @@ -2,7 +2,6 @@ - product.category.form product.category @@ -18,7 +17,4 @@ - - - diff --git a/fs_product_multi_media/views/product_product.xml b/fs_product_multi_media/views/product_product.xml index 0ba5795057..1058f3b28f 100644 --- a/fs_product_multi_media/views/product_product.xml +++ b/fs_product_multi_media/views/product_product.xml @@ -2,7 +2,7 @@ - + product.product From 45a19742452eec5e6c51018ae2894f0c8858c9a7 Mon Sep 17 00:00:00 2001 From: kobros-tech Date: Thu, 21 Aug 2025 01:11:32 +0300 Subject: [PATCH 17/18] [MIG] fs_product_multi_media: Migration to 18.0 --- fs_product_multi_media/README.rst | 21 ++++++++++--------- fs_product_multi_media/__manifest__.py | 2 +- fs_product_multi_media/readme/CONTRIBUTORS.md | 1 + .../static/description/index.html | 18 +++++++++------- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/fs_product_multi_media/README.rst b/fs_product_multi_media/README.rst index 2bf8bbc800..0525a7b14f 100644 --- a/fs_product_multi_media/README.rst +++ b/fs_product_multi_media/README.rst @@ -17,13 +17,13 @@ Fs Product Multi Media :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/17.0/fs_product_multi_media + :target: https://github.com/OCA/storage/tree/18.0/fs_product_multi_media :alt: OCA/storage .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/storage-17-0/storage-17-0-fs_product_multi_media + :target: https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-fs_product_multi_media :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=17.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| @@ -62,9 +62,9 @@ Changelog **Bugfixes** -- Ensures the variant_media_ids are sorted by sequence and name. Before - this change, the order was random and could change between runs. - (`#282 `__) +- Ensures the variant_media_ids are sorted by sequence and name. Before + this change, the order was random and could change between runs. + (`#282 `__) Bug Tracker =========== @@ -72,7 +72,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. @@ -88,8 +88,9 @@ Authors Contributors ------------ -- Raphaël Reverdy -- Laurent Mignon (https://www.acsone.eu/) +- Raphaël Reverdy +- Laurent Mignon (https://www.acsone.eu/) +- Mohamed Alkobrosli Maintainers ----------- @@ -112,6 +113,6 @@ Current `maintainer `__: |maintainer-lmignon| -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_multi_media/__manifest__.py b/fs_product_multi_media/__manifest__.py index eeddd6af5f..8d35b1905e 100644 --- a/fs_product_multi_media/__manifest__.py +++ b/fs_product_multi_media/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Product Multi Media", "summary": """ Link media to products and categories""", - "version": "17.0.1.0.0", + "version": "18.0.1.0.0", "license": "AGPL-3", "author": "ACSONE SA/NV,Akretion,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_product_multi_media/readme/CONTRIBUTORS.md b/fs_product_multi_media/readme/CONTRIBUTORS.md index e11922195a..7845d25050 100644 --- a/fs_product_multi_media/readme/CONTRIBUTORS.md +++ b/fs_product_multi_media/readme/CONTRIBUTORS.md @@ -1,3 +1,4 @@ - Raphaël Reverdy \<\> - Laurent Mignon \<\> () +- Mohamed Alkobrosli \<\> diff --git a/fs_product_multi_media/static/description/index.html b/fs_product_multi_media/static/description/index.html index d485a1387d..29f430f683 100644 --- a/fs_product_multi_media/static/description/index.html +++ b/fs_product_multi_media/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 { @@ -368,7 +369,7 @@

Fs Product Multi Media

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:8a638a6029b8f2404d9f2577ce7e960bdbead43281d29241da43dca0e1e7e787 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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 medias to products and categories and store them on an external filesystem instead of the database.

This addon is a drop-in replacement for the storage_media_product @@ -421,7 +422,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.

@@ -438,18 +439,21 @@

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.

Current maintainer:

lmignon

-

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 cb329fe6f76bbc46f0ad6f07ab4873fd5df22e1a Mon Sep 17 00:00:00 2001 From: kobros-tech Date: Thu, 21 Aug 2025 01:53:55 +0300 Subject: [PATCH 18/18] [Don't Merge] test-requirements.txt --- test-requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test-requirements.txt b/test-requirements.txt index f144405a7d..354a4175cb 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,3 +1,4 @@ odoo_test_helper requests_mock vcrpy-unittest +odoo-addon-fs_base_multi_media @ git+https://github.com/OCA/storage.git@refs/pull/507/head#subdirectory=fs_base_multi_media