From cdf15c270b04627d9fc3795f6adb197fc2628888 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Tue, 5 Sep 2023 15:32:11 +0200 Subject: [PATCH 01/38] [ADD] fs_product_multi_image: a drop-in replacement of storage_image_product --- fs_base_multi_image/README.rst | 35 ++++++ fs_base_multi_image/__init__.py | 1 + fs_base_multi_image/__manifest__.py | 24 +++++ fs_base_multi_image/models/__init__.py | 2 + fs_base_multi_image/models/fs_image.py | 29 +++++ .../models/fs_image_relation_mixin.py | 101 ++++++++++++++++++ fs_base_multi_image/readme/CONTRIBUTORS.rst | 1 + fs_base_multi_image/readme/DESCRIPTION.rst | 14 +++ fs_base_multi_image/readme/ROADMAP.rst | 2 + fs_base_multi_image/readme/USAGE.rst | 3 + fs_base_multi_image/security/fs_image.xml | 26 +++++ fs_base_multi_image/security/res_groups.xml | 10 ++ .../static/description/icon.png | Bin 0 -> 9455 bytes fs_base_multi_image/views/fs_image.xml | 77 +++++++++++++ .../views/fs_image_relation_mixin.xml | 42 ++++++++ 15 files changed, 367 insertions(+) create mode 100644 fs_base_multi_image/README.rst create mode 100644 fs_base_multi_image/__init__.py create mode 100644 fs_base_multi_image/__manifest__.py create mode 100644 fs_base_multi_image/models/__init__.py create mode 100644 fs_base_multi_image/models/fs_image.py create mode 100644 fs_base_multi_image/models/fs_image_relation_mixin.py create mode 100644 fs_base_multi_image/readme/CONTRIBUTORS.rst create mode 100644 fs_base_multi_image/readme/DESCRIPTION.rst create mode 100644 fs_base_multi_image/readme/ROADMAP.rst create mode 100644 fs_base_multi_image/readme/USAGE.rst create mode 100644 fs_base_multi_image/security/fs_image.xml create mode 100644 fs_base_multi_image/security/res_groups.xml create mode 100644 fs_base_multi_image/static/description/icon.png create mode 100644 fs_base_multi_image/views/fs_image.xml create mode 100644 fs_base_multi_image/views/fs_image_relation_mixin.xml diff --git a/fs_base_multi_image/README.rst b/fs_base_multi_image/README.rst new file mode 100644 index 0000000000..38929e8775 --- /dev/null +++ b/fs_base_multi_image/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_base_multi_image/__init__.py b/fs_base_multi_image/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/fs_base_multi_image/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/fs_base_multi_image/__manifest__.py b/fs_base_multi_image/__manifest__.py new file mode 100644 index 0000000000..14a8b2686e --- /dev/null +++ b/fs_base_multi_image/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Fs Base Multi Image", + "summary": """ + Mulitple Images from External File System""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "ACSONE SA/NV,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/storage", + "depends": [ + "fs_image", + ], + "data": [ + "security/res_groups.xml", + "security/fs_image.xml", + "views/fs_image.xml", + "views/fs_image_relation_mixin.xml", + ], + "demo": [], + "maintainers": ["lmignon"], + "development_status": "Alpha", +} diff --git a/fs_base_multi_image/models/__init__.py b/fs_base_multi_image/models/__init__.py new file mode 100644 index 0000000000..bada9ccdd2 --- /dev/null +++ b/fs_base_multi_image/models/__init__.py @@ -0,0 +1,2 @@ +from . import fs_image +from . import fs_image_relation_mixin diff --git a/fs_base_multi_image/models/fs_image.py b/fs_base_multi_image/models/fs_image.py new file mode 100644 index 0000000000..285995ae26 --- /dev/null +++ b/fs_base_multi_image/models/fs_image.py @@ -0,0 +1,29 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + +from odoo.addons.fs_image import fields as fs_fields + + +class FsImage(models.Model): + + _name = "fs.image" + _inherit = "fs.image.mixin" + _description = "Image" + _order = "name, id" + _rec_name = "name" + + image = fs_fields.FSImage(required=True) # makes field required + name = fields.Char(compute="_compute_name", store=True, index=True) + mimetype = fields.Char(compute="_compute_mimetype", store=True) + + @api.depends("image") + def _compute_name(self): + for record in self: + record.name = record.image.name if record.image else None + + @api.depends("image") + def _compute_mimetypes(self): + for record in self: + record.mimetype = record.image.mimetype if record.image else None diff --git a/fs_base_multi_image/models/fs_image_relation_mixin.py b/fs_base_multi_image/models/fs_image_relation_mixin.py new file mode 100644 index 0000000000..93181752c9 --- /dev/null +++ b/fs_base_multi_image/models/fs_image_relation_mixin.py @@ -0,0 +1,101 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + +from odoo.addons.fs_image import fields as fs_fields + + +class FsImageRelationMixin(models.AbstractModel): + + _name = "fs.image.relation.mixin" + _description = "Image Relation" + _order = "sequence, name" + _rec_name = "name" + + sequence = fields.Integer() + image_id = fields.Many2one( + comodel_name="fs.image", + string="Linked image", + ) + specific_image = fs_fields.FSImage("Specific Image") + # resized fields stored (as attachment) for performance + specific_image_medium = fs_fields.FSImage( + "Specific Image 128", + related="specific_image", + max_width=128, + max_height=128, + store=True, + ) + link_existing = fields.Boolean(default=False) + + image = fs_fields.FSImage( + "Image", compute="_compute_image", inverse="_inverse_image", store=False + ) + # resized fields stored (as attachment) for performance + image_medium = fs_fields.FSImage( + "Image 128", compute="_compute_image_medium", store=False + ) + + name = fields.Char(compute="_compute_name", store=True, index=True) + mimetype = fields.Char(compute="_compute_mimetype", store=True) + + @api.constrains("specific_image", "image_id") + def _check_image(self): + for record in self: + if not record.image_id and not record.specific_image: + raise ValidationError(_("You must set an image")) + + @api.depends("image") + def _compute_name(self): + for record in self: + record.name = record.image.name if record.image else None + + @api.depends("image") + def _compute_mimetypes(self): + for record in self: + record.mimetype = record.image.mimetype if record.image else None + + @api.depends("image_id", "specific_image", "link_existing") + def _compute_image(self): + for record in self: + if record.link_existing: + record.image = record.image_id.image + else: + record.image = record.specific_image + + @api.depends("image_id", "specific_image", "link_existing") + def _compute_image_medium(self): + for record in self: + if record.link_existing: + record.image_medium = record.image_id.image_medium + else: + record.image_medium = record.specific_image_medium + + def _inverse_image(self): + for record in self: + if record.link_existing: + raise ValueError(_("Cannot set image on a linked image")) + else: + record.specific_image = record.image + + @api.model + def _cleanup_vals(self, vals): + if ( + "link_existing" in vals + and vals["link_existing"] + and "specific_image" in vals + ): + vals["specific_image"] = False + return vals + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + self._cleanup_vals(vals) + return super().create(vals_list) + + def write(self, vals): + self._cleanup_vals(vals) + return super().write(vals) diff --git a/fs_base_multi_image/readme/CONTRIBUTORS.rst b/fs_base_multi_image/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..172b2d223c --- /dev/null +++ b/fs_base_multi_image/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Laurent Mignon diff --git a/fs_base_multi_image/readme/DESCRIPTION.rst b/fs_base_multi_image/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..3690804632 --- /dev/null +++ b/fs_base_multi_image/readme/DESCRIPTION.rst @@ -0,0 +1,14 @@ +This addon is a technical addon providing a set of models to ease the +creation of other models that need to be linked to multiple images stored +into external filesystems. + +The models provided by this addon are: + +* ``fs.image``: a model that stores a reference to an image stored into + an external filesystem. +* ``fs.image.relation.mixin``: an abstract model that can be used to + as base class for models created to store an image linked to a model. + This abstract model defines fields and methods to transparently handle + 2 cases: + * the image is specific to the model. + * the image is shared between multiple models and therefore is a ``fs.image`` instance linked to the mixin. diff --git a/fs_base_multi_image/readme/ROADMAP.rst b/fs_base_multi_image/readme/ROADMAP.rst new file mode 100644 index 0000000000..776f992b58 --- /dev/null +++ b/fs_base_multi_image/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +* Add dedicated widget to ease the addition of new images to a model linked to + multiple images. (As it's the case in the *storage_image_product* addon) diff --git a/fs_base_multi_image/readme/USAGE.rst b/fs_base_multi_image/readme/USAGE.rst new file mode 100644 index 0000000000..7a4d226aa3 --- /dev/null +++ b/fs_base_multi_image/readme/USAGE.rst @@ -0,0 +1,3 @@ +To be able to create and or manages shared images, you must have the ``Image Manager`` +role. If you do not have this role, as an authenticated user, you can +only view the shared images. diff --git a/fs_base_multi_image/security/fs_image.xml b/fs_base_multi_image/security/fs_image.xml new file mode 100644 index 0000000000..b976e34f28 --- /dev/null +++ b/fs_base_multi_image/security/fs_image.xml @@ -0,0 +1,26 @@ + + + + + + fs.image access read + + + + + + + + + + fs.image access manage + + + + + + + + + diff --git a/fs_base_multi_image/security/res_groups.xml b/fs_base_multi_image/security/res_groups.xml new file mode 100644 index 0000000000..0986498120 --- /dev/null +++ b/fs_base_multi_image/security/res_groups.xml @@ -0,0 +1,10 @@ + + + + Image Manager + + + diff --git a/fs_base_multi_image/static/description/icon.png b/fs_base_multi_image/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 z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/fs_base_multi_image/views/fs_image.xml b/fs_base_multi_image/views/fs_image.xml new file mode 100644 index 0000000000..26347cbab9 --- /dev/null +++ b/fs_base_multi_image/views/fs_image.xml @@ -0,0 +1,77 @@ + + + + + + fs.image.form (in fs_base_multi_image) + fs.image + +
+ + +
+
+
+ + + fs.image.search (in fs_base_multi_image) + fs.image + + + + + + + + + + + + + + + fs.image.tree (in fs_base_multi_image) + fs.image + + + + + + + + + + + Fs Image + fs.image + tree,form + [] + {} + + + + Fs Images + + + + +
diff --git a/fs_base_multi_image/views/fs_image_relation_mixin.xml b/fs_base_multi_image/views/fs_image_relation_mixin.xml new file mode 100644 index 0000000000..27bc8f3a3c --- /dev/null +++ b/fs_base_multi_image/views/fs_image_relation_mixin.xml @@ -0,0 +1,42 @@ + + + + + + fs.image.relation.mixin.form + fs.image.relation.mixin + +
+ + + + + + + + + + + + + +
+
+
+ +
From 3864c3661b92f9211dbe3b4932a7e9ab29847b3e Mon Sep 17 00:00:00 2001 From: oca-ci Date: Sun, 24 Sep 2023 07:58:36 +0000 Subject: [PATCH 02/38] [UPD] Update fs_base_multi_image.pot --- .../i18n/fs_base_multi_image.pot | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 fs_base_multi_image/i18n/fs_base_multi_image.pot diff --git a/fs_base_multi_image/i18n/fs_base_multi_image.pot b/fs_base_multi_image/i18n/fs_base_multi_image.pot new file mode 100644 index 0000000000..d06f36f828 --- /dev/null +++ b/fs_base_multi_image/i18n/fs_base_multi_image.pot @@ -0,0 +1,149 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fs_base_multi_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: fs_base_multi_image +#. odoo-python +#: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 +#, python-format +msgid "Cannot set image on a linked image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Created by" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_date +msgid "Created on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__display_name +msgid "Display Name" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.actions.act_window,name:fs_base_multi_image.fs_image_act_window +msgid "Fs Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.ui.menu,name:fs_base_multi_image.fs_image_menu +msgid "Fs Images" +msgstr "" + +#. module: fs_base_multi_image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Group By" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__id +msgid "ID" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model,name:fs_base_multi_image.model_fs_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image +msgid "Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium +msgid "Image 128" +msgstr "" + +#. module: fs_base_multi_image +#: model:res.groups,name:fs_base_multi_image.group_image_manager +msgid "Image Manager" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model,name:fs_base_multi_image.model_fs_image_relation_mixin +msgid "Image Relation" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image_medium +msgid "Image medium" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__link_existing +msgid "Link Existing" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_id +msgid "Linked image" +msgstr "" + +#. module: fs_base_multi_image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "MimeType" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__mimetype +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__mimetype +msgid "Mimetype" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__name +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__name +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Name" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence +msgid "Sequence" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image +msgid "Specific Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium +msgid "Specific Image 128" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-python +#: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 +#, python-format +msgid "You must set an image" +msgstr "" From b04fc8216ad911d2eb20e5a9b8944dd39b1bebf7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 24 Sep 2023 08:01:25 +0000 Subject: [PATCH 03/38] [BOT] post-merge updates --- fs_base_multi_image/README.rst | 128 ++++- .../static/description/index.html | 457 ++++++++++++++++++ 2 files changed, 561 insertions(+), 24 deletions(-) create mode 100644 fs_base_multi_image/static/description/index.html diff --git a/fs_base_multi_image/README.rst b/fs_base_multi_image/README.rst index 38929e8775..57e77f4fd3 100644 --- a/fs_base_multi_image/README.rst +++ b/fs_base_multi_image/README.rst @@ -1,35 +1,115 @@ -**This file is going to be generated by oca-gen-addon-readme.** +=================== +Fs Base Multi Image +=================== -*Manual changes will be overwritten.* +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:80a77aa6ae71d6e160791b2da2f73d7cca6448d2280ed954e40897401e9f3a9e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -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_base_multi_image + :alt: OCA/storage +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/storage&target_branch=16.0 + :alt: Try me on Runboat -* **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. +This addon is a technical addon providing a set of models to ease the +creation of other models that need to be linked to multiple images stored +into external filesystems. -A good, one sentence summary in the manifest is also highly recommended. +The models provided by this addon are: +* ``fs.image``: a model that stores a reference to an image stored into + an external filesystem. +* ``fs.image.relation.mixin``: an abstract model that can be used to + as base class for models created to store an image linked to a model. + This abstract model defines fields and methods to transparently handle + 2 cases: + * the image is specific to the model. + * the image is shared between multiple models and therefore is a ``fs.image`` instance linked to the mixin. -Automatic changelog generation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. 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 `_ -`HISTORY.rst` can be auto generated using `towncrier `_. +**Table of contents** -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. +.. contents:: + :local: -Please refer to `towncrier` documentation to know more. +Usage +===== -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 `_. +To be able to create and or manages shared images, you must have the ``Image Manager`` +role. If you do not have this role, as an authenticated user, you can +only view the shared images. + +Known issues / Roadmap +====================== + +* Add dedicated widget to ease the addition of new images to a model linked to + multiple images. (As it's the case in the *storage_image_product* addon) + +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 + +Contributors +~~~~~~~~~~~~ + +* Laurent Mignon + +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_base_multi_image/static/description/index.html b/fs_base_multi_image/static/description/index.html new file mode 100644 index 0000000000..ef16a1800c --- /dev/null +++ b/fs_base_multi_image/static/description/index.html @@ -0,0 +1,457 @@ + + + + + + +Fs Base Multi Image + + + +
+

