From 0de1cae3b00410f78545108a4074756274614fae Mon Sep 17 00:00:00 2001 From: FrankC013 Date: Thu, 22 Feb 2024 15:08:24 +0100 Subject: [PATCH 1/4] [ADD] product_multi_unique_barcode: new module --- product_multi_unique_barcode/README.rst | 64 +++ product_multi_unique_barcode/__init__.py | 1 + product_multi_unique_barcode/__manifest__.py | 15 + .../models/__init__.py | 1 + .../models/product_barcode.py | 69 +++ .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 6342 bytes .../static/description/index.html | 421 ++++++++++++++++++ 9 files changed, 576 insertions(+) create mode 100644 product_multi_unique_barcode/README.rst create mode 100644 product_multi_unique_barcode/__init__.py create mode 100644 product_multi_unique_barcode/__manifest__.py create mode 100644 product_multi_unique_barcode/models/__init__.py create mode 100644 product_multi_unique_barcode/models/product_barcode.py create mode 100644 product_multi_unique_barcode/readme/CONTRIBUTORS.rst create mode 100644 product_multi_unique_barcode/readme/DESCRIPTION.rst create mode 100644 product_multi_unique_barcode/static/description/icon.png create mode 100644 product_multi_unique_barcode/static/description/index.html diff --git a/product_multi_unique_barcode/README.rst b/product_multi_unique_barcode/README.rst new file mode 100644 index 000000000..2cdc7797b --- /dev/null +++ b/product_multi_unique_barcode/README.rst @@ -0,0 +1,64 @@ +============================ +Product Multi Unique Barcode +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:ba899fd5e28c69ce2455c1be7d37613f05c0877a091a1452ff03e0adff65cd2a + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-NuoBiT%2Fodoo--addons-lightgray.png?logo=github + :target: https://github.com/NuoBiT/odoo-addons/tree/14.0/product_multi_unique_barcode + :alt: NuoBiT/odoo-addons + +|badge1| |badge2| |badge3| + +Glue module between product_unique_barcode and product_multi_barcode + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* NuoBiT Solutions +* S.L. + +Contributors +~~~~~~~~~~~~ + +* `NuoBiT `_: + + * Eric Antones + * Frank Cespedes + +Maintainers +~~~~~~~~~~~ + +This module is part of the `NuoBiT/odoo-addons `_ project on GitHub. + +You are welcome to contribute. diff --git a/product_multi_unique_barcode/__init__.py b/product_multi_unique_barcode/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/product_multi_unique_barcode/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_multi_unique_barcode/__manifest__.py b/product_multi_unique_barcode/__manifest__.py new file mode 100644 index 000000000..8cb6353a4 --- /dev/null +++ b/product_multi_unique_barcode/__manifest__.py @@ -0,0 +1,15 @@ +# Copyright 2024 NuoBiT Solutions S.L. - Eric Antones +# Copyright 2024 NuoBiT Solutions S.L. - Frank Cespedes +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +{ + "name": "Product Multi Unique Barcode", + "summary": "Glue module between product_unique_barcode and product_multi_barcode", + "version": "14.0.1.0.0", + "category": "Product Management", + "author": "NuoBiT Solutions, S.L.", + "website": "https://github.com/nuobit/odoo-addons", + "license": "AGPL-3", + "depends": ["product_unique_barcode", "product_multi_barcode"], + "auto_install": True, +} diff --git a/product_multi_unique_barcode/models/__init__.py b/product_multi_unique_barcode/models/__init__.py new file mode 100644 index 000000000..940ac3279 --- /dev/null +++ b/product_multi_unique_barcode/models/__init__.py @@ -0,0 +1 @@ +from . import product_barcode diff --git a/product_multi_unique_barcode/models/product_barcode.py b/product_multi_unique_barcode/models/product_barcode.py new file mode 100644 index 000000000..db7c58725 --- /dev/null +++ b/product_multi_unique_barcode/models/product_barcode.py @@ -0,0 +1,69 @@ +# Copyright 2024 NuoBiT Solutions S.L. - Eric Antones +# Copyright 2024 NuoBiT Solutions S.L. - Frank Cespedes +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import api, fields, models +from odoo.exceptions import UserError, ValidationError +from odoo.tools.translate import _ + + +class ProductBarcode(models.Model): + _inherit = "product.barcode" + + company_id = fields.Many2one( + comodel_name="res.company", + compute="_compute_company_id", + store=True, + readonly=True, + required=True, + ) + + @api.depends("product_id.company_id", "product_tmpl_id.company_id") + def _compute_company_id(self): + for rec in self: + if rec.product_id and rec.product_tmpl_id: + if rec.product_id.company_id != rec.product_tmpl_id.company_id: + raise ValidationError( + _( + "The product %(product)s and its template %(template) " + "have different companies" + ) + % dict( + product=rec.product_id.display_name, + template=rec.product_tmpl_id.display_name, + ) + ) + if rec.product_id and rec.product_id.company_id: + rec.company_id = rec.product_id.company_id + elif rec.product_tmpl_id and rec.product_tmpl_id.company_id: + rec.company_id = rec.product_tmpl_id.company_id + else: + rec.company_id = False + else: + raise ValidationError( + _("There's no link to a product or variant, cannot get the company") + ) + + @api.constrains("name", "company_id") + def _check_duplicates(self): + for rec in self: + domain = [("id", "!=", rec.id), ("name", "=", rec.name)] + if rec.company_id: + domain.append(("company_id", "in", (False, rec.company_id.id))) + others = self.search(domain) + if others: + raise UserError( + _( + 'The Barcode "%(barcode_name)s" already exists for ' + 'products: "%(product_names)s"' + ) + % dict( + barcode_name=rec.name, + product_names=", ".join( + [ + f"({x.id}) {x.display_name}" + for x in others.sudo().product_id + ] + ), + ) + ) diff --git a/product_multi_unique_barcode/readme/CONTRIBUTORS.rst b/product_multi_unique_barcode/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..e726ece35 --- /dev/null +++ b/product_multi_unique_barcode/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* `NuoBiT `_: + + * Eric Antones + * Frank Cespedes diff --git a/product_multi_unique_barcode/readme/DESCRIPTION.rst b/product_multi_unique_barcode/readme/DESCRIPTION.rst new file mode 100644 index 000000000..459c4453c --- /dev/null +++ b/product_multi_unique_barcode/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Glue module between product_unique_barcode and product_multi_barcode diff --git a/product_multi_unique_barcode/static/description/icon.png b/product_multi_unique_barcode/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd641e792c30455187ca30940bc0f329ce8bbb0 GIT binary patch literal 6342 zcmd^^hf`C}*TzHWpfm-MZa|7OjYtjE(4`3pP0Eid3J8V{0s)mKJ<q zp^9|rp$mb~2}po9-@oIXJG(oxcjoS%d!O@s&d!Z9HP*e##KQyt0IurmK_64bp8pyH z9i^|ds>-JfbWVo4P{8GX*QeIfbjl2)kDfIG0ALvZuTgp2ZfK=U();NfY11z-vM>r= zo6RyI007+P`cO@apy}VqnaiVCLL`CEUGVGYE&5WpdhhbZv%|*-Y|2t(4~Cq|y`-Nmm-W zxaTf4+R69rVU1b%qjm?yu*PFgHFYd#J82-D8cpXqO&omwG2*Hd6ZIUiK@+ zNCo8Lg{1^vn^0ZQgz*~*ZR3wsULxnnSBN%7p()3EYs>sX9In)T{*nJ2q*qxXPNhFk z=z=+?4VOOdAF!ZYAVisYzF29g?udLQJtx@=HoAK_Kjx;4SO7>H_v*McB7(}RHMa> z+PNao{Hw&Mjo0P}CBR&l(k@iIeRI@PRH6R9^lR3e?TL?ZHra#GHvKmkeVBHG8nv4{ zz$nHGR7`D$ae@TrcXCSA=$~Yvp@J|bKul>6s-`yT7>JaM5?KcltZ)(ilt^74fqLA{ z1k!bKw(GMV*AOgI*glG_($h!cZgArkEAa1SkSG`0yF8JLWTq^J->2CRaqKH1ZSQt7 z29|+OBS3Rj91K1XL~_9&zn1p z)2Ez)&{9Of1X#b+mpgJ`{gurrlYqKrwrWXTOH{M%kEUhcgSp1J2FK4FF`JS|NfaAA6)?-&1}B`@lI2~kKWK) zhQ|}GQ$j(rNS}9?Yu9}MzWxz*HMwR=u8$RYY6sr2pu3x5Yx*P!Z&c|X zFZcC{+kqJV=XTZH=cMb6)MtgWo%C~XU8TEXDKx9;0hEV*74Z6i8vuzXp zw<8QvI~;n;3@<^G0C#HHf2{N6E~2DO3jw!?w}z?_vV6Q>?kJ>IF-kEc*TtP}k7cVd zvtdPgQ^jWhMXAL$Lqn!_A_IL+!hbY37)n@Sqc)6JwD4)3LP`up1cy^EXzh>B{$ce0 zgX~Iat{I@DM|zU|>9DuD?g}h7zCqV;o1*~3Hr=DYjDq;SG?3HS)(x+l@HAa-@>5wH zhw`oqg>hP$e41h5)>$#qFWq?LGX`dC8ph`RyR&_z&og>psSHzZ=_8<-M4yk+3HK-+ zxqe%Ntx88}49jJazM_Vov;)83cSeeLv@taHOL>zP>~bqdmEyfHl9M%`@ivb|7{I;N zzyHw9P7EH0$ww52RejJv>zvSr8v*iuX@X;(Z~NuUv$D0I_>OkcZWSulBUJjHUN=n| zSI$q@$)`(E;^(|}q|2utYl8}>IcXkPX#{6Z%JnhUBly1B@B}sECm2Y88-QrQZd2n2 zKL=1_&Z87xM=GaycA-Ac*R<^bJk>-^k%lt;DjswC+AM`71*2iG?;!3Bc)I>55v)^C zkt+Uzn&dhv|58XAY6{%ybSiVMl-sATTy=SUADQWD+(@-AVqg@Y+_fBV$LJnIEfujI4B5%4a@8S4M*50Lh7NqKSW>K=U5dW@)Hd{^oR4v% zCM2(rAq7Qe-)R0ko{l@iCHGsxhkCNWby zf&gByp!>=?r1ecWMqz5e-BmOED6n!_1V4<)R!!QNwM!AyGty8>p>ebEzdp*_(kAYA z5*F^g_K}%Rm;V}4Q46qJpU+&3bU10WYg{j`T>lv9{B)J}RHC}yzy9x)wm4ju23yQ& zUNm(i_(ChqD8d7AVUFMw zXmia0A{l#}Sfq!GmHjatiTk$f|OvS0iG>W{p<8cZu^6HX`rMuX?l8<+?WVAW6 z3!MLV*VOFpd&STaeN2qdwU* zk1ni(wdh{`{hLj-hCz&59jVIp~SmgtSQDf!FrPYKIF6_c_NJr zn<-BdXVU}OSE{-No~b(6tG)250`-S%YB9Si@&}{d@FUGqjcNE@SlSdG`}H-#!~M1& z;{E-SKUBb6)KwP1XB|S8MB=F>9k$#1$|^*t%%5zq#(35~S#+TgC^oj&COt~T>axhU0t zQff{8Jt+NH^_pqPzec@Iv#L^r?qs$jdiCY&xOU2pve78Pc{a8y+D;2N0aEJe5d#uL}ZkkYQ&XA;NK5v>r@NUaj=<_V$*Ll@&CF!{LWI zh@|EE!!M(B5qeQ40YHy86TVkX6Te=v4ytV_-JnKl93#Z9clghd^lywoBtgj)4%mxKR<#pH0*hxyHFQNJ zGW`7CtD9C6)ehKni=#!gKj#ZO7L$d_i4nJZhR!z$B(rX9j$$L8X1>~^2By%Dp*IJj z8QiI6*w*|IoF{UpFaD{!PWdOxja{DQq9?BK%2(Xuh#Tv2s_ELIvb@YAd{Af)Lph(9 z>DTXZ`|*!Jnw)?`BzPrdYx(?S2&<(1>1>-f=c}gi8^)=KW973rikh?!-B$fOy@x-Rd+?x= zM(0SbmCz!gY#)CqB9J_^v4K$urOnoj|E||~D>%ndVMwe)ef3BuZH0l!Z&M@fyN}{1 zD;n{juZF|*{lehy$NlM{B`Q0Z18O|&=wX!Nt*rLKfak}ww{ zJ$9BJA3Tq4n~%w3V$0UA(+PgZ#j-35$=_xzuk(w5o2f(WOCu%+h>cg3B*aqaQdfeQ zj@VutKTWtH8{S+}vR3Z`KIQl-h!4tFi1vG-Kuh^Lb0N=LN0+1ZP!WL39=Age)HS_E z8khUbE>xA^59Nmj`B0@u0IR<04wqF@ssF4AP6ZVhslN61xT#8o@ymhOWJ5zkUQN07 zyDEYVZ4#Z$(%wnd04Y_^B_4gjFoKPWgD&OUsj^ezcuXa}E4yjc@xi#az zyRy6>?#h2*VNdNO_jYQ1{@qaYoN7moT}cnd8cmK*&R@SeSYZgIBaJklh!n-3#3dyO z!@*@06=Y8#wl9|Bj3=C0Fi!SfzVz7$Stc4_Q`K2P?2|gT!JIBhc*P&-IkB?Mb5I&% z%BN*TF#vYzIW>)|=X`Chr};G5EZXg?_yvlDC|f%AP!ty{i{{pXQnHm<^|{P$D; z9ZAW#l9Cd2($R5@*5}FeUd#l;N11WwITb1nJSm8r@`#sXHPsuq!3S2&h>U)y=3MjV;j3oWLY>5EOvuruXC*WH2G){378-0tpcMF}1(^PSWUe>XEJN%5 zl|m59cX=GC{^$_E-4Wm1=5|!;Ek&{<4lIOt5M&GMq=+JQdyt?WI#6C!)i!s4;k9T0 z{;`B*>VQ%iU)>Zbhgb4|vd=Wy4>107#gyeqi^+-^2E~0Ja&rFpRb<)oirMj4-KuLg zSo1*y98TZlD<3^A&^bRESh~S*Lzqn0l;JfX-fdjA`M#a!@?b?zWdEr3mIiqS{m2J% z3nWGoQG6+FQ~&gQF-DLGWF}WfwHL(4$EUt(5Jcx#l79K-x~qdu!_gs;XaP0`8m(8a z2J#B{UvEhLT=w9*(6bFWp{9CI=Z&Hh)e}}1hnK6fPlSYqu4H|>g|Erg5fVWl5w&~Kdf{3+V{dCaNhFDg<~sELf1dC($hw|SmSkZ zKD6>nsj6Q+aHEZDHC9{UJxPZ9y{6)F5hg5bm*}ihsxQxj~`xNo%QnaTEJn)f#{CK-H5HYAM7kK zL!XvElM^Y!yC=uSu54Gj zTEgKhtTCOqx1EcIl=VA7`!xLiUj%p*eH??_??@gOJJxVX)#(G`=31lw3whFi2Y7Mq z1bXLvi+~U5E4R{v15H@yQI@=d!V9LD&P!p?0u7L&Rg=D<<*+ zouj?2?aYI{Ac%Gx!r&EkXmmvR`!Xl?06WsGs_Ts8ojW?id!X$>C}@~q>BMfGeGohw zkR}NImw2grp7>W(5s*(iPYn$1*t@i%(W7u#6m}l)%TmD-221>N?VBna!@FO-7!xjM z{`_^-yt<@e?fK$Sqzc7O%3&~A>HB|stQr64jx(U3y+}d}vp(r7c=iB8>t~T7HmYg1qJe4SLo$e62=EZUuFS7UqbSP}M^@%aI7g!ztzj{)_R0x*X6OMLAky)_Sv&%2DNGv zxH}pEr{gEYf&ZF&RJoII9*=yd^~fxKtFc@1f_3}Vqqi8_U?;lC`7etN$3$u0dW+-%7P zQ~iX&gr(5xd1M>3yrzZav9ZLIhbS&|=U$t!9iq*i5vy)(RsBw0TU#?~zdTKUXjyIl z%7Q)Vp}YoU$acz-9y_`%Oig!%TPyC=ie3*Qut3@4V`+A4d<*f%jOx>*bX%#Ao+@wM z;NW0DZKvmp%_oxvFw2#S9r8Sc?wXh}`3gVG`rBKr&jpxwTRQ7WtKY06QQVhs$u$!e zs;Y%~2xwpH*9vxfQ~q#gAwn+P+=YE(L>|P(Fl&H27@?);kUI4FW%LjHZKYGk#f~@3 zXW;a;3+{&c`g+uCR+``$V9)N#RBCk_#RQ(K-PxlQ7Ym;XdCqGn$j%JmAwgtkWKn1} z8^>3&)Q05VbBm+t`9B_${w9F7WfM{Jvawk;HDc*{Sa_Sla|zqX!vbKV%>gB|z6BCc z8_bdnPnzloGP1I)!^5hnC6CLZUU`;nO2NF2)FaAkYhQL$Z58+`p75dj7RKse#Z!uacCm z0@|m~U!QZOdb|V~`ktFK4;lg_ZOCjFXeV4`jGj&bh7Q6BEyN8~yGd*JyzwFbIRaAf z#KG$rvQxWFvqwn`i6jBQ?6o+k+oOC)Gj9ChlgabiScr};b5|opxUYjCZOwmhjTj6W zFzJt_htTuopW4IRiQ}r0L}`w=pE{HN<@(9Hl11P5cHmN6A1F^sg2OWXcw<+q2x>I5 zq9Bu>PBob6#^vrr<|IC)m+zJpFRRcCVsqbspNybriu&!R=H^@RcG#aBGz9RH}ZI=>4 zi(m?IA?Vr$Q7?wN6ZW7H`S?3}K8=$7J5MjWKri=_igw1%J?0~*6e_Ii*1&23dGcF} z&=vaMgF!^veGQ1f$3k?WK5Jaw%==+Bb!tI6zQ68&-dQ3Orl+Tqh#Nt?dBEV_w^wkjY+qJ+X*NCMs%J-Lc4%}pKryM#O)O&9 un*HHVB-AlUN`suyDkKONktc!@Ievk;6wT20MOSqhE{1gM*SZGeqiYU literal 0 HcmV?d00001 diff --git a/product_multi_unique_barcode/static/description/index.html b/product_multi_unique_barcode/static/description/index.html new file mode 100644 index 000000000..bfb518410 --- /dev/null +++ b/product_multi_unique_barcode/static/description/index.html @@ -0,0 +1,421 @@ + + + + + + +Product Multi Unique Barcode + + + +
+

Product Multi Unique Barcode

+ + +

Beta License: AGPL-3 NuoBiT/odoo-addons

+

Glue module between product_unique_barcode and product_multi_barcode

+

Table of contents

+ +
+

Bug Tracker

+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • NuoBiT Solutions
  • +
  • S.L.
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is part of the NuoBiT/odoo-addons project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + From df17f01ce784589f52e621919b4f4d1626d8e664 Mon Sep 17 00:00:00 2001 From: ??? Date: Tue, 30 Sep 2025 14:37:32 +0200 Subject: [PATCH 2/4] [IMP] product_multi_unique_barcode: pre-commit auto fixes --- product_multi_unique_barcode/README.rst | 18 +++++++++--------- product_multi_unique_barcode/__manifest__.py | 2 +- product_multi_unique_barcode/pyproject.toml | 3 +++ .../readme/CONTRIBUTORS.md | 3 +++ .../readme/CONTRIBUTORS.rst | 4 ---- .../readme/{DESCRIPTION.rst => DESCRIPTION.md} | 0 .../static/description/index.html | 14 +++++++------- 7 files changed, 23 insertions(+), 21 deletions(-) create mode 100644 product_multi_unique_barcode/pyproject.toml create mode 100644 product_multi_unique_barcode/readme/CONTRIBUTORS.md delete mode 100644 product_multi_unique_barcode/readme/CONTRIBUTORS.rst rename product_multi_unique_barcode/readme/{DESCRIPTION.rst => DESCRIPTION.md} (100%) diff --git a/product_multi_unique_barcode/README.rst b/product_multi_unique_barcode/README.rst index 2cdc7797b..0d346ce1e 100644 --- a/product_multi_unique_barcode/README.rst +++ b/product_multi_unique_barcode/README.rst @@ -17,7 +17,7 @@ Product Multi Unique Barcode :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-NuoBiT%2Fodoo--addons-lightgray.png?logo=github - :target: https://github.com/NuoBiT/odoo-addons/tree/14.0/product_multi_unique_barcode + :target: https://github.com/NuoBiT/odoo-addons/tree/18.0/product_multi_unique_barcode :alt: NuoBiT/odoo-addons |badge1| |badge2| |badge3| @@ -35,7 +35,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. @@ -43,22 +43,22 @@ Credits ======= Authors -~~~~~~~ +------- * NuoBiT Solutions * S.L. Contributors -~~~~~~~~~~~~ +------------ -* `NuoBiT `_: +- `NuoBiT `__: - * Eric Antones - * Frank Cespedes + - Eric Antones + - Frank Cespedes Maintainers -~~~~~~~~~~~ +----------- -This module is part of the `NuoBiT/odoo-addons `_ project on GitHub. +This module is part of the `NuoBiT/odoo-addons `_ project on GitHub. You are welcome to contribute. diff --git a/product_multi_unique_barcode/__manifest__.py b/product_multi_unique_barcode/__manifest__.py index 8cb6353a4..1d1e8242c 100644 --- a/product_multi_unique_barcode/__manifest__.py +++ b/product_multi_unique_barcode/__manifest__.py @@ -8,7 +8,7 @@ "version": "14.0.1.0.0", "category": "Product Management", "author": "NuoBiT Solutions, S.L.", - "website": "https://github.com/nuobit/odoo-addons", + "website": "https://github.com/NuoBiT/odoo-addons", "license": "AGPL-3", "depends": ["product_unique_barcode", "product_multi_barcode"], "auto_install": True, diff --git a/product_multi_unique_barcode/pyproject.toml b/product_multi_unique_barcode/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/product_multi_unique_barcode/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/product_multi_unique_barcode/readme/CONTRIBUTORS.md b/product_multi_unique_barcode/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..82fd33b27 --- /dev/null +++ b/product_multi_unique_barcode/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- [NuoBiT](https://www.nuobit.com): + - Eric Antones \ + - Frank Cespedes \ diff --git a/product_multi_unique_barcode/readme/CONTRIBUTORS.rst b/product_multi_unique_barcode/readme/CONTRIBUTORS.rst deleted file mode 100644 index e726ece35..000000000 --- a/product_multi_unique_barcode/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,4 +0,0 @@ -* `NuoBiT `_: - - * Eric Antones - * Frank Cespedes diff --git a/product_multi_unique_barcode/readme/DESCRIPTION.rst b/product_multi_unique_barcode/readme/DESCRIPTION.md similarity index 100% rename from product_multi_unique_barcode/readme/DESCRIPTION.rst rename to product_multi_unique_barcode/readme/DESCRIPTION.md diff --git a/product_multi_unique_barcode/static/description/index.html b/product_multi_unique_barcode/static/description/index.html index bfb518410..9d181f237 100644 --- a/product_multi_unique_barcode/static/description/index.html +++ b/product_multi_unique_barcode/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,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. @@ -275,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 } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -369,7 +369,7 @@