Fs Base Multi Image

+ + +

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

+

This addon is a technical addon providing a set of models to ease the +creation of other models that need to be linked to multiple images stored +into external filesystems.

+

The models provided by this addon are:

+
    +
  • fs.image: a model that stores a reference to an image stored into +an external filesystem.
  • +
  • fs.image.relation.mixin: an abstract model that can be used to +as base class for models created to store an image linked to a model. +This abstract model defines fields and methods to transparently handle +2 cases: +* the image is specific to the model. +* the image is shared between multiple models and therefore is a fs.image instance linked to the mixin.
  • +
+
+

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

+

To be able to create and or manages shared images, you must have the Image Manager +role. If you do not have this role, as an authenticated user, you can +only view the shared images.

+
+
+

Known issues / Roadmap

+
    +
  • Add dedicated widget to ease the addition of new images to a model linked to +multiple images. (As it’s the case in the storage_image_product addon)
  • +
+
+
+

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
  • +
+
+
+

Contributors

+ +
+
+

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 e42c584066789295b50c8042ccd3bf9686562bc2 Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Fri, 27 Oct 2023 12:54:39 +0000 Subject: [PATCH 04/38] Added translation using Weblate (Spanish) --- fs_base_multi_image/i18n/es.po | 150 +++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 fs_base_multi_image/i18n/es.po diff --git a/fs_base_multi_image/i18n/es.po b/fs_base_multi_image/i18n/es.po new file mode 100644 index 0000000000..f252c95b63 --- /dev/null +++ b/fs_base_multi_image/i18n/es.po @@ -0,0 +1,150 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fs_base_multi_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: 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_base_multi_image +#. odoo-python +#: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 +#, python-format +msgid "Cannot set image on a linked image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Created by" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_date +msgid "Created on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__display_name +msgid "Display Name" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.actions.act_window,name:fs_base_multi_image.fs_image_act_window +msgid "Fs Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.ui.menu,name:fs_base_multi_image.fs_image_menu +msgid "Fs Images" +msgstr "" + +#. module: fs_base_multi_image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Group By" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__id +msgid "ID" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model,name:fs_base_multi_image.model_fs_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image +msgid "Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium +msgid "Image 128" +msgstr "" + +#. module: fs_base_multi_image +#: model:res.groups,name:fs_base_multi_image.group_image_manager +msgid "Image Manager" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model,name:fs_base_multi_image.model_fs_image_relation_mixin +msgid "Image Relation" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image_medium +msgid "Image medium" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__link_existing +msgid "Link Existing" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_id +msgid "Linked image" +msgstr "" + +#. module: fs_base_multi_image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "MimeType" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__mimetype +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__mimetype +msgid "Mimetype" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__name +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__name +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Name" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence +msgid "Sequence" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image +msgid "Specific Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium +msgid "Specific Image 128" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-python +#: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 +#, python-format +msgid "You must set an image" +msgstr "" From 550603d2f1f19631473cb35b92b12da764b7eebd Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Fri, 27 Oct 2023 12:55:29 +0000 Subject: [PATCH 05/38] Translated using Weblate (Spanish) Currently translated at 100.0% (25 of 25 strings) Translation: storage-16.0/storage-16.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image/es/ --- fs_base_multi_image/i18n/es.po | 54 ++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/fs_base_multi_image/i18n/es.po b/fs_base_multi_image/i18n/es.po index f252c95b63..a81719afb3 100644 --- a/fs_base_multi_image/i18n/es.po +++ b/fs_base_multi_image/i18n/es.po @@ -6,145 +6,147 @@ 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_base_multi_image #. odoo-python #: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 #, python-format msgid "Cannot set image on a linked image" -msgstr "" +msgstr "No se puede establecer la imagen en una imagen vinculada" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view msgid "Created by" -msgstr "" +msgstr "Creado por" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_date msgid "Created on" -msgstr "" +msgstr "Creado el" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__display_name msgid "Display Name" -msgstr "" +msgstr "Mostrar Nombre" #. module: fs_base_multi_image #: model:ir.actions.act_window,name:fs_base_multi_image.fs_image_act_window msgid "Fs Image" -msgstr "" +msgstr "Imagen Fs" #. module: fs_base_multi_image #: model:ir.ui.menu,name:fs_base_multi_image.fs_image_menu msgid "Fs Images" -msgstr "" +msgstr "Imágenes Fs" #. module: fs_base_multi_image #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view msgid "Group By" -msgstr "" +msgstr "Agrupar por" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__id msgid "ID" -msgstr "" +msgstr "ID (identificación)" #. module: fs_base_multi_image #: model:ir.model,name:fs_base_multi_image.model_fs_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image msgid "Image" -msgstr "" +msgstr "Imagen" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium msgid "Image 128" -msgstr "" +msgstr "Imagen 128" #. module: fs_base_multi_image #: model:res.groups,name:fs_base_multi_image.group_image_manager msgid "Image Manager" -msgstr "" +msgstr "Administrador de Imágenes" #. module: fs_base_multi_image #: model:ir.model,name:fs_base_multi_image.model_fs_image_relation_mixin msgid "Image Relation" -msgstr "" +msgstr "Relación de Imágenes" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image_medium msgid "Image medium" -msgstr "" +msgstr "Imagen mediana" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update msgid "Last Modified on" -msgstr "" +msgstr "Última Modificación el" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Última Actualización por" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_date msgid "Last Updated on" -msgstr "" +msgstr "Última Actualización el" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__link_existing msgid "Link Existing" -msgstr "" +msgstr "Enlace Existente" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_id msgid "Linked image" -msgstr "" +msgstr "Imagen vinculada" #. module: fs_base_multi_image #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view msgid "MimeType" -msgstr "" +msgstr "Tipo Mimo" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__mimetype #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__mimetype msgid "Mimetype" -msgstr "" +msgstr "Tipo Mimo" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__name #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__name #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view msgid "Name" -msgstr "" +msgstr "Nombre" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence msgid "Sequence" -msgstr "" +msgstr "Secuencia" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image msgid "Specific Image" -msgstr "" +msgstr "Imagen Específica" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium msgid "Specific Image 128" -msgstr "" +msgstr "Imagen Específica 128" #. module: fs_base_multi_image #. odoo-python #: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 #, python-format msgid "You must set an image" -msgstr "" +msgstr "Usted debe establecer una imagen" From ccb2d91a15f4c3f442cd8c3d5affffc9d5ce9038 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 27 Nov 2023 16:46:59 +0000 Subject: [PATCH 06/38] Added translation using Weblate (Italian) --- fs_base_multi_image/i18n/it.po | 150 +++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 fs_base_multi_image/i18n/it.po diff --git a/fs_base_multi_image/i18n/it.po b/fs_base_multi_image/i18n/it.po new file mode 100644 index 0000000000..12e28abd74 --- /dev/null +++ b/fs_base_multi_image/i18n/it.po @@ -0,0 +1,150 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fs_base_multi_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: fs_base_multi_image +#. odoo-python +#: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 +#, python-format +msgid "Cannot set image on a linked image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Created by" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_date +msgid "Created on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__display_name +msgid "Display Name" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.actions.act_window,name:fs_base_multi_image.fs_image_act_window +msgid "Fs Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.ui.menu,name:fs_base_multi_image.fs_image_menu +msgid "Fs Images" +msgstr "" + +#. module: fs_base_multi_image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Group By" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__id +msgid "ID" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model,name:fs_base_multi_image.model_fs_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image +msgid "Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium +msgid "Image 128" +msgstr "" + +#. module: fs_base_multi_image +#: model:res.groups,name:fs_base_multi_image.group_image_manager +msgid "Image Manager" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model,name:fs_base_multi_image.model_fs_image_relation_mixin +msgid "Image Relation" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image_medium +msgid "Image medium" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__link_existing +msgid "Link Existing" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_id +msgid "Linked image" +msgstr "" + +#. module: fs_base_multi_image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "MimeType" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__mimetype +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__mimetype +msgid "Mimetype" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__name +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__name +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Name" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence +msgid "Sequence" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image +msgid "Specific Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium +msgid "Specific Image 128" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-python +#: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 +#, python-format +msgid "You must set an image" +msgstr "" From 46dfa524fd4441852227b64e011a50ef1811a8e4 Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 28 Nov 2023 12:15:07 +0000 Subject: [PATCH 07/38] Translated using Weblate (Italian) Currently translated at 100.0% (25 of 25 strings) Translation: storage-16.0/storage-16.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image/it/ --- fs_base_multi_image/i18n/it.po | 54 ++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/fs_base_multi_image/i18n/it.po b/fs_base_multi_image/i18n/it.po index 12e28abd74..9cbebf8df0 100644 --- a/fs_base_multi_image/i18n/it.po +++ b/fs_base_multi_image/i18n/it.po @@ -6,145 +6,147 @@ 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-28 14: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_base_multi_image #. odoo-python #: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 #, python-format msgid "Cannot set image on a linked image" -msgstr "" +msgstr "Non si può impostare una immagin in una immagine collegata" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view msgid "Created by" -msgstr "" +msgstr "Creato da" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_date msgid "Created on" -msgstr "" +msgstr "Creato il" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__display_name msgid "Display Name" -msgstr "" +msgstr "Nome visualizzato" #. module: fs_base_multi_image #: model:ir.actions.act_window,name:fs_base_multi_image.fs_image_act_window msgid "Fs Image" -msgstr "" +msgstr "Immagine FS" #. module: fs_base_multi_image #: model:ir.ui.menu,name:fs_base_multi_image.fs_image_menu msgid "Fs Images" -msgstr "" +msgstr "Immagini FS" #. module: fs_base_multi_image #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view msgid "Group By" -msgstr "" +msgstr "Raggruppa per" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__id msgid "ID" -msgstr "" +msgstr "ID" #. module: fs_base_multi_image #: model:ir.model,name:fs_base_multi_image.model_fs_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image msgid "Image" -msgstr "" +msgstr "Immagine" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium msgid "Image 128" -msgstr "" +msgstr "Immagine 128" #. module: fs_base_multi_image #: model:res.groups,name:fs_base_multi_image.group_image_manager msgid "Image Manager" -msgstr "" +msgstr "Gestore immagine" #. module: fs_base_multi_image #: model:ir.model,name:fs_base_multi_image.model_fs_image_relation_mixin msgid "Image Relation" -msgstr "" +msgstr "Relazione immagine" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image_medium msgid "Image medium" -msgstr "" +msgstr "Immagine media" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update msgid "Last Modified on" -msgstr "" +msgstr "Ultima modifica il" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Ultimo aggiornamento di" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_date msgid "Last Updated on" -msgstr "" +msgstr "Ultimo aggiornamento il" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__link_existing msgid "Link Existing" -msgstr "" +msgstr "Collegamento esistente" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_id msgid "Linked image" -msgstr "" +msgstr "Immagine collegata" #. module: fs_base_multi_image #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view msgid "MimeType" -msgstr "" +msgstr "Tipo MIME" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__mimetype #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__mimetype msgid "Mimetype" -msgstr "" +msgstr "Tipo MIME" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__name #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__name #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view msgid "Name" -msgstr "" +msgstr "Nome" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence msgid "Sequence" -msgstr "" +msgstr "Sequenza" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image msgid "Specific Image" -msgstr "" +msgstr "Immagine specifica" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium msgid "Specific Image 128" -msgstr "" +msgstr "Immagine specifica 128" #. module: fs_base_multi_image #. odoo-python #: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 #, python-format msgid "You must set an image" -msgstr "" +msgstr "Bisogna impostare una immagine" From 32d77debcbdf27e897b81c5edcf7486e39d5a938 Mon Sep 17 00:00:00 2001 From: Benjamin Willig Date: Wed, 17 Jan 2024 09:19:56 +0100 Subject: [PATCH 08/38] [FIX] updated image and image_medium label to prevent odoo warning with same label for image/image_1920 and image_medium/image_128 for product.template and product.product --- fs_base_multi_image/models/fs_image_relation_mixin.py | 9 ++++++--- fs_base_multi_image/views/fs_image.xml | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/fs_base_multi_image/models/fs_image_relation_mixin.py b/fs_base_multi_image/models/fs_image_relation_mixin.py index 93181752c9..5dfde027c6 100644 --- a/fs_base_multi_image/models/fs_image_relation_mixin.py +++ b/fs_base_multi_image/models/fs_image_relation_mixin.py @@ -22,7 +22,7 @@ class FsImageRelationMixin(models.AbstractModel): specific_image = fs_fields.FSImage("Specific Image") # resized fields stored (as attachment) for performance specific_image_medium = fs_fields.FSImage( - "Specific Image 128", + "Specific Image (128)", related="specific_image", max_width=128, max_height=128, @@ -31,11 +31,14 @@ class FsImageRelationMixin(models.AbstractModel): link_existing = fields.Boolean(default=False) image = fs_fields.FSImage( - "Image", compute="_compute_image", inverse="_inverse_image", store=False + "Image (original)", + compute="_compute_image", + inverse="_inverse_image", + store=False, ) # resized fields stored (as attachment) for performance image_medium = fs_fields.FSImage( - "Image 128", compute="_compute_image_medium", store=False + "Image (128)", compute="_compute_image_medium", store=False ) name = fields.Char(compute="_compute_name", store=True, index=True) diff --git a/fs_base_multi_image/views/fs_image.xml b/fs_base_multi_image/views/fs_image.xml index 26347cbab9..0ecddb289d 100644 --- a/fs_base_multi_image/views/fs_image.xml +++ b/fs_base_multi_image/views/fs_image.xml @@ -15,7 +15,7 @@ - + From a2919c3d0729d5797b79e74ec7d441c0bc4bba2a Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 17 Jan 2024 11:00:22 +0000 Subject: [PATCH 09/38] [UPD] Update fs_base_multi_image.pot --- fs_base_multi_image/i18n/fs_base_multi_image.pot | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/fs_base_multi_image/i18n/fs_base_multi_image.pot b/fs_base_multi_image/i18n/fs_base_multi_image.pot index d06f36f828..830715b440 100644 --- a/fs_base_multi_image/i18n/fs_base_multi_image.pot +++ b/fs_base_multi_image/i18n/fs_base_multi_image.pot @@ -59,13 +59,18 @@ msgstr "" #. module: fs_base_multi_image #: model:ir.model,name:fs_base_multi_image.model_fs_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image -#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_form_view msgid "Image" msgstr "" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium -msgid "Image 128" +msgid "Image (128)" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image +msgid "Image (original)" msgstr "" #. module: fs_base_multi_image @@ -138,7 +143,7 @@ msgstr "" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium -msgid "Specific Image 128" +msgid "Specific Image (128)" msgstr "" #. module: fs_base_multi_image From 508225f0494b7435dff542e5bdacdf497852d1a5 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 17 Jan 2024 11:03:00 +0000 Subject: [PATCH 10/38] [BOT] post-merge updates --- fs_base_multi_image/README.rst | 2 +- fs_base_multi_image/__manifest__.py | 2 +- fs_base_multi_image/static/description/index.html | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/fs_base_multi_image/README.rst b/fs_base_multi_image/README.rst index 57e77f4fd3..df26cd1a29 100644 --- a/fs_base_multi_image/README.rst +++ b/fs_base_multi_image/README.rst @@ -7,7 +7,7 @@ Fs Base Multi Image !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:80a77aa6ae71d6e160791b2da2f73d7cca6448d2280ed954e40897401e9f3a9e + !! source digest: sha256:68693183f8459f8bb348d05183419c922969399742a1e77c878d8fb4f82d3629 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/fs_base_multi_image/__manifest__.py b/fs_base_multi_image/__manifest__.py index 14a8b2686e..8421649ca0 100644 --- a/fs_base_multi_image/__manifest__.py +++ b/fs_base_multi_image/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Base Multi Image", "summary": """ Mulitple Images from External File System""", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_base_multi_image/static/description/index.html b/fs_base_multi_image/static/description/index.html index ef16a1800c..7f7bdda8b0 100644 --- a/fs_base_multi_image/static/description/index.html +++ b/fs_base_multi_image/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

Fs Base Multi Image

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:80a77aa6ae71d6e160791b2da2f73d7cca6448d2280ed954e40897401e9f3a9e +!! source digest: sha256:68693183f8459f8bb348d05183419c922969399742a1e77c878d8fb4f82d3629 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This addon is a technical addon providing a set of models to ease the From 9314f0782834b62dda977397c1b277934692524a Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 17 Jan 2024 11:03:13 +0000 Subject: [PATCH 11/38] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: storage-16.0/storage-16.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image/ --- fs_base_multi_image/i18n/es.po | 21 ++++++++++++++++----- fs_base_multi_image/i18n/it.po | 21 ++++++++++++++++----- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/fs_base_multi_image/i18n/es.po b/fs_base_multi_image/i18n/es.po index a81719afb3..4bae1f3316 100644 --- a/fs_base_multi_image/i18n/es.po +++ b/fs_base_multi_image/i18n/es.po @@ -62,14 +62,19 @@ msgstr "ID (identificación)" #. module: fs_base_multi_image #: model:ir.model,name:fs_base_multi_image.model_fs_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image -#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_form_view msgid "Image" msgstr "Imagen" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium -msgid "Image 128" -msgstr "Imagen 128" +msgid "Image (128)" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image +msgid "Image (original)" +msgstr "" #. module: fs_base_multi_image #: model:res.groups,name:fs_base_multi_image.group_image_manager @@ -141,8 +146,8 @@ msgstr "Imagen Específica" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium -msgid "Specific Image 128" -msgstr "Imagen Específica 128" +msgid "Specific Image (128)" +msgstr "" #. module: fs_base_multi_image #. odoo-python @@ -150,3 +155,9 @@ msgstr "Imagen Específica 128" #, python-format msgid "You must set an image" msgstr "Usted debe establecer una imagen" + +#~ msgid "Image 128" +#~ msgstr "Imagen 128" + +#~ msgid "Specific Image 128" +#~ msgstr "Imagen Específica 128" diff --git a/fs_base_multi_image/i18n/it.po b/fs_base_multi_image/i18n/it.po index 9cbebf8df0..7462af97fc 100644 --- a/fs_base_multi_image/i18n/it.po +++ b/fs_base_multi_image/i18n/it.po @@ -62,14 +62,19 @@ msgstr "ID" #. module: fs_base_multi_image #: model:ir.model,name:fs_base_multi_image.model_fs_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image -#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_form_view msgid "Image" msgstr "Immagine" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium -msgid "Image 128" -msgstr "Immagine 128" +msgid "Image (128)" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image +msgid "Image (original)" +msgstr "" #. module: fs_base_multi_image #: model:res.groups,name:fs_base_multi_image.group_image_manager @@ -141,8 +146,8 @@ msgstr "Immagine specifica" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium -msgid "Specific Image 128" -msgstr "Immagine specifica 128" +msgid "Specific Image (128)" +msgstr "" #. module: fs_base_multi_image #. odoo-python @@ -150,3 +155,9 @@ msgstr "Immagine specifica 128" #, python-format msgid "You must set an image" msgstr "Bisogna impostare una immagine" + +#~ msgid "Image 128" +#~ msgstr "Immagine 128" + +#~ msgid "Specific Image 128" +#~ msgstr "Immagine specifica 128" From be5568243c28311f8c65d7f51a462c05b38baf60 Mon Sep 17 00:00:00 2001 From: mymage Date: Thu, 18 Jan 2024 08:50:44 +0000 Subject: [PATCH 12/38] Translated using Weblate (Italian) Currently translated at 100.0% (26 of 26 strings) Translation: storage-16.0/storage-16.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image/it/ --- fs_base_multi_image/i18n/it.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs_base_multi_image/i18n/it.po b/fs_base_multi_image/i18n/it.po index 7462af97fc..56a6b5dae8 100644 --- a/fs_base_multi_image/i18n/it.po +++ b/fs_base_multi_image/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-11-28 14:33+0000\n" +"PO-Revision-Date: 2024-01-18 11:33+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -69,12 +69,12 @@ msgstr "Immagine" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium msgid "Image (128)" -msgstr "" +msgstr "Immagine 128" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image msgid "Image (original)" -msgstr "" +msgstr "Immagine (originale)" #. module: fs_base_multi_image #: model:res.groups,name:fs_base_multi_image.group_image_manager @@ -147,7 +147,7 @@ msgstr "Immagine specifica" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium msgid "Specific Image (128)" -msgstr "" +msgstr "Immagine specifica (128)" #. module: fs_base_multi_image #. odoo-python From 341ac74fe01fd7a903dd43cc0177b64a923427ca Mon Sep 17 00:00:00 2001 From: Benjamin Willig Date: Tue, 23 Jan 2024 11:05:35 +0100 Subject: [PATCH 13/38] [FIX] Creating new relation records in the UI with link_existing trigger the inverse method, which results in a ValueError --- fs_base_multi_image/models/fs_image_relation_mixin.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fs_base_multi_image/models/fs_image_relation_mixin.py b/fs_base_multi_image/models/fs_image_relation_mixin.py index 5dfde027c6..ec2c536364 100644 --- a/fs_base_multi_image/models/fs_image_relation_mixin.py +++ b/fs_base_multi_image/models/fs_image_relation_mixin.py @@ -78,9 +78,7 @@ def _compute_image_medium(self): def _inverse_image(self): for record in self: - if record.link_existing: - raise ValueError(_("Cannot set image on a linked image")) - else: + if not record.link_existing: record.specific_image = record.image @api.model From efeb4f035ff40073fa8129ba0d8fbf4e62ece767 Mon Sep 17 00:00:00 2001 From: Benjamin Willig Date: Tue, 23 Jan 2024 11:13:38 +0100 Subject: [PATCH 14/38] [ADD] new widget to allow image upload through drag and drop or file selection --- fs_base_multi_image/README.rst | 2 +- fs_base_multi_image/__manifest__.py | 10 + .../static/description/index.html | 3 +- .../fs_image_relation_dnd_upload.esm.js | 179 ++++++++++++++++++ .../fs_image_relation_dnd_upload.scss | 28 +++ .../fs_image_relation_dnd_upload.xml | 37 ++++ .../views/fs_image_relation_mixin.xml | 33 ++++ 7 files changed, 290 insertions(+), 2 deletions(-) create mode 100644 fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js create mode 100644 fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss create mode 100644 fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml diff --git a/fs_base_multi_image/README.rst b/fs_base_multi_image/README.rst index df26cd1a29..688be36651 100644 --- a/fs_base_multi_image/README.rst +++ b/fs_base_multi_image/README.rst @@ -7,7 +7,7 @@ Fs Base Multi Image !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:68693183f8459f8bb348d05183419c922969399742a1e77c878d8fb4f82d3629 + !! source digest: sha256:2b1f8d6cdde6996404efb81205e6d40189f3bab7136ff5b1938602bb7b8e3a3d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/fs_base_multi_image/__manifest__.py b/fs_base_multi_image/__manifest__.py index 8421649ca0..f7f32a7676 100644 --- a/fs_base_multi_image/__manifest__.py +++ b/fs_base_multi_image/__manifest__.py @@ -18,6 +18,16 @@ "views/fs_image.xml", "views/fs_image_relation_mixin.xml", ], + "assets": { + "web.assets_backend": [ + "fs_base_multi_image/static/src/fields/" + "fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js", + "fs_base_multi_image/static/src/fields/" + "fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss", + "fs_base_multi_image/static/src/fields/" + "fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml", + ], + }, "demo": [], "maintainers": ["lmignon"], "development_status": "Alpha", diff --git a/fs_base_multi_image/static/description/index.html b/fs_base_multi_image/static/description/index.html index 7f7bdda8b0..80ceb26e67 100644 --- a/fs_base_multi_image/static/description/index.html +++ b/fs_base_multi_image/static/description/index.html @@ -1,3 +1,4 @@ + @@ -366,7 +367,7 @@