Product Multi Unique Barcode

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:ba899fd5e28c69ce2455c1be7d37613f05c0877a091a1452ff03e0adff65cd2a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 NuoBiT/odoo-addons

+

Beta License: AGPL-3 NuoBiT/odoo-addons

Glue module between product_unique_barcode and product_multi_barcode

Table of contents

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

@@ -412,7 +412,7 @@

Contributors

Maintainers

-

This module is part of the NuoBiT/odoo-addons project on GitHub.

+

This module is part of the NuoBiT/odoo-addons project on GitHub.

You are welcome to contribute.

From 38670e544a289131e0d743d69b975d642a3a8177 Mon Sep 17 00:00:00 2001 From: ??? Date: Tue, 30 Sep 2025 14:40:43 +0200 Subject: [PATCH 3/4] [MIG] product_multi_unique_barcode: Migration to 18.0 --- product_multi_unique_barcode/README.rst | 8 +- product_multi_unique_barcode/__manifest__.py | 9 ++- .../models/product_barcode.py | 74 +++---------------- .../readme/CONTRIBUTORS.md | 5 +- .../static/description/index.html | 8 +- 5 files changed, 28 insertions(+), 76 deletions(-) diff --git a/product_multi_unique_barcode/README.rst b/product_multi_unique_barcode/README.rst index 0d346ce1e..eb8024dc5 100644 --- a/product_multi_unique_barcode/README.rst +++ b/product_multi_unique_barcode/README.rst @@ -45,16 +45,16 @@ Credits Authors ------- -* NuoBiT Solutions -* S.L. +* NuoBiT Solutions SL Contributors ------------ - `NuoBiT `__: - - Eric Antones - - Frank Cespedes + - Eric Antones eantones@nuobit.com + - Frank Cespedes fcespedes@nuobit.com + - Deniz Gallo dgallo@nuobit.com Maintainers ----------- diff --git a/product_multi_unique_barcode/__manifest__.py b/product_multi_unique_barcode/__manifest__.py index 1d1e8242c..404571058 100644 --- a/product_multi_unique_barcode/__manifest__.py +++ b/product_multi_unique_barcode/__manifest__.py @@ -1,13 +1,14 @@ -# Copyright 2024 NuoBiT Solutions S.L. - Eric Antones -# Copyright 2024 NuoBiT Solutions S.L. - Frank Cespedes +# Copyright 2024 NuoBiT Solutions SL - Eric Antones +# Copyright 2024 NuoBiT Solutions SL - Frank Cespedes +# Copyright 2025 NuoBiT Solutions SL - Deniz Gallo # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) { "name": "Product Multi Unique Barcode", "summary": "Glue module between product_unique_barcode and product_multi_barcode", - "version": "14.0.1.0.0", + "version": "18.0.1.0.0", "category": "Product Management", - "author": "NuoBiT Solutions, S.L.", + "author": "NuoBiT Solutions SL", "website": "https://github.com/NuoBiT/odoo-addons", "license": "AGPL-3", "depends": ["product_unique_barcode", "product_multi_barcode"], diff --git a/product_multi_unique_barcode/models/product_barcode.py b/product_multi_unique_barcode/models/product_barcode.py index db7c58725..5feb6d3d3 100644 --- a/product_multi_unique_barcode/models/product_barcode.py +++ b/product_multi_unique_barcode/models/product_barcode.py @@ -1,69 +1,19 @@ -# Copyright 2024 NuoBiT Solutions S.L. - Eric Antones -# Copyright 2024 NuoBiT Solutions S.L. - Frank Cespedes +# Copyright 2024 NuoBiT Solutions SL - Eric Antones +# Copyright 2024 NuoBiT Solutions SL - Frank Cespedes +# Copyright 2025 NuoBiT Solutions SL - Deniz Gallo # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) -from odoo import api, fields, models -from odoo.exceptions import UserError, ValidationError -from odoo.tools.translate import _ +from odoo import models class ProductBarcode(models.Model): _inherit = "product.barcode" - company_id = fields.Many2one( - comodel_name="res.company", - compute="_compute_company_id", - store=True, - readonly=True, - required=True, - ) - - @api.depends("product_id.company_id", "product_tmpl_id.company_id") - def _compute_company_id(self): - for rec in self: - if rec.product_id and rec.product_tmpl_id: - if rec.product_id.company_id != rec.product_tmpl_id.company_id: - raise ValidationError( - _( - "The product %(product)s and its template %(template) " - "have different companies" - ) - % dict( - product=rec.product_id.display_name, - template=rec.product_tmpl_id.display_name, - ) - ) - if rec.product_id and rec.product_id.company_id: - rec.company_id = rec.product_id.company_id - elif rec.product_tmpl_id and rec.product_tmpl_id.company_id: - rec.company_id = rec.product_tmpl_id.company_id - else: - rec.company_id = False - else: - raise ValidationError( - _("There's no link to a product or variant, cannot get the company") - ) - - @api.constrains("name", "company_id") - def _check_duplicates(self): - for rec in self: - domain = [("id", "!=", rec.id), ("name", "=", rec.name)] - if rec.company_id: - domain.append(("company_id", "in", (False, rec.company_id.id))) - others = self.search(domain) - if others: - raise UserError( - _( - 'The Barcode "%(barcode_name)s" already exists for ' - 'products: "%(product_names)s"' - ) - % dict( - barcode_name=rec.name, - product_names=", ".join( - [ - f"({x.id}) {x.display_name}" - for x in others.sudo().product_id - ] - ), - ) - ) + def _get_duplicates(self, barcodes_to_check): + self.ensure_one() + res = super()._get_duplicates(barcodes_to_check) + if self.company_id: + res = res.filtered( + lambda x: x.company_id.id == self.company_id.id or not x.company_id + ) + return res diff --git a/product_multi_unique_barcode/readme/CONTRIBUTORS.md b/product_multi_unique_barcode/readme/CONTRIBUTORS.md index 82fd33b27..7127a028f 100644 --- a/product_multi_unique_barcode/readme/CONTRIBUTORS.md +++ b/product_multi_unique_barcode/readme/CONTRIBUTORS.md @@ -1,3 +1,4 @@ - [NuoBiT](https://www.nuobit.com): - - Eric Antones \ - - Frank Cespedes \ + - Eric Antones + - Frank Cespedes + - Deniz Gallo diff --git a/product_multi_unique_barcode/static/description/index.html b/product_multi_unique_barcode/static/description/index.html index 9d181f237..fb6da2541 100644 --- a/product_multi_unique_barcode/static/description/index.html +++ b/product_multi_unique_barcode/static/description/index.html @@ -396,16 +396,16 @@

Credits

Authors

    -
  • NuoBiT Solutions
  • -
  • S.L.
  • +
  • NuoBiT Solutions SL

Contributors

From 47f5903d5dcab29282986af9e8a424a13e8a01d1 Mon Sep 17 00:00:00 2001 From: ??? Date: Wed, 1 Oct 2025 11:49:26 +0200 Subject: [PATCH 4/4] [DO NOT MERGE] test-requirements.txt --- test-requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 test-requirements.txt diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000..92c0f5d7c --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1 @@ +odoo-addon-product_unique_barcode@git+https://github.com/nuobit/odoo-addons.git@refs/pull/732/head#subdirectory=product_unique_barcode