Fs Base Multi Image

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:68693183f8459f8bb348d05183419c922969399742a1e77c878d8fb4f82d3629 +!! source digest: sha256:2b1f8d6cdde6996404efb81205e6d40189f3bab7136ff5b1938602bb7b8e3a3d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This addon is a technical addon providing a set of models to ease the diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js new file mode 100644 index 0000000000..1814800d4f --- /dev/null +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js @@ -0,0 +1,179 @@ +/** @odoo-module **/ + +import {onWillRender, useRef, useState} from "@odoo/owl"; + +import {X2ManyField} from "@web/views/fields/x2many/x2many_field"; +import {registry} from "@web/core/registry"; + +export class FsImageRelationDndUploadField extends X2ManyField { + setup() { + super.setup(); + this.options = this.activeField.options; + this.target = this.options.target || "fs_image"; + this.relationField = this.field.relation_field; + this.state = useState({ + dragging: false, + }); + this.fileInput = useRef("fileInput"); + this.defaultSequence = 0; + + onWillRender(() => { + this.initDefaultSequence(); + }); + } + + initDefaultSequence() { + let sequence = 0; + _.each(this.props.value.records, (record) => { + sequence = record.data.sequence; + if (sequence >= this.defaultSequence) { + this.defaultSequence = sequence + 1; + } + }); + } + + getNewSequence() { + const sequence = this.defaultSequence; + this.defaultSequence += 1; + return sequence; + } + + setDragging() { + this.state.dragging = true; + } + + setNotDragging() { + this.state.dragging = false; + } + + onDragEnter(ev) { + ev.preventDefault(); + this.setDragging(); + } + + onDragLeave(ev) { + ev.preventDefault(); + this.setNotDragging(); + } + + onClickSelectDocuments(ev) { + ev.preventDefault(); + this.fileInput.el.click(); + } + + onDrop(ev) { + ev.preventDefault(); + this.setNotDragging(); + this.uploadImages(ev.dataTransfer.files); + } + + onFilesSelected(ev) { + ev.preventDefault(); + this.uploadImages(ev.target.files); + } + + async uploadFsImage(imagesDesc) { + const self = this; + const createValues = []; + self.env.model.orm + .call("fs.image", "create", [imagesDesc]) + .then((fsImageIds) => { + let values = {}; + _.each(fsImageIds, (fsImageId) => { + values = self.getFsImageRelationValues(fsImageId); + createValues.push(values); + }); + }) + .then(() => { + self.createFieldRelationRecords(createValues); + }); + } + + getFsImageRelationValues(fsImageId) { + let values = { + image_id: fsImageId, + link_existing: true, + }; + values = {...values, ...this.getRelationCommonValues()}; + return values; + } + + async uploadSpecificImage(imagesDesc) { + const self = this; + const createValues = []; + _.each(imagesDesc, (imageDesc) => { + createValues.push(self.getSpecificImageRelationValues(imageDesc)); + }); + self.createFieldRelationRecords(createValues); + } + + getSpecificImageRelationValues(imageDesc) { + return {...imageDesc, ...this.getRelationCommonValues()}; + } + + getRelationCommonValues() { + const values = { + sequence: this.getNewSequence(), + }; + values[this.relationField] = this.props.record.data.id; + return values; + } + + async createFieldRelationRecords(createValues) { + const self = this; + const model = self.env.model; + model.orm.call(self.activeField.relation, "create", [createValues]).then(() => { + model.root.load(); + model.root.save(); + }); + } + + async uploadImages(files) { + const self = this; + const promises = []; + _.each(files, function (file) { + if (!file.type.includes("image")) { + return; + } + const filePromise = new Promise(function (resolve) { + const reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = function (upload) { + let data = upload.target.result; + data = data.split(",")[1]; + resolve([file.name, data]); + }; + }); + promises.push(filePromise); + }); + return Promise.all(promises).then(function (fileContents) { + const imagesDesc = []; + _.each(fileContents, function (fileContent) { + imagesDesc.push(self.getFileImageDesc(fileContent)); + }); + switch (self.target) { + case "fs_image": + self.uploadFsImage(imagesDesc); + break; + case "specific": + self.uploadSpecificImage(imagesDesc); + break; + } + }); + } + + getFileImageDesc(fileContent) { + return { + image: { + filename: fileContent[0], + content: fileContent[1], + }, + }; + } +} + +FsImageRelationDndUploadField.template = "web.FsImageRelationDndUploadField"; + +registry + .category("fields") + .add("fs_image_relation_dnd_upload", FsImageRelationDndUploadField); diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss new file mode 100644 index 0000000000..5130511a75 --- /dev/null +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss @@ -0,0 +1,28 @@ +.o_field_x2many { + .dnd-zone { + display: table; + padding: 10px; + width: 90%; + margin: auto; + margin-top: 5px; + min-height: 100px; + border: 1px solid transparent; + border-color: var(--notebook-link-border-color, transparent); + text-align: center; + + &.dragging-inside { + outline: 2px dashed #a096be; + outline-offset: -10px; + } + + span { + vertical-align: middle; + display: table-cell; + text-align: center; + } + + input[name="files"] { + display: none; + } + } +} diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml new file mode 100644 index 0000000000..17c31dbcc4 --- /dev/null +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml @@ -0,0 +1,37 @@ + + + + + +

+ + You can drag and drop images to create new records or click here to select image files. + + + +
+ + + + diff --git a/fs_base_multi_image/views/fs_image_relation_mixin.xml b/fs_base_multi_image/views/fs_image_relation_mixin.xml index 27bc8f3a3c..802d82ab0c 100644 --- a/fs_base_multi_image/views/fs_image_relation_mixin.xml +++ b/fs_base_multi_image/views/fs_image_relation_mixin.xml @@ -39,4 +39,37 @@ + + fs.image.relation.mixin.kanban + fs.image.relation.mixin + + + + + + + +
+ X +
+
+
+
+ + + +
+
+
+
+
+ + + + + + From 8da91659a9bd56d53116462fe5165058dd01947d Mon Sep 17 00:00:00 2001 From: Benjamin Willig Date: Tue, 23 Jan 2024 15:16:44 +0100 Subject: [PATCH 15/38] [ADD] allow user to select where he want to store the image --- .../fs_image_relation_dnd_upload.esm.js | 21 +++++- .../fs_image_relation_dnd_upload.scss | 18 +++-- .../fs_image_relation_dnd_upload.xml | 67 +++++++++++++------ 3 files changed, 78 insertions(+), 28 deletions(-) diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js index 1814800d4f..b1da2f1bae 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js @@ -9,10 +9,11 @@ export class FsImageRelationDndUploadField extends X2ManyField { setup() { super.setup(); this.options = this.activeField.options; - this.target = this.options.target || "fs_image"; this.relationField = this.field.relation_field; + this.defaultTarget = this.options.target || "specific"; this.state = useState({ dragging: false, + target: this.defaultTarget, }); this.fileInput = useRef("fileInput"); this.defaultSequence = 0; @@ -22,6 +23,18 @@ export class FsImageRelationDndUploadField extends X2ManyField { }); } + get targetImage() { + return this.state.target; + } + + get displayDndZone() { + const activeActions = this.activeActions; + return ( + ("link" in activeActions ? activeActions.link : activeActions.create) && + !this.props.readonly + ); + } + initDefaultSequence() { let sequence = 0; _.each(this.props.value.records, (record) => { @@ -72,6 +85,10 @@ export class FsImageRelationDndUploadField extends X2ManyField { this.uploadImages(ev.target.files); } + onChangeImageTarget(ev) { + this.state.target = ev.target.value; + } + async uploadFsImage(imagesDesc) { const self = this; const createValues = []; @@ -151,7 +168,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { _.each(fileContents, function (fileContent) { imagesDesc.push(self.getFileImageDesc(fileContent)); }); - switch (self.target) { + switch (self.targetImage) { case "fs_image": self.uploadFsImage(imagesDesc); break; diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss index 5130511a75..4848b7db70 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss @@ -15,10 +15,20 @@ outline-offset: -10px; } - span { - vertical-align: middle; - display: table-cell; - text-align: center; + .row { + display: table-row; + + div { + vertical-align: middle; + display: table-cell; + text-align: center; + + select[name="fs_image_target"] { + display: inline-block; + width: fit-content; + color: #01666b; + } + } } input[name="files"] { diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml index 17c31dbcc4..6522721bae 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml @@ -8,29 +8,52 @@ owl="1" > -
- - You can drag and drop images to create new records or click here to select image files. - + +
+
+
+ You can drag and drop images to create new records or click here to select image files. +
+
- -
+
+
+ Choose how you want to store the new images: + +
+
+ +
+
From af0af034d5982683ac723b639df68e5e9e86da1c Mon Sep 17 00:00:00 2001 From: Benjamin Willig Date: Tue, 23 Jan 2024 16:09:58 +0100 Subject: [PATCH 16/38] [IMP] block the UI during the upload --- .../fs_image_relation_dnd_upload.esm.js | 52 +++++++++++++++---- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js index b1da2f1bae..3d455c65af 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js @@ -1,5 +1,6 @@ /** @odoo-module **/ +import {blockUI, unblockUI} from "web.framework"; import {onWillRender, useRef, useState} from "@odoo/owl"; import {X2ManyField} from "@web/views/fields/x2many/x2many_field"; @@ -103,9 +104,23 @@ export class FsImageRelationDndUploadField extends X2ManyField { }) .then(() => { self.createFieldRelationRecords(createValues); + }) + .catch(() => { + self.displayUploadError(); }); } + displayUploadError() { + unblockUI(); + this.env.services.notification.add( + this.env._t("An error occurred during the images upload."), + { + type: "danger", + sticky: true, + } + ); + } + getFsImageRelationValues(fsImageId) { let values = { image_id: fsImageId, @@ -139,15 +154,24 @@ export class FsImageRelationDndUploadField extends X2ManyField { async createFieldRelationRecords(createValues) { const self = this; const model = self.env.model; - model.orm.call(self.activeField.relation, "create", [createValues]).then(() => { - model.root.load(); - model.root.save(); - }); + model.orm + .call(self.activeField.relation, "create", [createValues]) + .then(() => { + model.root.load(); + model.root.save(); + }) + .then(() => { + unblockUI(); + }) + .catch(() => { + self.displayUploadError(); + }); } async uploadImages(files) { const self = this; const promises = []; + blockUI(); _.each(files, function (file) { if (!file.type.includes("image")) { return; @@ -168,13 +192,19 @@ export class FsImageRelationDndUploadField extends X2ManyField { _.each(fileContents, function (fileContent) { imagesDesc.push(self.getFileImageDesc(fileContent)); }); - switch (self.targetImage) { - case "fs_image": - self.uploadFsImage(imagesDesc); - break; - case "specific": - self.uploadSpecificImage(imagesDesc); - break; + if (imagesDesc.length > 0) { + switch (self.targetImage) { + case "fs_image": + self.uploadFsImage(imagesDesc); + break; + case "specific": + self.uploadSpecificImage(imagesDesc); + break; + default: + unblockUI(); + } + } else { + unblockUI(); } }); } From f220f970a9e3e602e6ddfe3977173171590f94f1 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 25 Jan 2024 17:20:39 +0000 Subject: [PATCH 17/38] [UPD] Update fs_base_multi_image.pot --- .../i18n/fs_base_multi_image.pot | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/fs_base_multi_image/i18n/fs_base_multi_image.pot b/fs_base_multi_image/i18n/fs_base_multi_image.pot index 830715b440..d19608beef 100644 --- a/fs_base_multi_image/i18n/fs_base_multi_image.pot +++ b/fs_base_multi_image/i18n/fs_base_multi_image.pot @@ -14,10 +14,17 @@ msgstr "" "Plural-Forms: \n" #. module: fs_base_multi_image -#. odoo-python -#: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js:0 #, python-format -msgid "Cannot set image on a linked image" +msgid "An error occurred during the images upload." +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "Choose how you want to store the new images:" msgstr "" #. module: fs_base_multi_image @@ -131,11 +138,25 @@ msgstr "" msgid "Name" msgstr "" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "Reusable images" +msgstr "" + #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence msgid "Sequence" msgstr "" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "Specific" +msgstr "" + #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image msgid "Specific Image" @@ -146,9 +167,30 @@ msgstr "" msgid "Specific Image (128)" msgstr "" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "You can drag and drop images to create new records or" +msgstr "" + #. module: fs_base_multi_image #. odoo-python #: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 #, python-format msgid "You must set an image" msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "click here" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "to select image files." +msgstr "" From 5ebe46c9e8e91d7f9771bca7ed00144db6181c15 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 25 Jan 2024 17:23:12 +0000 Subject: [PATCH 18/38] [BOT] post-merge updates --- fs_base_multi_image/README.rst | 2 +- fs_base_multi_image/__manifest__.py | 2 +- fs_base_multi_image/static/description/index.html | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/fs_base_multi_image/README.rst b/fs_base_multi_image/README.rst index 688be36651..58fad59bba 100644 --- a/fs_base_multi_image/README.rst +++ b/fs_base_multi_image/README.rst @@ -7,7 +7,7 @@ Fs Base Multi Image !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2b1f8d6cdde6996404efb81205e6d40189f3bab7136ff5b1938602bb7b8e3a3d + !! source digest: sha256:ad3bbeac958b6632a99fed3772704d6ac955048fc5657b64fdb3dd63e12e73f8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/fs_base_multi_image/__manifest__.py b/fs_base_multi_image/__manifest__.py index f7f32a7676..f0e2537042 100644 --- a/fs_base_multi_image/__manifest__.py +++ b/fs_base_multi_image/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Base Multi Image", "summary": """ Mulitple Images from External File System""", - "version": "16.0.1.0.1", + "version": "16.0.1.1.0", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_base_multi_image/static/description/index.html b/fs_base_multi_image/static/description/index.html index 80ceb26e67..b919d0d77c 100644 --- a/fs_base_multi_image/static/description/index.html +++ b/fs_base_multi_image/static/description/index.html @@ -1,4 +1,3 @@ - @@ -367,7 +366,7 @@

Fs Base Multi Image

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:2b1f8d6cdde6996404efb81205e6d40189f3bab7136ff5b1938602bb7b8e3a3d +!! source digest: sha256:ad3bbeac958b6632a99fed3772704d6ac955048fc5657b64fdb3dd63e12e73f8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This addon is a technical addon providing a set of models to ease the From 53120f647b1dc4d5ce815e22be68e07c9ad893ad Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 25 Jan 2024 17:23:23 +0000 Subject: [PATCH 19/38] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: storage-16.0/storage-16.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image/ --- fs_base_multi_image/i18n/es.po | 54 +++++++++++++++++++++++++++++++--- fs_base_multi_image/i18n/it.po | 54 +++++++++++++++++++++++++++++++--- 2 files changed, 100 insertions(+), 8 deletions(-) diff --git a/fs_base_multi_image/i18n/es.po b/fs_base_multi_image/i18n/es.po index 4bae1f3316..f712d2e5d7 100644 --- a/fs_base_multi_image/i18n/es.po +++ b/fs_base_multi_image/i18n/es.po @@ -17,11 +17,18 @@ msgstr "" "X-Generator: Weblate 4.17\n" #. module: fs_base_multi_image -#. odoo-python -#: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js:0 +#, python-format +msgid "An error occurred during the images upload." +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format -msgid "Cannot set image on a linked image" -msgstr "No se puede establecer la imagen en una imagen vinculada" +msgid "Choose how you want to store the new images:" +msgstr "" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid @@ -134,11 +141,25 @@ msgstr "Tipo Mimo" msgid "Name" msgstr "Nombre" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "Reusable images" +msgstr "" + #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence msgid "Sequence" msgstr "Secuencia" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "Specific" +msgstr "" + #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image msgid "Specific Image" @@ -149,6 +170,13 @@ msgstr "Imagen Específica" msgid "Specific Image (128)" msgstr "" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "You can drag and drop images to create new records or" +msgstr "" + #. module: fs_base_multi_image #. odoo-python #: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 @@ -156,6 +184,24 @@ msgstr "" msgid "You must set an image" msgstr "Usted debe establecer una imagen" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "click here" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "to select image files." +msgstr "" + +#, python-format +#~ msgid "Cannot set image on a linked image" +#~ msgstr "No se puede establecer la imagen en una imagen vinculada" + #~ msgid "Image 128" #~ msgstr "Imagen 128" diff --git a/fs_base_multi_image/i18n/it.po b/fs_base_multi_image/i18n/it.po index 56a6b5dae8..3f9274debc 100644 --- a/fs_base_multi_image/i18n/it.po +++ b/fs_base_multi_image/i18n/it.po @@ -17,11 +17,18 @@ msgstr "" "X-Generator: Weblate 4.17\n" #. module: fs_base_multi_image -#. odoo-python -#: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js:0 +#, python-format +msgid "An error occurred during the images upload." +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format -msgid "Cannot set image on a linked image" -msgstr "Non si può impostare una immagin in una immagine collegata" +msgid "Choose how you want to store the new images:" +msgstr "" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid @@ -134,11 +141,25 @@ msgstr "Tipo MIME" msgid "Name" msgstr "Nome" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "Reusable images" +msgstr "" + #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence msgid "Sequence" msgstr "Sequenza" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "Specific" +msgstr "" + #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image msgid "Specific Image" @@ -149,6 +170,13 @@ msgstr "Immagine specifica" msgid "Specific Image (128)" msgstr "Immagine specifica (128)" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "You can drag and drop images to create new records or" +msgstr "" + #. module: fs_base_multi_image #. odoo-python #: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 @@ -156,6 +184,24 @@ msgstr "Immagine specifica (128)" msgid "You must set an image" msgstr "Bisogna impostare una immagine" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "click here" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "to select image files." +msgstr "" + +#, python-format +#~ msgid "Cannot set image on a linked image" +#~ msgstr "Non si può impostare una immagin in una immagine collegata" + #~ msgid "Image 128" #~ msgstr "Immagine 128" From 89a3e2f3702c3e3d384766b5186803aa1a4cf753 Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Sat, 27 Jan 2024 11:46:01 +0000 Subject: [PATCH 20/38] Translated using Weblate (Spanish) Currently translated at 100.0% (32 of 32 strings) Translation: storage-16.0/storage-16.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image/es/ --- fs_base_multi_image/i18n/es.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/fs_base_multi_image/i18n/es.po b/fs_base_multi_image/i18n/es.po index f712d2e5d7..8ec4742f52 100644 --- a/fs_base_multi_image/i18n/es.po +++ b/fs_base_multi_image/i18n/es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-10-29 00:15+0000\n" +"PO-Revision-Date: 2024-01-27 14:36+0000\n" "Last-Translator: Ivorra78 \n" "Language-Team: none\n" "Language: es\n" @@ -21,14 +21,14 @@ msgstr "" #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js:0 #, python-format msgid "An error occurred during the images upload." -msgstr "" +msgstr "Se ha producido un error durante la carga de imágenes." #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "Choose how you want to store the new images:" -msgstr "" +msgstr "Elige cómo quieres almacenar las nuevas imágenes:" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid @@ -76,12 +76,12 @@ msgstr "Imagen" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium msgid "Image (128)" -msgstr "" +msgstr "Imagen (128)" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image msgid "Image (original)" -msgstr "" +msgstr "Imagen (original)" #. module: fs_base_multi_image #: model:res.groups,name:fs_base_multi_image.group_image_manager @@ -146,7 +146,7 @@ msgstr "Nombre" #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "Reusable images" -msgstr "" +msgstr "Imágenes reutilizables" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence @@ -158,7 +158,7 @@ msgstr "Secuencia" #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "Specific" -msgstr "" +msgstr "Específico" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image @@ -168,14 +168,14 @@ msgstr "Imagen Específica" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium msgid "Specific Image (128)" -msgstr "" +msgstr "Imagen Específica (128)" #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "You can drag and drop images to create new records or" -msgstr "" +msgstr "Puede arrastrar y soltar imágenes para crear nuevos registros o" #. module: fs_base_multi_image #. odoo-python @@ -189,14 +189,14 @@ msgstr "Usted debe establecer una imagen" #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "click here" -msgstr "" +msgstr "pulse aquí" #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "to select image files." -msgstr "" +msgstr "para seleccionar archivos de imagen." #, python-format #~ msgid "Cannot set image on a linked image" From 4a425be8753c6d101476abbe195d203334464185 Mon Sep 17 00:00:00 2001 From: mymage Date: Thu, 1 Feb 2024 07:05:20 +0000 Subject: [PATCH 21/38] Translated using Weblate (Italian) Currently translated at 100.0% (32 of 32 strings) Translation: storage-16.0/storage-16.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image/it/ --- fs_base_multi_image/i18n/it.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/fs_base_multi_image/i18n/it.po b/fs_base_multi_image/i18n/it.po index 3f9274debc..b3c250495f 100644 --- a/fs_base_multi_image/i18n/it.po +++ b/fs_base_multi_image/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-01-18 11:33+0000\n" +"PO-Revision-Date: 2024-02-01 07:22+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -21,14 +21,14 @@ msgstr "" #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js:0 #, python-format msgid "An error occurred during the images upload." -msgstr "" +msgstr "Si è verificato un errore durante il caricamento dell'immagine." #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "Choose how you want to store the new images:" -msgstr "" +msgstr "Scegliere come archiviare le nuove immagini:" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid @@ -146,7 +146,7 @@ msgstr "Nome" #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "Reusable images" -msgstr "" +msgstr "Immagini riutilizzabili" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence @@ -158,7 +158,7 @@ msgstr "Sequenza" #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "Specific" -msgstr "" +msgstr "Specifica" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image @@ -175,7 +175,7 @@ msgstr "Immagine specifica (128)" #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "You can drag and drop images to create new records or" -msgstr "" +msgstr "Si possono trascinare e rilasciare immagini per creare nuovi record o" #. module: fs_base_multi_image #. odoo-python @@ -189,14 +189,14 @@ msgstr "Bisogna impostare una immagine" #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "click here" -msgstr "" +msgstr "fare clic qui" #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "to select image files." -msgstr "" +msgstr "per selezionare file immagine." #, python-format #~ msgid "Cannot set image on a linked image" From 346372cf69581b24f36ae2e0f03c1a4d7dbb5c17 Mon Sep 17 00:00:00 2001 From: "Benjamin Willig (ACSONE)" Date: Thu, 15 Feb 2024 15:24:35 +0000 Subject: [PATCH 22/38] Added translation using Weblate (French) --- fs_base_multi_image/i18n/fr.po | 197 +++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 fs_base_multi_image/i18n/fr.po diff --git a/fs_base_multi_image/i18n/fr.po b/fs_base_multi_image/i18n/fr.po new file mode 100644 index 0000000000..b7ec46d6a7 --- /dev/null +++ b/fs_base_multi_image/i18n/fr.po @@ -0,0 +1,197 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fs_base_multi_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fr\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_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js:0 +#, python-format +msgid "An error occurred during the images upload." +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "Choose how you want to store the new images:" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Created by" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_date +msgid "Created on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__display_name +msgid "Display Name" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.actions.act_window,name:fs_base_multi_image.fs_image_act_window +msgid "Fs Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.ui.menu,name:fs_base_multi_image.fs_image_menu +msgid "Fs Images" +msgstr "" + +#. module: fs_base_multi_image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Group By" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__id +msgid "ID" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model,name:fs_base_multi_image.model_fs_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_form_view +msgid "Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium +msgid "Image (128)" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image +msgid "Image (original)" +msgstr "" + +#. module: fs_base_multi_image +#: model:res.groups,name:fs_base_multi_image.group_image_manager +msgid "Image Manager" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model,name:fs_base_multi_image.model_fs_image_relation_mixin +msgid "Image Relation" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image_medium +msgid "Image medium" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update +msgid "Last Modified on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_date +msgid "Last Updated on" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__link_existing +msgid "Link Existing" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_id +msgid "Linked image" +msgstr "" + +#. module: fs_base_multi_image +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "MimeType" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__mimetype +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__mimetype +msgid "Mimetype" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__name +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__name +#: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view +msgid "Name" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "Reusable images" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence +msgid "Sequence" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "Specific" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image +msgid "Specific Image" +msgstr "" + +#. module: fs_base_multi_image +#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium +msgid "Specific Image (128)" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "You can drag and drop images to create new records or" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-python +#: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 +#, python-format +msgid "You must set an image" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "click here" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "to select image files." +msgstr "" From cef457b460b7b46bc4f01418196d6279aa827b75 Mon Sep 17 00:00:00 2001 From: "Benjamin Willig (ACSONE)" Date: Thu, 15 Feb 2024 15:25:45 +0000 Subject: [PATCH 23/38] Translated using Weblate (French) Currently translated at 62.5% (20 of 32 strings) Translation: storage-16.0/storage-16.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image/fr/ --- fs_base_multi_image/i18n/fr.po | 44 ++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/fs_base_multi_image/i18n/fr.po b/fs_base_multi_image/i18n/fr.po index b7ec46d6a7..11b1613965 100644 --- a/fs_base_multi_image/i18n/fr.po +++ b/fs_base_multi_image/i18n/fr.po @@ -6,43 +6,45 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2024-02-15 17:37+0000\n" +"Last-Translator: \"Benjamin Willig (ACSONE)\" \n" "Language-Team: none\n" "Language: fr\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_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js:0 #, python-format msgid "An error occurred during the images upload." -msgstr "" +msgstr "Une erreur est apparue lors de l'upload des images." #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "Choose how you want to store the new images:" -msgstr "" +msgstr "Choisissez où les images seront stockées :" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_uid #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view msgid "Created by" -msgstr "" +msgstr "Créé par" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__create_date msgid "Created on" -msgstr "" +msgstr "Crée le" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__display_name msgid "Display Name" -msgstr "" +msgstr "Nom affiché" #. module: fs_base_multi_image #: model:ir.actions.act_window,name:fs_base_multi_image.fs_image_act_window @@ -79,12 +81,12 @@ msgstr "" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image msgid "Image (original)" -msgstr "" +msgstr "Image (originale)" #. module: fs_base_multi_image #: model:res.groups,name:fs_base_multi_image.group_image_manager msgid "Image Manager" -msgstr "" +msgstr "Gestionnaire des images" #. module: fs_base_multi_image #: model:ir.model,name:fs_base_multi_image.model_fs_image_relation_mixin @@ -94,7 +96,7 @@ msgstr "" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image_medium msgid "Image medium" -msgstr "" +msgstr "Image moyenne" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update @@ -114,12 +116,12 @@ msgstr "" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__link_existing msgid "Link Existing" -msgstr "" +msgstr "Lier une image existante" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_id msgid "Linked image" -msgstr "" +msgstr "Image liée" #. module: fs_base_multi_image #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view @@ -137,36 +139,36 @@ msgstr "" #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__name #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view msgid "Name" -msgstr "" +msgstr "Nom" #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "Reusable images" -msgstr "" +msgstr "Images réutilisables" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__sequence msgid "Sequence" -msgstr "" +msgstr "Séquence" #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "Specific" -msgstr "" +msgstr "Spécifique" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image msgid "Specific Image" -msgstr "" +msgstr "Image Spécifique" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__specific_image_medium msgid "Specific Image (128)" -msgstr "" +msgstr "Image spécifique (128)" #. module: fs_base_multi_image #. odoo-javascript @@ -174,24 +176,26 @@ msgstr "" #, python-format msgid "You can drag and drop images to create new records or" msgstr "" +"Vous pouvez glisser/déposer des images pour créer des nouveaux " +"enregistrements où" #. module: fs_base_multi_image #. odoo-python #: code:addons/fs_base_multi_image/models/fs_image_relation_mixin.py:0 #, python-format msgid "You must set an image" -msgstr "" +msgstr "Vous devez définir une image" #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "click here" -msgstr "" +msgstr "cliquez ici" #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "to select image files." -msgstr "" +msgstr "pour sélectionner des fichiers." From 5d52282e061010cda4cc3e75f5abc6b71295bc84 Mon Sep 17 00:00:00 2001 From: "Benjamin Willig (ACSONE)" Date: Mon, 19 Feb 2024 08:22:53 +0000 Subject: [PATCH 24/38] Translated using Weblate (French) Currently translated at 75.0% (24 of 32 strings) Translation: storage-16.0/storage-16.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image/fr/ --- fs_base_multi_image/i18n/fr.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs_base_multi_image/i18n/fr.po b/fs_base_multi_image/i18n/fr.po index 11b1613965..acde25a4c6 100644 --- a/fs_base_multi_image/i18n/fr.po +++ b/fs_base_multi_image/i18n/fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-02-15 17:37+0000\n" +"PO-Revision-Date: 2024-02-19 10:34+0000\n" "Last-Translator: \"Benjamin Willig (ACSONE)\" \n" "Language-Team: none\n" "Language: fr\n" @@ -49,12 +49,12 @@ msgstr "Nom affiché" #. module: fs_base_multi_image #: model:ir.actions.act_window,name:fs_base_multi_image.fs_image_act_window msgid "Fs Image" -msgstr "" +msgstr "Image FS" #. module: fs_base_multi_image #: model:ir.ui.menu,name:fs_base_multi_image.fs_image_menu msgid "Fs Images" -msgstr "" +msgstr "Images FS" #. module: fs_base_multi_image #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_search_view @@ -71,12 +71,12 @@ msgstr "" #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__image #: model_terms:ir.ui.view,arch_db:fs_base_multi_image.fs_image_form_view msgid "Image" -msgstr "" +msgstr "Image" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image_medium msgid "Image (128)" -msgstr "" +msgstr "Image (128)" #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image_relation_mixin__image From 3e671f59aa9b200b14891de69e5578513c2f698f Mon Sep 17 00:00:00 2001 From: chien Date: Wed, 28 Feb 2024 17:45:45 +0700 Subject: [PATCH 25/38] [IMP] fs_base_multi_image: pre-commit auto fixes --- fs_base_multi_image/README.rst | 51 ++++++++++--------- fs_base_multi_image/models/fs_image.py | 1 - .../models/fs_image_relation_mixin.py | 1 - fs_base_multi_image/pyproject.toml | 3 ++ fs_base_multi_image/readme/CONTRIBUTORS.md | 1 + fs_base_multi_image/readme/CONTRIBUTORS.rst | 1 - fs_base_multi_image/readme/DESCRIPTION.md | 15 ++++++ fs_base_multi_image/readme/DESCRIPTION.rst | 14 ----- fs_base_multi_image/readme/ROADMAP.md | 3 ++ fs_base_multi_image/readme/ROADMAP.rst | 2 - fs_base_multi_image/readme/USAGE.md | 3 ++ fs_base_multi_image/readme/USAGE.rst | 3 -- .../static/description/index.html | 37 ++++++++------ 13 files changed, 73 insertions(+), 62 deletions(-) create mode 100644 fs_base_multi_image/pyproject.toml create mode 100644 fs_base_multi_image/readme/CONTRIBUTORS.md delete mode 100644 fs_base_multi_image/readme/CONTRIBUTORS.rst create mode 100644 fs_base_multi_image/readme/DESCRIPTION.md delete mode 100644 fs_base_multi_image/readme/DESCRIPTION.rst create mode 100644 fs_base_multi_image/readme/ROADMAP.md delete mode 100644 fs_base_multi_image/readme/ROADMAP.rst create mode 100644 fs_base_multi_image/readme/USAGE.md delete mode 100644 fs_base_multi_image/readme/USAGE.rst diff --git a/fs_base_multi_image/README.rst b/fs_base_multi_image/README.rst index 58fad59bba..c034fda2d4 100644 --- a/fs_base_multi_image/README.rst +++ b/fs_base_multi_image/README.rst @@ -17,31 +17,33 @@ Fs Base Multi Image :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstorage-lightgray.png?logo=github - :target: https://github.com/OCA/storage/tree/16.0/fs_base_multi_image + :target: https://github.com/OCA/storage/tree/17.0/fs_base_multi_image :alt: OCA/storage .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_base_multi_image + :target: https://translation.odoo-community.org/projects/storage-17-0/storage-17-0-fs_base_multi_image :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/storage&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/storage&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| This addon is a technical addon providing a set of models to ease the -creation of other models that need to be linked to multiple images stored -into external filesystems. +creation of other models that need to be linked to multiple images +stored into external filesystems. The models provided by this addon are: -* ``fs.image``: a model that stores a reference to an image stored into - an external filesystem. -* ``fs.image.relation.mixin``: an abstract model that can be used to - as base class for models created to store an image linked to a model. - This abstract model defines fields and methods to transparently handle - 2 cases: - * the image is specific to the model. - * the image is shared between multiple models and therefore is a ``fs.image`` instance linked to the mixin. +- ``fs.image``: a model that stores a reference to an image stored into + an external filesystem. +- ``fs.image.relation.mixin``: an abstract model that can be used to as + base class for models created to store an image linked to a model. + This abstract model defines fields and methods to transparently + handle 2 cases: + + - the image is specific to the model. + - the image is shared between multiple models and therefore is a + ``fs.image`` instance linked to the mixin. .. IMPORTANT:: This is an alpha version, the data model and design can change at any time without warning. @@ -56,15 +58,16 @@ The models provided by this addon are: Usage ===== -To be able to create and or manages shared images, you must have the ``Image Manager`` -role. If you do not have this role, as an authenticated user, you can -only view the shared images. +To be able to create and or manages shared images, you must have the +``Image Manager`` role. If you do not have this role, as an +authenticated user, you can only view the shared images. Known issues / Roadmap ====================== -* Add dedicated widget to ease the addition of new images to a model linked to - multiple images. (As it's the case in the *storage_image_product* addon) +- Add dedicated widget to ease the addition of new images to a model + linked to multiple images. (As it's the case in the + *storage_image_product* addon) Bug Tracker =========== @@ -72,7 +75,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. @@ -80,17 +83,17 @@ Credits ======= Authors -~~~~~~~ +------- * ACSONE SA/NV Contributors -~~~~~~~~~~~~ +------------ -* Laurent Mignon +- Laurent Mignon Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -110,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_base_multi_image/models/fs_image.py b/fs_base_multi_image/models/fs_image.py index 285995ae26..e2881ee682 100644 --- a/fs_base_multi_image/models/fs_image.py +++ b/fs_base_multi_image/models/fs_image.py @@ -7,7 +7,6 @@ class FsImage(models.Model): - _name = "fs.image" _inherit = "fs.image.mixin" _description = "Image" diff --git a/fs_base_multi_image/models/fs_image_relation_mixin.py b/fs_base_multi_image/models/fs_image_relation_mixin.py index ec2c536364..bb6ebfeba4 100644 --- a/fs_base_multi_image/models/fs_image_relation_mixin.py +++ b/fs_base_multi_image/models/fs_image_relation_mixin.py @@ -8,7 +8,6 @@ class FsImageRelationMixin(models.AbstractModel): - _name = "fs.image.relation.mixin" _description = "Image Relation" _order = "sequence, name" diff --git a/fs_base_multi_image/pyproject.toml b/fs_base_multi_image/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/fs_base_multi_image/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/fs_base_multi_image/readme/CONTRIBUTORS.md b/fs_base_multi_image/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..f2af9193ce --- /dev/null +++ b/fs_base_multi_image/readme/CONTRIBUTORS.md @@ -0,0 +1 @@ +- Laurent Mignon \<\> diff --git a/fs_base_multi_image/readme/CONTRIBUTORS.rst b/fs_base_multi_image/readme/CONTRIBUTORS.rst deleted file mode 100644 index 172b2d223c..0000000000 --- a/fs_base_multi_image/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Laurent Mignon diff --git a/fs_base_multi_image/readme/DESCRIPTION.md b/fs_base_multi_image/readme/DESCRIPTION.md new file mode 100644 index 0000000000..a79b8da118 --- /dev/null +++ b/fs_base_multi_image/readme/DESCRIPTION.md @@ -0,0 +1,15 @@ +This addon is a technical addon providing a set of models to ease the +creation of other models that need to be linked to multiple images +stored into external filesystems. + +The models provided by this addon are: + +- `fs.image`: a model that stores a reference to an image stored into an + external filesystem. +- `fs.image.relation.mixin`: an abstract model that can be used to as + base class for models created to store an image linked to a model. + This abstract model defines fields and methods to transparently handle + 2 cases: + - the image is specific to the model. + - the image is shared between multiple models and therefore is a + `fs.image` instance linked to the mixin. diff --git a/fs_base_multi_image/readme/DESCRIPTION.rst b/fs_base_multi_image/readme/DESCRIPTION.rst deleted file mode 100644 index 3690804632..0000000000 --- a/fs_base_multi_image/readme/DESCRIPTION.rst +++ /dev/null @@ -1,14 +0,0 @@ -This addon is a technical addon providing a set of models to ease the -creation of other models that need to be linked to multiple images stored -into external filesystems. - -The models provided by this addon are: - -* ``fs.image``: a model that stores a reference to an image stored into - an external filesystem. -* ``fs.image.relation.mixin``: an abstract model that can be used to - as base class for models created to store an image linked to a model. - This abstract model defines fields and methods to transparently handle - 2 cases: - * the image is specific to the model. - * the image is shared between multiple models and therefore is a ``fs.image`` instance linked to the mixin. diff --git a/fs_base_multi_image/readme/ROADMAP.md b/fs_base_multi_image/readme/ROADMAP.md new file mode 100644 index 0000000000..c85ff99dc1 --- /dev/null +++ b/fs_base_multi_image/readme/ROADMAP.md @@ -0,0 +1,3 @@ +- Add dedicated widget to ease the addition of new images to a model + linked to multiple images. (As it's the case in the + *storage_image_product* addon) diff --git a/fs_base_multi_image/readme/ROADMAP.rst b/fs_base_multi_image/readme/ROADMAP.rst deleted file mode 100644 index 776f992b58..0000000000 --- a/fs_base_multi_image/readme/ROADMAP.rst +++ /dev/null @@ -1,2 +0,0 @@ -* Add dedicated widget to ease the addition of new images to a model linked to - multiple images. (As it's the case in the *storage_image_product* addon) diff --git a/fs_base_multi_image/readme/USAGE.md b/fs_base_multi_image/readme/USAGE.md new file mode 100644 index 0000000000..d49a937cdf --- /dev/null +++ b/fs_base_multi_image/readme/USAGE.md @@ -0,0 +1,3 @@ +To be able to create and or manages shared images, you must have the +`Image Manager` role. If you do not have this role, as an authenticated +user, you can only view the shared images. diff --git a/fs_base_multi_image/readme/USAGE.rst b/fs_base_multi_image/readme/USAGE.rst deleted file mode 100644 index 7a4d226aa3..0000000000 --- a/fs_base_multi_image/readme/USAGE.rst +++ /dev/null @@ -1,3 +0,0 @@ -To be able to create and or manages shared images, you must have the ``Image Manager`` -role. If you do not have this role, as an authenticated user, you can -only view the shared images. diff --git a/fs_base_multi_image/static/description/index.html b/fs_base_multi_image/static/description/index.html index b919d0d77c..02979d17cf 100644 --- a/fs_base_multi_image/static/description/index.html +++ b/fs_base_multi_image/static/description/index.html @@ -1,3 +1,4 @@ + @@ -368,20 +369,23 @@

Fs Base Multi Image

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:ad3bbeac958b6632a99fed3772704d6ac955048fc5657b64fdb3dd63e12e73f8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

This addon is a technical addon providing a set of models to ease the -creation of other models that need to be linked to multiple images stored -into external filesystems.

+creation of other models that need to be linked to multiple images +stored into external filesystems.

The models provided by this addon are:

  • fs.image: a model that stores a reference to an image stored into an external filesystem.
  • -
  • fs.image.relation.mixin: an abstract model that can be used to -as base class for models created to store an image linked to a model. -This abstract model defines fields and methods to transparently handle -2 cases: -* the image is specific to the model. -* the image is shared between multiple models and therefore is a fs.image instance linked to the mixin.
  • +
  • fs.image.relation.mixin: an abstract model that can be used to as +base class for models created to store an image linked to a model. +This abstract model defines fields and methods to transparently +handle 2 cases:
      +
    • the image is specific to the model.
    • +
    • the image is shared between multiple models and therefore is a +fs.image instance linked to the mixin.
    • +
    +

Important

@@ -405,15 +409,16 @@

Fs Base Multi Image

Usage

-

To be able to create and or manages shared images, you must have the Image Manager -role. If you do not have this role, as an authenticated user, you can -only view the shared images.

+

To be able to create and or manages shared images, you must have the +Image Manager role. If you do not have this role, as an +authenticated user, you can only view the shared images.

Known issues / Roadmap

    -
  • Add dedicated widget to ease the addition of new images to a model linked to -multiple images. (As it’s the case in the storage_image_product addon)
  • +
  • Add dedicated widget to ease the addition of new images to a model +linked to multiple images. (As it’s the case in the +storage_image_product addon)
@@ -421,7 +426,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.

@@ -447,7 +452,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 934ba0e4eb24b23f2ebd0581b14bdf669d670575 Mon Sep 17 00:00:00 2001 From: chien Date: Thu, 29 Feb 2024 17:41:31 +0700 Subject: [PATCH 26/38] [MIG] fs_base_multi_image: Migration to 17.0 --- fs_base_multi_image/README.rst | 1 + fs_base_multi_image/__manifest__.py | 2 +- fs_base_multi_image/readme/CONTRIBUTORS.md | 1 + .../static/description/index.html | 2 +- .../fs_image_relation_dnd_upload.esm.js | 36 ++++++++++--------- .../fs_image_relation_dnd_upload.scss | 3 +- .../fs_image_relation_dnd_upload.xml | 1 - .../views/fs_image_relation_mixin.xml | 9 ++--- 8 files changed, 27 insertions(+), 28 deletions(-) diff --git a/fs_base_multi_image/README.rst b/fs_base_multi_image/README.rst index c034fda2d4..798d4636af 100644 --- a/fs_base_multi_image/README.rst +++ b/fs_base_multi_image/README.rst @@ -91,6 +91,7 @@ Contributors ------------ - Laurent Mignon +- Nguyen Minh Chien Maintainers ----------- diff --git a/fs_base_multi_image/__manifest__.py b/fs_base_multi_image/__manifest__.py index f0e2537042..8d663bfd95 100644 --- a/fs_base_multi_image/__manifest__.py +++ b/fs_base_multi_image/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Base Multi Image", "summary": """ Mulitple Images from External File System""", - "version": "16.0.1.1.0", + "version": "17.0.1.0.0", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_base_multi_image/readme/CONTRIBUTORS.md b/fs_base_multi_image/readme/CONTRIBUTORS.md index f2af9193ce..da20decb6f 100644 --- a/fs_base_multi_image/readme/CONTRIBUTORS.md +++ b/fs_base_multi_image/readme/CONTRIBUTORS.md @@ -1 +1,2 @@ - Laurent Mignon \<\> +- Nguyen Minh Chien \<\> diff --git a/fs_base_multi_image/static/description/index.html b/fs_base_multi_image/static/description/index.html index 02979d17cf..381e3817cc 100644 --- a/fs_base_multi_image/static/description/index.html +++ b/fs_base_multi_image/static/description/index.html @@ -1,4 +1,3 @@ - @@ -441,6 +440,7 @@

Authors

Contributors

diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js index 3d455c65af..7d0aed7446 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js @@ -1,17 +1,14 @@ /** @odoo-module **/ -import {blockUI, unblockUI} from "web.framework"; +import {X2ManyField, x2ManyField} from "@web/views/fields/x2many/x2many_field"; import {onWillRender, useRef, useState} from "@odoo/owl"; - -import {X2ManyField} from "@web/views/fields/x2many/x2many_field"; import {registry} from "@web/core/registry"; export class FsImageRelationDndUploadField extends X2ManyField { setup() { super.setup(); - this.options = this.activeField.options; this.relationField = this.field.relation_field; - this.defaultTarget = this.options.target || "specific"; + this.defaultTarget = this.props.crudOptions.target || "specific"; this.state = useState({ dragging: false, target: this.defaultTarget, @@ -38,7 +35,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { initDefaultSequence() { let sequence = 0; - _.each(this.props.value.records, (record) => { + $.each(this.props.record.data[this.props.name].records, (i, record) => { sequence = record.data.sequence; if (sequence >= this.defaultSequence) { this.defaultSequence = sequence + 1; @@ -97,7 +94,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { .call("fs.image", "create", [imagesDesc]) .then((fsImageIds) => { let values = {}; - _.each(fsImageIds, (fsImageId) => { + $.each(fsImageIds, (i, fsImageId) => { values = self.getFsImageRelationValues(fsImageId); createValues.push(values); }); @@ -111,7 +108,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { } displayUploadError() { - unblockUI(); + this.env.services.ui.unblock(); this.env.services.notification.add( this.env._t("An error occurred during the images upload."), { @@ -133,7 +130,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { async uploadSpecificImage(imagesDesc) { const self = this; const createValues = []; - _.each(imagesDesc, (imageDesc) => { + $.each(imagesDesc, (i, imageDesc) => { createValues.push(self.getSpecificImageRelationValues(imageDesc)); }); self.createFieldRelationRecords(createValues); @@ -155,13 +152,13 @@ export class FsImageRelationDndUploadField extends X2ManyField { const self = this; const model = self.env.model; model.orm - .call(self.activeField.relation, "create", [createValues]) + .call(self.field.relation, "create", [createValues]) .then(() => { model.root.load(); model.root.save(); }) .then(() => { - unblockUI(); + self.env.services.ui.unblock(); }) .catch(() => { self.displayUploadError(); @@ -171,8 +168,8 @@ export class FsImageRelationDndUploadField extends X2ManyField { async uploadImages(files) { const self = this; const promises = []; - blockUI(); - _.each(files, function (file) { + this.env.services.ui.block(); + $.each(files, function (i, file) { if (!file.type.includes("image")) { return; } @@ -189,7 +186,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { }); return Promise.all(promises).then(function (fileContents) { const imagesDesc = []; - _.each(fileContents, function (fileContent) { + $.each(fileContents, function (i, fileContent) { imagesDesc.push(self.getFileImageDesc(fileContent)); }); if (imagesDesc.length > 0) { @@ -201,10 +198,10 @@ export class FsImageRelationDndUploadField extends X2ManyField { self.uploadSpecificImage(imagesDesc); break; default: - unblockUI(); + self.env.services.ui.unblock(); } } else { - unblockUI(); + self.env.services.ui.unblock(); } }); } @@ -221,6 +218,11 @@ export class FsImageRelationDndUploadField extends X2ManyField { FsImageRelationDndUploadField.template = "web.FsImageRelationDndUploadField"; +export const fsImageRelationDndUploadField = { + ...x2ManyField, + component: FsImageRelationDndUploadField, +}; + registry .category("fields") - .add("fs_image_relation_dnd_upload", FsImageRelationDndUploadField); + .add("fs_image_relation_dnd_upload", fsImageRelationDndUploadField); diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss index 4848b7db70..508fbe7833 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.scss @@ -3,8 +3,7 @@ display: table; padding: 10px; width: 90%; - margin: auto; - margin-top: 5px; + margin: 5px auto 10px; min-height: 100px; border: 1px solid transparent; border-color: var(--notebook-link-border-color, transparent); diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml index 6522721bae..574579b410 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml @@ -5,7 +5,6 @@ t-name="web.FsImageRelationDndUploadField" t-inherit="web.X2ManyField" t-inherit-mode="primary" - owl="1" > diff --git a/fs_base_multi_image/views/fs_image_relation_mixin.xml b/fs_base_multi_image/views/fs_image_relation_mixin.xml index 802d82ab0c..d8b8e8f486 100644 --- a/fs_base_multi_image/views/fs_image_relation_mixin.xml +++ b/fs_base_multi_image/views/fs_image_relation_mixin.xml @@ -14,22 +14,19 @@ class="oe_avatar" options="{'preview_image': 'image_medium', 'zoom': true}" readonly="1" - attrs="{'invisible': [('link_existing', '=', False)]}" + invisible="not link_existing" /> - + From ffed75921fcaef9cf829c7e4058ec5aa658b9db1 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 3 May 2024 07:55:42 +0000 Subject: [PATCH 27/38] [UPD] Update fs_base_multi_image.pot --- .../i18n/fs_base_multi_image.pot | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/fs_base_multi_image/i18n/fs_base_multi_image.pot b/fs_base_multi_image/i18n/fs_base_multi_image.pot index d19608beef..702619850c 100644 --- a/fs_base_multi_image/i18n/fs_base_multi_image.pot +++ b/fs_base_multi_image/i18n/fs_base_multi_image.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" @@ -95,11 +95,6 @@ msgstr "" msgid "Image medium" msgstr "" -#. module: fs_base_multi_image -#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update -msgid "Last Modified on" -msgstr "" - #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_uid msgid "Last Updated by" @@ -188,6 +183,20 @@ msgstr "" msgid "click here" msgstr "" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "fs_image" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "specific" +msgstr "" + #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 From ac8a932ed0bd68d901c8fe0a70804699e124514a Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 3 May 2024 07:57:55 +0000 Subject: [PATCH 28/38] [BOT] post-merge updates --- fs_base_multi_image/README.rst | 2 +- fs_base_multi_image/static/description/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fs_base_multi_image/README.rst b/fs_base_multi_image/README.rst index 798d4636af..559846877c 100644 --- a/fs_base_multi_image/README.rst +++ b/fs_base_multi_image/README.rst @@ -7,7 +7,7 @@ Fs Base Multi Image !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ad3bbeac958b6632a99fed3772704d6ac955048fc5657b64fdb3dd63e12e73f8 + !! source digest: sha256:0c66d7a624a425811316a3e7f2456887b2d4893d87fb417a80fbe25102abc44f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/fs_base_multi_image/static/description/index.html b/fs_base_multi_image/static/description/index.html index 381e3817cc..de1195ee76 100644 --- a/fs_base_multi_image/static/description/index.html +++ b/fs_base_multi_image/static/description/index.html @@ -366,7 +366,7 @@

Fs Base Multi Image

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:ad3bbeac958b6632a99fed3772704d6ac955048fc5657b64fdb3dd63e12e73f8 +!! source digest: sha256:0c66d7a624a425811316a3e7f2456887b2d4893d87fb417a80fbe25102abc44f !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This addon is a technical addon providing a set of models to ease the From 81970cbbbaac3171737084be39f2b2fef7ac5677 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 3 May 2024 11:10:52 +0000 Subject: [PATCH 29/38] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: storage-17.0/storage-17.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-17-0/storage-17-0-fs_base_multi_image/ --- fs_base_multi_image/i18n/es.po | 22 +++++++++++++++++----- fs_base_multi_image/i18n/fr.po | 19 ++++++++++++++----- fs_base_multi_image/i18n/it.po | 22 +++++++++++++++++----- 3 files changed, 48 insertions(+), 15 deletions(-) diff --git a/fs_base_multi_image/i18n/es.po b/fs_base_multi_image/i18n/es.po index 8ec4742f52..d629263c7a 100644 --- a/fs_base_multi_image/i18n/es.po +++ b/fs_base_multi_image/i18n/es.po @@ -98,11 +98,6 @@ msgstr "Relación de Imágenes" msgid "Image medium" msgstr "Imagen mediana" -#. module: fs_base_multi_image -#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update -msgid "Last Modified on" -msgstr "Última Modificación el" - #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_uid msgid "Last Updated by" @@ -191,6 +186,20 @@ msgstr "Usted debe establecer una imagen" msgid "click here" msgstr "pulse aquí" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "fs_image" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "specific" +msgstr "" + #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 @@ -198,6 +207,9 @@ msgstr "pulse aquí" msgid "to select image files." msgstr "para seleccionar archivos de imagen." +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" + #, python-format #~ msgid "Cannot set image on a linked image" #~ msgstr "No se puede establecer la imagen en una imagen vinculada" diff --git a/fs_base_multi_image/i18n/fr.po b/fs_base_multi_image/i18n/fr.po index acde25a4c6..7339c625a9 100644 --- a/fs_base_multi_image/i18n/fr.po +++ b/fs_base_multi_image/i18n/fr.po @@ -98,11 +98,6 @@ msgstr "" msgid "Image medium" msgstr "Image moyenne" -#. module: fs_base_multi_image -#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update -msgid "Last Modified on" -msgstr "" - #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_uid msgid "Last Updated by" @@ -193,6 +188,20 @@ msgstr "Vous devez définir une image" msgid "click here" msgstr "cliquez ici" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "fs_image" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "specific" +msgstr "" + #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 diff --git a/fs_base_multi_image/i18n/it.po b/fs_base_multi_image/i18n/it.po index b3c250495f..44c460a86b 100644 --- a/fs_base_multi_image/i18n/it.po +++ b/fs_base_multi_image/i18n/it.po @@ -98,11 +98,6 @@ msgstr "Relazione immagine" msgid "Image medium" msgstr "Immagine media" -#. module: fs_base_multi_image -#: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - #. module: fs_base_multi_image #: model:ir.model.fields,field_description:fs_base_multi_image.field_fs_image__write_uid msgid "Last Updated by" @@ -191,6 +186,20 @@ msgstr "Bisogna impostare una immagine" msgid "click here" msgstr "fare clic qui" +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "fs_image" +msgstr "" + +#. module: fs_base_multi_image +#. odoo-javascript +#: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 +#, python-format +msgid "specific" +msgstr "" + #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 @@ -198,6 +207,9 @@ msgstr "fare clic qui" msgid "to select image files." msgstr "per selezionare file immagine." +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" + #, python-format #~ msgid "Cannot set image on a linked image" #~ msgstr "Non si può impostare una immagin in una immagine collegata" From af24de84dbe1bafb741fb3610d9f091b2a2e4ac6 Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 3 May 2024 13:54:24 +0000 Subject: [PATCH 30/38] Translated using Weblate (Italian) Currently translated at 100.0% (33 of 33 strings) Translation: storage-17.0/storage-17.0-fs_base_multi_image Translate-URL: https://translation.odoo-community.org/projects/storage-17-0/storage-17-0-fs_base_multi_image/it/ --- fs_base_multi_image/i18n/it.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs_base_multi_image/i18n/it.po b/fs_base_multi_image/i18n/it.po index 44c460a86b..2784e1995b 100644 --- a/fs_base_multi_image/i18n/it.po +++ b/fs_base_multi_image/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-02-01 07:22+0000\n" +"PO-Revision-Date: 2024-05-03 16:34+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -191,14 +191,14 @@ msgstr "fare clic qui" #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "fs_image" -msgstr "" +msgstr "fs_image" #. module: fs_base_multi_image #. odoo-javascript #: code:addons/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml:0 #, python-format msgid "specific" -msgstr "" +msgstr "specifica" #. module: fs_base_multi_image #. odoo-javascript From 86b7def3bf0d562a1e3a1691f4cc592be7905d8d Mon Sep 17 00:00:00 2001 From: Benjamin Willig Date: Mon, 29 Jan 2024 16:31:43 +0100 Subject: [PATCH 31/38] [CHG] use list.addNew to add relation records instead of calling the ORM explicitely --- .../models/fs_image_relation_mixin.py | 14 ++-- .../fs_image_relation_dnd_upload.esm.js | 67 ++++++++++--------- .../views/fs_image_relation_mixin.xml | 4 +- 3 files changed, 48 insertions(+), 37 deletions(-) diff --git a/fs_base_multi_image/models/fs_image_relation_mixin.py b/fs_base_multi_image/models/fs_image_relation_mixin.py index bb6ebfeba4..c934ca3281 100644 --- a/fs_base_multi_image/models/fs_image_relation_mixin.py +++ b/fs_base_multi_image/models/fs_image_relation_mixin.py @@ -82,12 +82,14 @@ def _inverse_image(self): @api.model def _cleanup_vals(self, vals): - if ( - "link_existing" in vals - and vals["link_existing"] - and "specific_image" in vals - ): - vals["specific_image"] = False + link_existing = vals.get("link_existing") + if link_existing: + if "specific_image" in vals: + vals.pop("specific_image") + if "image" in vals: + # image is set when using the kanban renderer so it + # prevents the name field to be computed well + vals.pop("image") return vals @api.model_create_multi diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js index 7d0aed7446..984f169d6f 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js @@ -4,10 +4,20 @@ import {X2ManyField, x2ManyField} from "@web/views/fields/x2many/x2many_field"; import {onWillRender, useRef, useState} from "@odoo/owl"; import {registry} from "@web/core/registry"; +import {useX2ManyCrud} from "@web/views/fields/relational_utils"; + export class FsImageRelationDndUploadField extends X2ManyField { + /** + * When using this widget, displayed image relation views must contains + * following fields: + * - sequence + * - image_id + * - specific_image + * - link_existing + */ setup() { super.setup(); - this.relationField = this.field.relation_field; + this.options = this.activeField.options; this.defaultTarget = this.props.crudOptions.target || "specific"; this.state = useState({ dragging: false, @@ -16,6 +26,8 @@ export class FsImageRelationDndUploadField extends X2ManyField { this.fileInput = useRef("fileInput"); this.defaultSequence = 0; + this.operations = useX2ManyCrud(() => this.list, this.isMany2Many); + onWillRender(() => { this.initDefaultSequence(); }); @@ -25,6 +37,10 @@ export class FsImageRelationDndUploadField extends X2ManyField { return this.state.target; } + get relationRecordId() { + return this.props.record.data.id; + } + get displayDndZone() { const activeActions = this.activeActions; return ( @@ -89,18 +105,15 @@ export class FsImageRelationDndUploadField extends X2ManyField { async uploadFsImage(imagesDesc) { const self = this; - const createValues = []; self.env.model.orm .call("fs.image", "create", [imagesDesc]) .then((fsImageIds) => { let values = {}; $.each(fsImageIds, (i, fsImageId) => { values = self.getFsImageRelationValues(fsImageId); - createValues.push(values); + self.createFieldRelationRecords(values); }); - }) - .then(() => { - self.createFieldRelationRecords(createValues); + self.env.services.ui.unblock(); }) .catch(() => { self.displayUploadError(); @@ -120,8 +133,8 @@ export class FsImageRelationDndUploadField extends X2ManyField { getFsImageRelationValues(fsImageId) { let values = { - image_id: fsImageId, - link_existing: true, + default_image_id: fsImageId, + default_link_existing: true, }; values = {...values, ...this.getRelationCommonValues()}; return values; @@ -129,40 +142,34 @@ export class FsImageRelationDndUploadField extends X2ManyField { async uploadSpecificImage(imagesDesc) { const self = this; - const createValues = []; $.each(imagesDesc, (i, imageDesc) => { - createValues.push(self.getSpecificImageRelationValues(imageDesc)); + self.createFieldRelationRecords( + self.getSpecificImageRelationValues(imageDesc) + ); }); - self.createFieldRelationRecords(createValues); + self.env.services.ui.unblock(); } getSpecificImageRelationValues(imageDesc) { - return {...imageDesc, ...this.getRelationCommonValues()}; + return { + ...this.getRelationCommonValues(), + default_specific_image: imageDesc.image, + }; } getRelationCommonValues() { - const values = { - sequence: this.getNewSequence(), + return { + default_sequence: this.getNewSequence(), }; - values[this.relationField] = this.props.record.data.id; - return values; } async createFieldRelationRecords(createValues) { - const self = this; - const model = self.env.model; - model.orm - .call(self.field.relation, "create", [createValues]) - .then(() => { - model.root.load(); - model.root.save(); - }) - .then(() => { - self.env.services.ui.unblock(); - }) - .catch(() => { - self.displayUploadError(); - }); + await this.list.addNewRecord({ + position: "bottom", + context: createValues, + mode: "readonly", + allowWarning: true, + }); } async uploadImages(files) { diff --git a/fs_base_multi_image/views/fs_image_relation_mixin.xml b/fs_base_multi_image/views/fs_image_relation_mixin.xml index d8b8e8f486..35ba648925 100644 --- a/fs_base_multi_image/views/fs_image_relation_mixin.xml +++ b/fs_base_multi_image/views/fs_image_relation_mixin.xml @@ -42,8 +42,10 @@ - + + +

From 44d83f705eb34f0fb19316e92fa2820f56a0b4f7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 28 Oct 2024 09:11:44 +0000 Subject: [PATCH 32/38] [BOT] post-merge updates --- fs_base_multi_image/README.rst | 2 +- fs_base_multi_image/__manifest__.py | 2 +- fs_base_multi_image/static/description/index.html | 13 ++++++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/fs_base_multi_image/README.rst b/fs_base_multi_image/README.rst index 559846877c..3d65ab4bab 100644 --- a/fs_base_multi_image/README.rst +++ b/fs_base_multi_image/README.rst @@ -7,7 +7,7 @@ Fs Base Multi Image !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:0c66d7a624a425811316a3e7f2456887b2d4893d87fb417a80fbe25102abc44f + !! source digest: sha256:3dfa2fad49331a437e4446272f0ba7166b5e39ee12cc1cac27dc4ed70aff155e !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/fs_base_multi_image/__manifest__.py b/fs_base_multi_image/__manifest__.py index 8d663bfd95..b40afd2200 100644 --- a/fs_base_multi_image/__manifest__.py +++ b/fs_base_multi_image/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Base Multi Image", "summary": """ Mulitple Images from External File System""", - "version": "17.0.1.0.0", + "version": "17.0.1.0.1", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", diff --git a/fs_base_multi_image/static/description/index.html b/fs_base_multi_image/static/description/index.html index de1195ee76..7ee10b07c0 100644 --- a/fs_base_multi_image/static/description/index.html +++ b/fs_base_multi_image/static/description/index.html @@ -8,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -274,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -300,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -366,7 +367,7 @@

Fs Base Multi Image

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:0c66d7a624a425811316a3e7f2456887b2d4893d87fb417a80fbe25102abc44f +!! source digest: sha256:3dfa2fad49331a437e4446272f0ba7166b5e39ee12cc1cac27dc4ed70aff155e !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This addon is a technical addon providing a set of models to ease the @@ -446,7 +447,9 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +Odoo Community Association +

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

From 2aad57566c489d62bf568d4ef28a5ed8b8d4dd3c Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Wed, 19 Feb 2025 16:45:30 +0100 Subject: [PATCH 33/38] [IMP] fs_base_multi_image: pre-commit autofixes --- fs_base_multi_image/security/fs_image.xml | 2 -- .../fs_image_relation_dnd_upload.xml | 32 +++++++++---------- fs_base_multi_image/views/fs_image.xml | 2 -- .../views/fs_image_relation_mixin.xml | 6 ++-- 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/fs_base_multi_image/security/fs_image.xml b/fs_base_multi_image/security/fs_image.xml index b976e34f28..76277a4240 100644 --- a/fs_base_multi_image/security/fs_image.xml +++ b/fs_base_multi_image/security/fs_image.xml @@ -2,7 +2,6 @@ - fs.image access read @@ -22,5 +21,4 @@ - diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml index 574579b410..3102ab56bd 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml @@ -18,9 +18,9 @@
You can drag and drop images to create new records or click here to select image files. + href="#" + t-on-click="onClickSelectDocuments" + >click here to select image files.
@@ -28,19 +28,19 @@
Choose how you want to store the new images: + name="fs_image_target" + t-on-change="onChangeImageTarget" + class="o_input pe-3" + > + + +
- fs.image.form (in fs_base_multi_image) fs.image @@ -73,5 +72,4 @@ - diff --git a/fs_base_multi_image/views/fs_image_relation_mixin.xml b/fs_base_multi_image/views/fs_image_relation_mixin.xml index 35ba648925..192c615e88 100644 --- a/fs_base_multi_image/views/fs_image_relation_mixin.xml +++ b/fs_base_multi_image/views/fs_image_relation_mixin.xml @@ -2,14 +2,13 @@ - fs.image.relation.mixin.form fs.image.relation.mixin
- - +
@@ -70,5 +69,4 @@
-
From 9b1b5dd30c55cae02f2b54921f070ac45dc4aea3 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Wed, 19 Feb 2025 18:25:51 +0100 Subject: [PATCH 34/38] [MIG] fs_base_multi_image: Migration to 18.0 --- fs_base_multi_image/README.rst | 39 ++++++++++--------- fs_base_multi_image/__manifest__.py | 3 +- fs_base_multi_image/readme/CONTRIBUTORS.md | 1 + .../static/description/index.html | 11 +++--- .../fs_image_relation_dnd_upload.esm.js | 3 +- fs_base_multi_image/views/fs_image.xml | 4 +- .../views/fs_image_relation_mixin.xml | 2 +- 7 files changed, 32 insertions(+), 31 deletions(-) diff --git a/fs_base_multi_image/README.rst b/fs_base_multi_image/README.rst index 3d65ab4bab..7389455245 100644 --- a/fs_base_multi_image/README.rst +++ b/fs_base_multi_image/README.rst @@ -17,13 +17,13 @@ Fs Base Multi Image :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstorage-lightgray.png?logo=github - :target: https://github.com/OCA/storage/tree/17.0/fs_base_multi_image + :target: https://github.com/OCA/storage/tree/18.0/fs_base_multi_image :alt: OCA/storage .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/storage-17-0/storage-17-0-fs_base_multi_image + :target: https://translation.odoo-community.org/projects/storage-18-0/storage-18-0-fs_base_multi_image :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/storage&target_branch=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| @@ -34,16 +34,16 @@ stored into external filesystems. The models provided by this addon are: -- ``fs.image``: a model that stores a reference to an image stored into - an external filesystem. -- ``fs.image.relation.mixin``: an abstract model that can be used to as - base class for models created to store an image linked to a model. - This abstract model defines fields and methods to transparently - handle 2 cases: +- ``fs.image``: a model that stores a reference to an image stored into + an external filesystem. +- ``fs.image.relation.mixin``: an abstract model that can be used to as + base class for models created to store an image linked to a model. + This abstract model defines fields and methods to transparently handle + 2 cases: - - the image is specific to the model. - - the image is shared between multiple models and therefore is a - ``fs.image`` instance linked to the mixin. + - the image is specific to the model. + - the image is shared between multiple models and therefore is a + ``fs.image`` instance linked to the mixin. .. IMPORTANT:: This is an alpha version, the data model and design can change at any time without warning. @@ -65,9 +65,9 @@ authenticated user, you can only view the shared images. Known issues / Roadmap ====================== -- Add dedicated widget to ease the addition of new images to a model - linked to multiple images. (As it's the case in the - *storage_image_product* addon) +- Add dedicated widget to ease the addition of new images to a model + linked to multiple images. (As it's the case in the + *storage_image_product* addon) Bug Tracker =========== @@ -75,7 +75,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. @@ -90,8 +90,9 @@ Authors Contributors ------------ -- Laurent Mignon -- Nguyen Minh Chien +- Laurent Mignon +- Nguyen Minh Chien +- Denis Roussel < Maintainers ----------- @@ -114,6 +115,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_base_multi_image/__manifest__.py b/fs_base_multi_image/__manifest__.py index b40afd2200..2d3331d506 100644 --- a/fs_base_multi_image/__manifest__.py +++ b/fs_base_multi_image/__manifest__.py @@ -5,7 +5,7 @@ "name": "Fs Base Multi Image", "summary": """ Mulitple Images from External File System""", - "version": "17.0.1.0.1", + "version": "18.0.1.0.0", "license": "AGPL-3", "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/storage", @@ -28,7 +28,6 @@ "fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.xml", ], }, - "demo": [], "maintainers": ["lmignon"], "development_status": "Alpha", } diff --git a/fs_base_multi_image/readme/CONTRIBUTORS.md b/fs_base_multi_image/readme/CONTRIBUTORS.md index da20decb6f..876ad70476 100644 --- a/fs_base_multi_image/readme/CONTRIBUTORS.md +++ b/fs_base_multi_image/readme/CONTRIBUTORS.md @@ -1,2 +1,3 @@ - Laurent Mignon \<\> - Nguyen Minh Chien \<\> +- Denis Roussel \< diff --git a/fs_base_multi_image/static/description/index.html b/fs_base_multi_image/static/description/index.html index 7ee10b07c0..06e8868752 100644 --- a/fs_base_multi_image/static/description/index.html +++ b/fs_base_multi_image/static/description/index.html @@ -369,7 +369,7 @@

Fs Base Multi Image

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:3dfa2fad49331a437e4446272f0ba7166b5e39ee12cc1cac27dc4ed70aff155e !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

This addon is a technical addon providing a set of models to ease the creation of other models that need to be linked to multiple images stored into external filesystems.

@@ -379,8 +379,8 @@

Fs Base Multi Image

an external filesystem.
  • fs.image.relation.mixin: an abstract model that can be used to as base class for models created to store an image linked to a model. -This abstract model defines fields and methods to transparently -handle 2 cases:
      +This abstract model defines fields and methods to transparently handle +2 cases:
      • the image is specific to the model.
      • the image is shared between multiple models and therefore is a fs.image instance linked to the mixin.
      • @@ -426,7 +426,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.

  • @@ -442,6 +442,7 @@

    Contributors

    @@ -455,7 +456,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.

    diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js index 984f169d6f..99626d2172 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module **/ - import {X2ManyField, x2ManyField} from "@web/views/fields/x2many/x2many_field"; import {onWillRender, useRef, useState} from "@odoo/owl"; import {registry} from "@web/core/registry"; @@ -181,6 +179,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { return; } const filePromise = new Promise(function (resolve) { + /* global FileReader */ const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (upload) { diff --git a/fs_base_multi_image/views/fs_image.xml b/fs_base_multi_image/views/fs_image.xml index 88ec7d3dc8..9fc0574e0c 100644 --- a/fs_base_multi_image/views/fs_image.xml +++ b/fs_base_multi_image/views/fs_image.xml @@ -51,11 +51,11 @@ fs.image.tree (in fs_base_multi_image) fs.image - + - +
    diff --git a/fs_base_multi_image/views/fs_image_relation_mixin.xml b/fs_base_multi_image/views/fs_image_relation_mixin.xml index 192c615e88..72fcb1b764 100644 --- a/fs_base_multi_image/views/fs_image_relation_mixin.xml +++ b/fs_base_multi_image/views/fs_image_relation_mixin.xml @@ -46,7 +46,7 @@ - +
    Date: Wed, 19 Feb 2025 18:28:22 +0100 Subject: [PATCH 35/38] [DONT MERGE] test-requirements.txt --- test-requirements.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 test-requirements.txt diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000000..00ccf22009 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,4 @@ +odoo_test_helper + +odoo-addon-fs-file @ git+https://github.com/OCA/storage.git@refs/pull/445/head#subdirectory=fs_file +odoo-addon-fs-image @ git+https://github.com/OCA/storage.git@refs/pull/446/head#subdirectory=fs_image From 3affe97621d4be2e071c50f4e88870a1c287cd89 Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Thu, 20 Feb 2025 10:38:35 +0100 Subject: [PATCH 36/38] [FIX] fs_base_multi_image: Call correct method name --- fs_base_multi_image/models/fs_image_relation_mixin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs_base_multi_image/models/fs_image_relation_mixin.py b/fs_base_multi_image/models/fs_image_relation_mixin.py index c934ca3281..d2bf6e736f 100644 --- a/fs_base_multi_image/models/fs_image_relation_mixin.py +++ b/fs_base_multi_image/models/fs_image_relation_mixin.py @@ -55,7 +55,7 @@ def _compute_name(self): record.name = record.image.name if record.image else None @api.depends("image") - def _compute_mimetypes(self): + def _compute_mimetype(self): for record in self: record.mimetype = record.image.mimetype if record.image else None From a4c96d132cb5e0ef9fc755d4573d9ff98e1d8bdd Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Thu, 20 Feb 2025 10:39:52 +0100 Subject: [PATCH 37/38] [IMP] fs_base_multi_image: Add tests --- fs_base_multi_image/tests/__init__.py | 1 + fs_base_multi_image/tests/models.py | 32 +++++ .../tests/test_base_multi_image.py | 115 ++++++++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 fs_base_multi_image/tests/__init__.py create mode 100644 fs_base_multi_image/tests/models.py create mode 100644 fs_base_multi_image/tests/test_base_multi_image.py diff --git a/fs_base_multi_image/tests/__init__.py b/fs_base_multi_image/tests/__init__.py new file mode 100644 index 0000000000..7085f0055c --- /dev/null +++ b/fs_base_multi_image/tests/__init__.py @@ -0,0 +1 @@ +from . import test_base_multi_image diff --git a/fs_base_multi_image/tests/models.py b/fs_base_multi_image/tests/models.py new file mode 100644 index 0000000000..39a8db4567 --- /dev/null +++ b/fs_base_multi_image/tests/models.py @@ -0,0 +1,32 @@ +# Copyright 2023 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + +from odoo.addons.fs_image.fields import FSImage + + +class TestModel(models.Model): + _name = "test.model" + _description = "Test Model" + _log_access = False + + image_ids = fields.One2many( + string="Images", + comodel_name="fs.relation.model.image", + inverse_name="relation_model_id", + ) + image = FSImage(related="image_ids.image", readonly=True, store=False) + image_medium = FSImage(related="image_ids.image_medium", readonly=True, store=False) + + +class FsRelationModelImage(models.Model): + _name = "fs.relation.model.image" + _inherit = "fs.image.relation.mixin" + _description = "Relation Model Image" + + relation_model_id = fields.Many2one( + comodel_name="test.model", + string="Test Model", + ondelete="cascade", + ) diff --git a/fs_base_multi_image/tests/test_base_multi_image.py b/fs_base_multi_image/tests/test_base_multi_image.py new file mode 100644 index 0000000000..ee19146673 --- /dev/null +++ b/fs_base_multi_image/tests/test_base_multi_image.py @@ -0,0 +1,115 @@ +# Copyright 2025 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import base64 +import io +import os +import tempfile + +from odoo_test_helper import FakeModelLoader +from PIL import Image + +from odoo.addons.base.tests.common import BaseCommon +from odoo.addons.fs_image.fields import FSImageValue + + +class TestBaseMultiImage(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env["ir.config_parameter"].set_param( + "base.image_autoresize_max_px", "10000x10000" + ) + cls.loader = FakeModelLoader(cls.env, cls.__module__) + cls.loader.backup_registry() + from .models import FsRelationModelImage, TestModel + + cls.loader.update_registry((TestModel, FsRelationModelImage)) + cls.image_w = cls._create_image(4000, 2000) + cls.image_h = cls._create_image(2000, 4000) + + cls.create_content = cls.image_w + cls.write_content = cls.image_h + cls.tmpfile_path = tempfile.mkstemp(suffix=".png")[1] + with open(cls.tmpfile_path, "wb") as f: + f.write(cls.create_content) + cls.filename = os.path.basename(cls.tmpfile_path) + + cls.image_white = cls.env["fs.image"].create( + { + "image": { + "filename": "white.png", + "content": base64.b64encode(cls.image_w), + } + } + ) + + @classmethod + def _create_file(cls): + cls.tmpfile_path = tempfile.mkstemp(suffix=".png")[1] + with open(cls.tmpfile_path, "wb") as f: + f.write(cls.create_content) + cls.filename = os.path.basename(cls.tmpfile_path) + + @classmethod + def tearDownClass(cls): + if os.path.exists(cls.tmpfile_path): + os.remove(cls.tmpfile_path) + cls.loader.restore_registry() + return super().tearDownClass() + + @classmethod + def _create_image(cls, width, height, color="#4169E1", img_format="PNG"): + f = io.BytesIO() + Image.new("RGB", (width, height), color).save(f, img_format) + f.seek(0) + return f.read() + + def test_base_relation_image(self): + instance = self.env["test.model"].create({}) + self.env["fs.relation.model.image"].create( + { + "relation_model_id": instance.id, + "specific_image": { + "filename": "white.png", + "content": base64.b64encode(self.image_w), + }, + } + ) + self.assertEqual(1, len(instance.image_ids)) + self.assertEqual("white.png", instance.image_ids.name) + self.assertEqual("image/png", instance.image_ids.mimetype) + + self.assertTrue(instance.image_ids.image_medium) + self.assertEqual( + instance.image_ids.specific_image_medium, instance.image_ids.image_medium + ) + + # Change image and check specific image is set + new_image = self._create_image(2000, 6000) + self.create_content = new_image + self._create_file() + new_image_value = FSImageValue(name=self.filename, value=self.create_content) + instance.image_ids.image = new_image_value + instance.image_ids.invalidate_recordset() + self.assertEqual(instance.image_ids.image, instance.image_ids.specific_image) + + instance.image_ids.write( + { + "specific_image": False, + "link_existing": True, + "image": False, + } + ) + self.assertTrue(instance.image_ids.specific_image) + self.assertFalse(instance.image_ids.image) + + def test_base_relation_image_id(self): + instance = self.env["test.model"].create({}) + self.env["fs.relation.model.image"].create( + { + "relation_model_id": instance.id, + "image_id": self.image_white.id, + } + ) + self.assertEqual("white.png", instance.image_ids.image_id.name) + self.assertFalse(instance.image_ids.image_id.mimetype) From 641ef9f5d190a0bb30b266bba4fa55f14bb478ed Mon Sep 17 00:00:00 2001 From: Denis Roussel Date: Thu, 20 Feb 2025 19:31:04 +0100 Subject: [PATCH 38/38] [FIX] fs_base_multi_image: Use correct syntax --- .../fs_image_relation_dnd_upload.esm.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js index 99626d2172..92499926a2 100644 --- a/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js +++ b/fs_base_multi_image/static/src/fields/fs_image_relation_dnd_upload/fs_image_relation_dnd_upload.esm.js @@ -49,7 +49,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { initDefaultSequence() { let sequence = 0; - $.each(this.props.record.data[this.props.name].records, (i, record) => { + this.props.record.data[this.props.name].records?.forEach((record) => { sequence = record.data.sequence; if (sequence >= this.defaultSequence) { this.defaultSequence = sequence + 1; @@ -107,7 +107,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { .call("fs.image", "create", [imagesDesc]) .then((fsImageIds) => { let values = {}; - $.each(fsImageIds, (i, fsImageId) => { + fsImageIds?.forEach((fsImageId) => { values = self.getFsImageRelationValues(fsImageId); self.createFieldRelationRecords(values); }); @@ -140,7 +140,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { async uploadSpecificImage(imagesDesc) { const self = this; - $.each(imagesDesc, (i, imageDesc) => { + imagesDesc?.forEach((imageDesc) => { self.createFieldRelationRecords( self.getSpecificImageRelationValues(imageDesc) ); @@ -174,7 +174,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { const self = this; const promises = []; this.env.services.ui.block(); - $.each(files, function (i, file) { + Array.from(files).forEach((file) => { if (!file.type.includes("image")) { return; } @@ -192,7 +192,7 @@ export class FsImageRelationDndUploadField extends X2ManyField { }); return Promise.all(promises).then(function (fileContents) { const imagesDesc = []; - $.each(fileContents, function (i, fileContent) { + fileContents?.forEach((fileContent) => { imagesDesc.push(self.getFileImageDesc(fileContent)); }); if (imagesDesc.length > 0) {