From 673f3ed584625b13a71436026e3f119f26fb0232 Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Wed, 7 Aug 2019 07:08:02 +0000
Subject: [PATCH 01/19] [ADD] stock_barcodes_gs1: Add support to stock_barcodes
module to read GS1 barcodes
---
stock_barcodes_gs1/README.rst | 85 ++++
stock_barcodes_gs1/__init__.py | 3 +
stock_barcodes_gs1/__manifest__.py | 17 +
stock_barcodes_gs1/i18n/es.po | 61 +++
.../i18n/stock_barcodes_gs1.pot | 55 +++
stock_barcodes_gs1/readme/CONTRIBUTORS.rst | 6 +
stock_barcodes_gs1/readme/DESCRIPTION.rst | 3 +
stock_barcodes_gs1/readme/USAGE.rst | 1 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 430 ++++++++++++++++++
stock_barcodes_gs1/tests/__init__.py | 3 +
.../tests/test_stock_barcodes_gs1.py | 85 ++++
.../tests/test_stock_barcodes_new_lot_gs1.py | 30 ++
stock_barcodes_gs1/wizard/__init__.py | 4 +
.../wizard/stock_barcodes_read.py | 77 ++++
.../wizard/stock_production_lot.py | 35 ++
16 files changed, 895 insertions(+)
create mode 100644 stock_barcodes_gs1/README.rst
create mode 100644 stock_barcodes_gs1/__init__.py
create mode 100644 stock_barcodes_gs1/__manifest__.py
create mode 100644 stock_barcodes_gs1/i18n/es.po
create mode 100644 stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
create mode 100644 stock_barcodes_gs1/readme/CONTRIBUTORS.rst
create mode 100644 stock_barcodes_gs1/readme/DESCRIPTION.rst
create mode 100644 stock_barcodes_gs1/readme/USAGE.rst
create mode 100644 stock_barcodes_gs1/static/description/icon.png
create mode 100644 stock_barcodes_gs1/static/description/index.html
create mode 100644 stock_barcodes_gs1/tests/__init__.py
create mode 100644 stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
create mode 100644 stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
create mode 100644 stock_barcodes_gs1/wizard/__init__.py
create mode 100644 stock_barcodes_gs1/wizard/stock_barcodes_read.py
create mode 100644 stock_barcodes_gs1/wizard/stock_production_lot.py
diff --git a/stock_barcodes_gs1/README.rst b/stock_barcodes_gs1/README.rst
new file mode 100644
index 000000000000..12cbc2707d1c
--- /dev/null
+++ b/stock_barcodes_gs1/README.rst
@@ -0,0 +1,85 @@
+==================
+Stock Barcodes GS1
+==================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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-OCA%2Fstock--logistics--barcode-lightgray.png?logo=github
+ :target: https://github.com/OCA/stock-logistics-barcode/tree/11.0/stock_barcodes_gs1
+ :alt: OCA/stock-logistics-barcode
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-11-0/stock-logistics-barcode-11-0-stock_barcodes_gs1
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/150/11.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module extends barcode reader interface to allow to read GS1 barcodes.
+
+The AI's implemented are 01(Group), 02(Product), 37(Quantity) and 10(Lots).
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+Read usage section from stock_barcodes module.
+
+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 smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Tecnativa
+
+Contributors
+~~~~~~~~~~~~
+
+
+* `Tecnativa `_:
+
+ * Sergio Teruel
+ * Carlos Dauden
+ * Pedro M. Baeza
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_barcodes_gs1/__init__.py b/stock_barcodes_gs1/__init__.py
new file mode 100644
index 000000000000..ec87b80cddd4
--- /dev/null
+++ b/stock_barcodes_gs1/__init__.py
@@ -0,0 +1,3 @@
+# Copyright 2019 Sergio Teruel
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from . import wizard
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
new file mode 100644
index 000000000000..b19f4a63a2dd
--- /dev/null
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -0,0 +1,17 @@
+# Copyright 2019 Sergio Teruel
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+{
+ "name": "Stock Barcodes GS1",
+ "summary": "It provides read GS1 barcode on stock operations.",
+ "version": "11.0.1.0.0",
+ "author": "Tecnativa, "
+ "Odoo Community Association (OCA)",
+ "website": "https://odoo-community.org/",
+ "license": "AGPL-3",
+ "category": "Extra Tools",
+ "depends": [
+ 'stock_barcodes',
+ 'base_gs1_barcode',
+ ],
+ 'installable': True,
+}
diff --git a/stock_barcodes_gs1/i18n/es.po b/stock_barcodes_gs1/i18n/es.po
new file mode 100644
index 000000000000..beea65190087
--- /dev/null
+++ b/stock_barcodes_gs1/i18n/es.po
@@ -0,0 +1,61 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * stock_barcodes_gs1
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-08-27 14:47+0000\n"
+"PO-Revision-Date: 2019-08-27 16:48+0200\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.0.6\n"
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:48
+#, python-format
+msgid "Barcode for product not found"
+msgstr "Código de barras no encontrado"
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:58
+#, python-format
+msgid "Barcode for product packaging not found"
+msgstr "Código de barras de empaquetado no encontrado"
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:76
+#, python-format
+msgid "Barcode not found"
+msgstr "Código de barras no encontrado"
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:74
+#, python-format
+msgid "Barcode read correctly"
+msgstr "Código de barras leído correctamente"
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:63
+#, python-format
+msgid "More than one package found"
+msgstr "Se ha encontrado más de un empaquetado."
+
+#. module: stock_barcodes_gs1
+#: model:ir.model,name:stock_barcodes_gs1.model_wiz_stock_barcodes_new_lot
+msgid "Wizard to create new lot from barcode scanner"
+msgstr "Asistente para crear nuevo lote desde el lector de códigos de barras"
+
+#. module: stock_barcodes_gs1
+#: model:ir.model,name:stock_barcodes_gs1.model_wiz_stock_barcodes_read
+msgid "Wizard to read barcode"
+msgstr "Asistente para leer código de barras"
+
+#~ msgid "More than one product found"
+#~ msgstr "Se ha encontrado más de un producto."
diff --git a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
new file mode 100644
index 000000000000..e09dac434fea
--- /dev/null
+++ b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
@@ -0,0 +1,55 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * stock_barcodes_gs1
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.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: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:48
+#, python-format
+msgid "Barcode for product not found"
+msgstr ""
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:58
+#, python-format
+msgid "Barcode for product packaging not found"
+msgstr ""
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:76
+#, python-format
+msgid "Barcode not found"
+msgstr ""
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:74
+#, python-format
+msgid "Barcode read correctly"
+msgstr ""
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:63
+#, python-format
+msgid "More than one package found"
+msgstr ""
+
+#. module: stock_barcodes_gs1
+#: model:ir.model,name:stock_barcodes_gs1.model_wiz_stock_barcodes_new_lot
+msgid "Wizard to create new lot from barcode scanner"
+msgstr ""
+
+#. module: stock_barcodes_gs1
+#: model:ir.model,name:stock_barcodes_gs1.model_wiz_stock_barcodes_read
+msgid "Wizard to read barcode"
+msgstr ""
+
diff --git a/stock_barcodes_gs1/readme/CONTRIBUTORS.rst b/stock_barcodes_gs1/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000000..7ba43eb43fcb
--- /dev/null
+++ b/stock_barcodes_gs1/readme/CONTRIBUTORS.rst
@@ -0,0 +1,6 @@
+
+* `Tecnativa `_:
+
+ * Sergio Teruel
+ * Carlos Dauden
+ * Pedro M. Baeza
diff --git a/stock_barcodes_gs1/readme/DESCRIPTION.rst b/stock_barcodes_gs1/readme/DESCRIPTION.rst
new file mode 100644
index 000000000000..01eb26f73c42
--- /dev/null
+++ b/stock_barcodes_gs1/readme/DESCRIPTION.rst
@@ -0,0 +1,3 @@
+This module extends barcode reader interface to allow to read GS1 barcodes.
+
+The AI's implemented are 01(Group), 02(Product), 37(Quantity) and 10(Lots).
diff --git a/stock_barcodes_gs1/readme/USAGE.rst b/stock_barcodes_gs1/readme/USAGE.rst
new file mode 100644
index 000000000000..b0b4bac558c0
--- /dev/null
+++ b/stock_barcodes_gs1/readme/USAGE.rst
@@ -0,0 +1 @@
+Read usage section from stock_barcodes module.
diff --git a/stock_barcodes_gs1/static/description/icon.png b/stock_barcodes_gs1/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)`y_~Hnd9AUX7h-H?jVuU|}My+C=TjH(jKz
zqMVr0re3S$H@t{zI95qa)+Crz*5Zj}Ao%4Z><+W(nOZd?gDnfNBC3>M8WE61$So|P
zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO
z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1
zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_
zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8
zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ>
zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN
z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h
zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d
zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB
zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz
z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I
zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X
zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD
z#z-)AXwSRY?OPefw^iI+
z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd
z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs
z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I
z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$
z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV
z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s
zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6
zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u
zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q
zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH
zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c
zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT
zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+
z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ
zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy
zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC)
zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a
zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x!
zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X
zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8
z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A
z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H
zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n=
z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK
z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z
zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h
z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD
z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW
zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@
zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz
z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y<
zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X
zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6
zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6%
z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(|
z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ
z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H
zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6
z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d}
z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A
zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/stock_barcodes_gs1/static/description/index.html b/stock_barcodes_gs1/static/description/index.html
new file mode 100644
index 000000000000..ba1a893dda5d
--- /dev/null
+++ b/stock_barcodes_gs1/static/description/index.html
@@ -0,0 +1,430 @@
+
+
+
+
+
+
+Stock Barcodes GS1
+
+
+
+
+
Stock Barcodes GS1
+
+
+
+
This module extends barcode reader interface to allow to read GS1 barcodes.
+
The AI’s implemented are 01(Group), 02(Product), 37(Quantity) and 10(Lots).
+
Table of contents
+
+
+
+
Read usage section from stock_barcodes module.
+
+
+
+
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 smashing it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+- Tecnativa:
+- Sergio Teruel
+- Carlos Dauden
+- Pedro M. Baeza
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/stock-logistics-barcode project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/stock_barcodes_gs1/tests/__init__.py b/stock_barcodes_gs1/tests/__init__.py
new file mode 100644
index 000000000000..b9b522c53541
--- /dev/null
+++ b/stock_barcodes_gs1/tests/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from . import test_stock_barcodes_gs1
+from . import test_stock_barcodes_new_lot_gs1
diff --git a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
new file mode 100644
index 000000000000..22890ee7d174
--- /dev/null
+++ b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
@@ -0,0 +1,85 @@
+# Copyright 2108-2019 Sergio Teruel
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.addons.stock_barcodes.tests.\
+ test_stock_barcodes import TestStockBarcodes
+
+
+class TestStockBarcodesGS1(TestStockBarcodes):
+
+ def setUp(self):
+ super().setUp()
+ # Barcode for packaging and lot
+ self.gs1_barcode_01 = '01195011015300001714070410AB-123'
+ self.gs1_barcode_01_not_found = '011xxx11015300001714070410AB-123'
+ self.gs1_barcode_01_not_lot = '01195011015300001714070410AB-124'
+ # Barcode for product and quantities
+ self.gs1_barcode_02 = '0207010001234567150410183724'
+ self.gs1_barcode_02_not_found = '020xxx0001234567150410183724'
+ # Barcode not processed
+ self.gs1_barcode_01_not_processed = '01993167101234533101002620130' \
+ '5041710ABC123214145354'
+
+ self.product_wo_tracking_gs1 = self.product_wo_tracking.copy({
+ 'barcode': '07010001234567',
+ })
+ self.product_tracking_gs1 = self.product_tracking.copy()
+ self.packaging_gs1 = self.ProductPackaging.create({
+ 'product_id': self.product_wo_tracking_gs1.id,
+ 'name': 'Box 10 Units',
+ 'qty': 10.0,
+ 'barcode': '19501101530000',
+ })
+
+ def test_wizard_scan_gs1_package(self):
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01)
+ self.assertEqual(self.wiz_scan.packaging_id, self.packaging_gs1)
+ # Scan no exist packaging
+ self.action_barcode_scanned(
+ self.wiz_scan, self.gs1_barcode_01_not_found)
+ self.assertEqual(self.wiz_scan.message,
+ 'Barcode: 011xxx11015300001714070410AB-123 '
+ '(Barcode for product packaging not found)')
+ # Scan packaging barcode with more than one package
+ self.packaging_gs1.copy({
+ 'barcode': '19501101530000',
+ })
+ self.action_barcode_scanned(
+ self.wiz_scan, self.gs1_barcode_01)
+ self.assertEqual(self.wiz_scan.message,
+ 'Barcode: 01195011015300001714070410AB-123 '
+ '(More than one package found)')
+
+ def test_wizard_scan_gs1_product(self):
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_02)
+ self.assertEqual(
+ self.wiz_scan.product_id, self.product_wo_tracking_gs1)
+ self.assertEqual(self.wiz_scan.product_qty, 24)
+ # Scan non exists product
+ self.action_barcode_scanned(
+ self.wiz_scan, self.gs1_barcode_02_not_found)
+ self.assertEqual(self.wiz_scan.message,
+ 'Barcode: 020xxx0001234567150410183724 '
+ '(Barcode for product not found)')
+
+ def test_wizard_scan_gs1_lot(self):
+ self.packaging_gs1.product_id = self.product_tracking_gs1
+ lot = self.StockProductionLot.create({
+ 'name': 'AB-123',
+ 'product_id': self.product_tracking_gs1.id,
+ })
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01)
+ self.assertEqual(self.wiz_scan.lot_id, lot)
+ self.assertEqual(self.wiz_scan.message,
+ 'Barcode: 01195011015300001714070410AB-123 '
+ '(Barcode read correctly)')
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01_not_lot)
+ self.assertEqual(self.wiz_scan.lot_id.name, 'AB-124')
+
+ def test_wizard_scan_gs1_not_found(self):
+ self.action_barcode_scanned(
+ self.wiz_scan, self.gs1_barcode_01_not_processed)
+ self.assertEqual(self.wiz_scan.message,
+ 'Barcode: 0199316710123453310100262013050417'
+ '10ABC123214145354 (Barcode for product packaging '
+ 'not found)')
diff --git a/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py b/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
new file mode 100644
index 000000000000..0f528f8e3e0d
--- /dev/null
+++ b/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
@@ -0,0 +1,30 @@
+# Copyright 2108-2019 Sergio Teruel
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.addons.stock_barcodes_gs1.tests.test_stock_barcodes_gs1 import\
+ TestStockBarcodesGS1
+
+
+class TestStockBarcodesNewLotGS1(TestStockBarcodesGS1):
+
+ def setUp(self):
+ super().setUp()
+ self.ScanReadLot = self.env['wiz.stock.barcodes.new.lot']
+ self.wiz_scan_lot = self.ScanReadLot.new()
+ self.gs1_barcode_02_10 = '02174512345678911718112510AAA2701370150'
+
+ def test_new_lot_gs1_package(self):
+ self.action_barcode_scanned(self.wiz_scan_lot, self.gs1_barcode_01)
+ self.assertEqual(
+ self.wiz_scan_lot.product_id, self.product_wo_tracking_gs1)
+ self.assertEqual(self.wiz_scan_lot.lot_name, 'AB-123')
+
+ def test_new_lot_gs1_product(self):
+ self.product_tracking_gs1.barcode = '17451234567891'
+ self.action_barcode_scanned(self.wiz_scan_lot, self.gs1_barcode_02_10)
+ self.assertEqual(
+ self.wiz_scan_lot.product_id, self.product_tracking_gs1)
+ self.assertEqual(self.wiz_scan_lot.lot_name, 'AAA2701370150')
+
+ def test_new_lot_gs1_no_lot(self):
+ self.action_barcode_scanned(self.wiz_scan_lot, self.gs1_barcode_02)
+ self.assertFalse(self.wiz_scan_lot.product_id)
diff --git a/stock_barcodes_gs1/wizard/__init__.py b/stock_barcodes_gs1/wizard/__init__.py
new file mode 100644
index 000000000000..4f764e17dfba
--- /dev/null
+++ b/stock_barcodes_gs1/wizard/__init__.py
@@ -0,0 +1,4 @@
+# Copyright 2019 Sergio Teruel
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from . import stock_barcodes_read
+from . import stock_production_lot
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
new file mode 100644
index 000000000000..4a44751e88fd
--- /dev/null
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -0,0 +1,77 @@
+# Copyright 2019 Sergio Teruel
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from odoo import _, models
+
+
+class WizStockBarcodesRead(models.AbstractModel):
+ _inherit = 'wiz.stock.barcodes.read'
+
+ def _prepare_lot_values(self, barcode_decoded):
+ lot_barcode = barcode_decoded.get('10', False)
+ return {
+ 'name': lot_barcode,
+ 'product_id': self.product_id.id,
+ }
+
+ def _create_lot(self, barcode_decoded):
+ return self.env['stock.production.lot'].create(
+ self._prepare_lot_values(barcode_decoded))
+
+ def process_lot(self, barcode_decoded):
+ lot_barcode = barcode_decoded.get('10', False)
+ lot = self.env['stock.production.lot'].search([
+ ('name', '=', lot_barcode),
+ ('product_id', '=', self.product_id.id),
+ ])
+ if not lot:
+ lot = self._create_lot(barcode_decoded)
+ self.lot_id = lot
+
+ def process_barcode(self, barcode):
+ """ Only has been implemented AI (01, 02, 10, 37), so is possible that
+ scanner reads a barcode ok but this one is not precessed.
+ """
+ try:
+ barcode_decoded = self.env['gs1_barcode'].decode(barcode)
+ except Exception:
+ return super().process_barcode(barcode)
+ processed = False
+ package_barcode = barcode_decoded.get('01', False)
+ product_barcode = barcode_decoded.get('02', False)
+ lot_barcode = barcode_decoded.get('10', False)
+ product_qty = barcode_decoded.get('37', False)
+ if product_barcode:
+ product = self.env['product.product'].search(
+ self._barcode_domain(product_barcode))
+ if not product:
+ self._set_messagge_info(
+ 'not_found', _('Barcode for product not found'))
+ return False
+ else:
+ processed = True
+ self.action_product_scaned_post(product)
+ if package_barcode:
+ packaging = self.env['product.packaging'].search(
+ self._barcode_domain(package_barcode))
+ if not packaging:
+ self._set_messagge_info(
+ 'not_found', _('Barcode for product packaging not found'))
+ return False
+ else:
+ if len(packaging) > 1:
+ self._set_messagge_info(
+ 'more_match', _('More than one package found'))
+ return False
+ processed = True
+ self.action_packaging_scaned_post(packaging)
+ if lot_barcode and self.product_id.tracking != 'none':
+ self.process_lot(barcode_decoded)
+ processed = True
+ if product_qty:
+ self.product_qty = product_qty
+ if processed:
+ self.action_done()
+ self._set_messagge_info('success', _('Barcode read correctly'))
+ return True
+ self._set_messagge_info('not_found', _('Barcode not found'))
+ return False
diff --git a/stock_barcodes_gs1/wizard/stock_production_lot.py b/stock_barcodes_gs1/wizard/stock_production_lot.py
new file mode 100644
index 000000000000..a080c392ac32
--- /dev/null
+++ b/stock_barcodes_gs1/wizard/stock_production_lot.py
@@ -0,0 +1,35 @@
+# Copyright 2019 Sergio Teruel
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from odoo import models
+
+
+class WizStockBarcodesNewLot(models.TransientModel):
+ _inherit = 'wiz.stock.barcodes.new.lot'
+ _description = 'Wizard to create new lot from barcode scanner'
+
+ def _decode_barcode(self, barcode):
+ return self.env['gs1_barcode'].decode(barcode)
+
+ def on_barcode_scanned(self, barcode):
+ try:
+ barcode_decoded = self._decode_barcode(barcode)
+ except Exception:
+ return super().on_barcode_scanned(barcode)
+ package_barcode = barcode_decoded.get('01', False)
+ product_barcode = barcode_decoded.get('02', False)
+ lot_barcode = barcode_decoded.get('10', False)
+ if not lot_barcode:
+ return
+ if package_barcode:
+ packaging = self.env['product.packaging'].search([
+ ('barcode', '=', package_barcode),
+ ])
+ if packaging:
+ self.product_id = packaging.product_id
+ elif product_barcode:
+ product = self.env['product.product'].search([
+ ('barcode', '=', product_barcode),
+ ])
+ if product:
+ self.product_id = product
+ self.lot_name = lot_barcode
From 7d4a52d8eff9c46ff08c387daca16b47625a906b Mon Sep 17 00:00:00 2001
From: Jordi Ballester Alomar
Date: Thu, 14 Nov 2019 18:53:34 +0100
Subject: [PATCH 02/19] Sometimes the product does not yet have a GTIN. In this
case try the AI 240 'Additional product identification assigned by the
manufacturer'
---
stock_barcodes_gs1/wizard/stock_barcodes_read.py | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index 4a44751e88fd..58cde49bb748 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -38,6 +38,11 @@ def process_barcode(self, barcode):
processed = False
package_barcode = barcode_decoded.get('01', False)
product_barcode = barcode_decoded.get('02', False)
+ if not product_barcode:
+ # Sometimes the product does not yet have a GTIN. In this case
+ # try the AI 240 'Additional product identification assigned
+ # by the manufacturer'.
+ product_barcode = barcode_decoded.get('240', False)
lot_barcode = barcode_decoded.get('10', False)
product_qty = barcode_decoded.get('37', False)
if product_barcode:
From 6e83db00957dcf4f49fa6b48402d3f68aec679fd Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Mon, 25 Nov 2019 11:30:48 +0000
Subject: [PATCH 03/19] [UPD] Update stock_barcodes_gs1.pot
---
stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
index e09dac434fea..f22aab41030b 100644
--- a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
+++ b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
@@ -14,31 +14,31 @@ msgstr ""
"Plural-Forms: \n"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:48
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:53
#, python-format
msgid "Barcode for product not found"
msgstr ""
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:58
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:63
#, python-format
msgid "Barcode for product packaging not found"
msgstr ""
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:76
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:81
#, python-format
msgid "Barcode not found"
msgstr ""
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:74
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:79
#, python-format
msgid "Barcode read correctly"
msgstr ""
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:63
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:68
#, python-format
msgid "More than one package found"
msgstr ""
From ee2f588262b7a536a1e7fb7c9ea4df091c38b0a9 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 25 Nov 2019 11:40:53 +0000
Subject: [PATCH 04/19] stock_barcodes_gs1 11.0.1.0.1
---
stock_barcodes_gs1/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index b19f4a63a2dd..3ffc10b1a338 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "11.0.1.0.0",
+ "version": "11.0.1.0.1",
"author": "Tecnativa, "
"Odoo Community Association (OCA)",
"website": "https://odoo-community.org/",
From 0406318cfe2fecc930beb1065f25fc7823e5db51 Mon Sep 17 00:00:00 2001
From: OCA Transbot
Date: Mon, 25 Nov 2019 11:41:09 +0000
Subject: [PATCH 05/19] Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.
Translation: stock-logistics-barcode-11.0/stock-logistics-barcode-11.0-stock_barcodes_gs1
Translate-URL: https://translation.odoo-community.org/projects/stock-logistics-barcode-11-0/stock-logistics-barcode-11-0-stock_barcodes_gs1/
---
stock_barcodes_gs1/i18n/es.po | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/stock_barcodes_gs1/i18n/es.po b/stock_barcodes_gs1/i18n/es.po
index beea65190087..da7045978b0a 100644
--- a/stock_barcodes_gs1/i18n/es.po
+++ b/stock_barcodes_gs1/i18n/es.po
@@ -18,31 +18,31 @@ msgstr ""
"X-Generator: Poedit 2.0.6\n"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:48
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:53
#, python-format
msgid "Barcode for product not found"
msgstr "Código de barras no encontrado"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:58
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:63
#, python-format
msgid "Barcode for product packaging not found"
msgstr "Código de barras de empaquetado no encontrado"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:76
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:81
#, python-format
msgid "Barcode not found"
msgstr "Código de barras no encontrado"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:74
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:79
#, python-format
msgid "Barcode read correctly"
msgstr "Código de barras leído correctamente"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:63
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:68
#, python-format
msgid "More than one package found"
msgstr "Se ha encontrado más de un empaquetado."
From 447c7db92bde5e371c88ce6e851cc28d0658bcde Mon Sep 17 00:00:00 2001
From: Joan Sisquella
Date: Tue, 17 Dec 2019 09:26:17 +0100
Subject: [PATCH 06/19] [MIG] stock_barcodes_gs1: Migration to 12.0
---
stock_barcodes_gs1/README.rst | 10 +++++-----
stock_barcodes_gs1/__manifest__.py | 2 +-
stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot | 2 +-
stock_barcodes_gs1/static/description/index.html | 6 +++---
4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/stock_barcodes_gs1/README.rst b/stock_barcodes_gs1/README.rst
index 12cbc2707d1c..17df208ceb67 100644
--- a/stock_barcodes_gs1/README.rst
+++ b/stock_barcodes_gs1/README.rst
@@ -14,13 +14,13 @@ Stock Barcodes GS1
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--barcode-lightgray.png?logo=github
- :target: https://github.com/OCA/stock-logistics-barcode/tree/11.0/stock_barcodes_gs1
+ :target: https://github.com/OCA/stock-logistics-barcode/tree/12.0/stock_barcodes_gs1
:alt: OCA/stock-logistics-barcode
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-11-0/stock-logistics-barcode-11-0-stock_barcodes_gs1
+ :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-12-0/stock-logistics-barcode-12-0-stock_barcodes_gs1
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/150/11.0
+ :target: https://runbot.odoo-community.org/runbot/150/12.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -45,7 +45,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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -80,6 +80,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub.
+This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 3ffc10b1a338..055a7e32a34a 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "11.0.1.0.1",
+ "version": "12.0.1.0.0",
"author": "Tecnativa, "
"Odoo Community Association (OCA)",
"website": "https://odoo-community.org/",
diff --git a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
index f22aab41030b..c873cd984728 100644
--- a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
+++ b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 11.0\n"
+"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Language-Team: \n"
diff --git a/stock_barcodes_gs1/static/description/index.html b/stock_barcodes_gs1/static/description/index.html
index ba1a893dda5d..9b9225287c3d 100644
--- a/stock_barcodes_gs1/static/description/index.html
+++ b/stock_barcodes_gs1/static/description/index.html
@@ -367,7 +367,7 @@ Stock Barcodes GS1
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module extends barcode reader interface to allow to read GS1 barcodes.
The AI’s implemented are 01(Group), 02(Product), 37(Quantity) and 10(Lots).
Table of contents
@@ -392,7 +392,7 @@
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 smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
From f65d16d779fd60c7c444f79c05d0f70cf96537b5 Mon Sep 17 00:00:00 2001
From: Sergio Teruel
Date: Thu, 13 Feb 2020 22:19:37 +0100
Subject: [PATCH 07/19] [IMP] stock_barcodes_gs1: black, isort
---
stock_barcodes_gs1/__manifest__.py | 10 +-
.../tests/test_stock_barcodes_gs1.py | 107 +++++++++---------
.../tests/test_stock_barcodes_new_lot_gs1.py | 22 ++--
.../wizard/stock_barcodes_read.py | 60 +++++-----
.../wizard/stock_production_lot.py | 24 ++--
5 files changed, 109 insertions(+), 114 deletions(-)
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 055a7e32a34a..7338dc3eed2b 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -4,14 +4,10 @@
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
"version": "12.0.1.0.0",
- "author": "Tecnativa, "
- "Odoo Community Association (OCA)",
+ "author": "Tecnativa, " "Odoo Community Association (OCA)",
"website": "https://odoo-community.org/",
"license": "AGPL-3",
"category": "Extra Tools",
- "depends": [
- 'stock_barcodes',
- 'base_gs1_barcode',
- ],
- 'installable': True,
+ "depends": ["stock_barcodes", "base_gs1_barcode"],
+ "installable": True,
}
diff --git a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
index 22890ee7d174..7c04e61876d7 100644
--- a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
+++ b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
@@ -1,85 +1,86 @@
# Copyright 2108-2019 Sergio Teruel
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo.addons.stock_barcodes.tests.\
- test_stock_barcodes import TestStockBarcodes
+from odoo.addons.stock_barcodes.tests.test_stock_barcodes import TestStockBarcodes
class TestStockBarcodesGS1(TestStockBarcodes):
-
def setUp(self):
super().setUp()
# Barcode for packaging and lot
- self.gs1_barcode_01 = '01195011015300001714070410AB-123'
- self.gs1_barcode_01_not_found = '011xxx11015300001714070410AB-123'
- self.gs1_barcode_01_not_lot = '01195011015300001714070410AB-124'
+ self.gs1_barcode_01 = "01195011015300001714070410AB-123"
+ self.gs1_barcode_01_not_found = "011xxx11015300001714070410AB-123"
+ self.gs1_barcode_01_not_lot = "01195011015300001714070410AB-124"
# Barcode for product and quantities
- self.gs1_barcode_02 = '0207010001234567150410183724'
- self.gs1_barcode_02_not_found = '020xxx0001234567150410183724'
+ self.gs1_barcode_02 = "0207010001234567150410183724"
+ self.gs1_barcode_02_not_found = "020xxx0001234567150410183724"
# Barcode not processed
- self.gs1_barcode_01_not_processed = '01993167101234533101002620130' \
- '5041710ABC123214145354'
+ self.gs1_barcode_01_not_processed = (
+ "01993167101234533101002620130" "5041710ABC123214145354"
+ )
- self.product_wo_tracking_gs1 = self.product_wo_tracking.copy({
- 'barcode': '07010001234567',
- })
+ self.product_wo_tracking_gs1 = self.product_wo_tracking.copy(
+ {"barcode": "07010001234567"}
+ )
self.product_tracking_gs1 = self.product_tracking.copy()
- self.packaging_gs1 = self.ProductPackaging.create({
- 'product_id': self.product_wo_tracking_gs1.id,
- 'name': 'Box 10 Units',
- 'qty': 10.0,
- 'barcode': '19501101530000',
- })
+ self.packaging_gs1 = self.ProductPackaging.create(
+ {
+ "product_id": self.product_wo_tracking_gs1.id,
+ "name": "Box 10 Units",
+ "qty": 10.0,
+ "barcode": "19501101530000",
+ }
+ )
def test_wizard_scan_gs1_package(self):
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01)
self.assertEqual(self.wiz_scan.packaging_id, self.packaging_gs1)
# Scan no exist packaging
- self.action_barcode_scanned(
- self.wiz_scan, self.gs1_barcode_01_not_found)
- self.assertEqual(self.wiz_scan.message,
- 'Barcode: 011xxx11015300001714070410AB-123 '
- '(Barcode for product packaging not found)')
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01_not_found)
+ self.assertEqual(
+ self.wiz_scan.message,
+ "Barcode: 011xxx11015300001714070410AB-123 "
+ "(Barcode for product packaging not found)",
+ )
# Scan packaging barcode with more than one package
- self.packaging_gs1.copy({
- 'barcode': '19501101530000',
- })
- self.action_barcode_scanned(
- self.wiz_scan, self.gs1_barcode_01)
- self.assertEqual(self.wiz_scan.message,
- 'Barcode: 01195011015300001714070410AB-123 '
- '(More than one package found)')
+ self.packaging_gs1.copy({"barcode": "19501101530000"})
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01)
+ self.assertEqual(
+ self.wiz_scan.message,
+ "Barcode: 01195011015300001714070410AB-123 "
+ "(More than one package found)",
+ )
def test_wizard_scan_gs1_product(self):
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_02)
- self.assertEqual(
- self.wiz_scan.product_id, self.product_wo_tracking_gs1)
+ self.assertEqual(self.wiz_scan.product_id, self.product_wo_tracking_gs1)
self.assertEqual(self.wiz_scan.product_qty, 24)
# Scan non exists product
- self.action_barcode_scanned(
- self.wiz_scan, self.gs1_barcode_02_not_found)
- self.assertEqual(self.wiz_scan.message,
- 'Barcode: 020xxx0001234567150410183724 '
- '(Barcode for product not found)')
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_02_not_found)
+ self.assertEqual(
+ self.wiz_scan.message,
+ "Barcode: 020xxx0001234567150410183724 " "(Barcode for product not found)",
+ )
def test_wizard_scan_gs1_lot(self):
self.packaging_gs1.product_id = self.product_tracking_gs1
- lot = self.StockProductionLot.create({
- 'name': 'AB-123',
- 'product_id': self.product_tracking_gs1.id,
- })
+ lot = self.StockProductionLot.create(
+ {"name": "AB-123", "product_id": self.product_tracking_gs1.id}
+ )
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01)
self.assertEqual(self.wiz_scan.lot_id, lot)
- self.assertEqual(self.wiz_scan.message,
- 'Barcode: 01195011015300001714070410AB-123 '
- '(Barcode read correctly)')
+ self.assertEqual(
+ self.wiz_scan.message,
+ "Barcode: 01195011015300001714070410AB-123 " "(Barcode read correctly)",
+ )
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01_not_lot)
- self.assertEqual(self.wiz_scan.lot_id.name, 'AB-124')
+ self.assertEqual(self.wiz_scan.lot_id.name, "AB-124")
def test_wizard_scan_gs1_not_found(self):
- self.action_barcode_scanned(
- self.wiz_scan, self.gs1_barcode_01_not_processed)
- self.assertEqual(self.wiz_scan.message,
- 'Barcode: 0199316710123453310100262013050417'
- '10ABC123214145354 (Barcode for product packaging '
- 'not found)')
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01_not_processed)
+ self.assertEqual(
+ self.wiz_scan.message,
+ "Barcode: 0199316710123453310100262013050417"
+ "10ABC123214145354 (Barcode for product packaging "
+ "not found)",
+ )
diff --git a/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py b/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
index 0f528f8e3e0d..c1a6262ce080 100644
--- a/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
+++ b/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
@@ -1,29 +1,27 @@
# Copyright 2108-2019 Sergio Teruel
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo.addons.stock_barcodes_gs1.tests.test_stock_barcodes_gs1 import\
- TestStockBarcodesGS1
+from odoo.addons.stock_barcodes_gs1.tests.test_stock_barcodes_gs1 import (
+ TestStockBarcodesGS1,
+)
class TestStockBarcodesNewLotGS1(TestStockBarcodesGS1):
-
def setUp(self):
super().setUp()
- self.ScanReadLot = self.env['wiz.stock.barcodes.new.lot']
+ self.ScanReadLot = self.env["wiz.stock.barcodes.new.lot"]
self.wiz_scan_lot = self.ScanReadLot.new()
- self.gs1_barcode_02_10 = '02174512345678911718112510AAA2701370150'
+ self.gs1_barcode_02_10 = "02174512345678911718112510AAA2701370150"
def test_new_lot_gs1_package(self):
self.action_barcode_scanned(self.wiz_scan_lot, self.gs1_barcode_01)
- self.assertEqual(
- self.wiz_scan_lot.product_id, self.product_wo_tracking_gs1)
- self.assertEqual(self.wiz_scan_lot.lot_name, 'AB-123')
+ self.assertEqual(self.wiz_scan_lot.product_id, self.product_wo_tracking_gs1)
+ self.assertEqual(self.wiz_scan_lot.lot_name, "AB-123")
def test_new_lot_gs1_product(self):
- self.product_tracking_gs1.barcode = '17451234567891'
+ self.product_tracking_gs1.barcode = "17451234567891"
self.action_barcode_scanned(self.wiz_scan_lot, self.gs1_barcode_02_10)
- self.assertEqual(
- self.wiz_scan_lot.product_id, self.product_tracking_gs1)
- self.assertEqual(self.wiz_scan_lot.lot_name, 'AAA2701370150')
+ self.assertEqual(self.wiz_scan_lot.product_id, self.product_tracking_gs1)
+ self.assertEqual(self.wiz_scan_lot.lot_name, "AAA2701370150")
def test_new_lot_gs1_no_lot(self):
self.action_barcode_scanned(self.wiz_scan_lot, self.gs1_barcode_02)
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index 58cde49bb748..46a361d8ab7f 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -4,25 +4,22 @@
class WizStockBarcodesRead(models.AbstractModel):
- _inherit = 'wiz.stock.barcodes.read'
+ _inherit = "wiz.stock.barcodes.read"
def _prepare_lot_values(self, barcode_decoded):
- lot_barcode = barcode_decoded.get('10', False)
- return {
- 'name': lot_barcode,
- 'product_id': self.product_id.id,
- }
+ lot_barcode = barcode_decoded.get("10", False)
+ return {"name": lot_barcode, "product_id": self.product_id.id}
def _create_lot(self, barcode_decoded):
- return self.env['stock.production.lot'].create(
- self._prepare_lot_values(barcode_decoded))
+ return self.env["stock.production.lot"].create(
+ self._prepare_lot_values(barcode_decoded)
+ )
def process_lot(self, barcode_decoded):
- lot_barcode = barcode_decoded.get('10', False)
- lot = self.env['stock.production.lot'].search([
- ('name', '=', lot_barcode),
- ('product_id', '=', self.product_id.id),
- ])
+ lot_barcode = barcode_decoded.get("10", False)
+ lot = self.env["stock.production.lot"].search(
+ [("name", "=", lot_barcode), ("product_id", "=", self.product_id.id)]
+ )
if not lot:
lot = self._create_lot(barcode_decoded)
self.lot_id = lot
@@ -32,51 +29,54 @@ def process_barcode(self, barcode):
scanner reads a barcode ok but this one is not precessed.
"""
try:
- barcode_decoded = self.env['gs1_barcode'].decode(barcode)
+ barcode_decoded = self.env["gs1_barcode"].decode(barcode)
except Exception:
return super().process_barcode(barcode)
processed = False
- package_barcode = barcode_decoded.get('01', False)
- product_barcode = barcode_decoded.get('02', False)
+ package_barcode = barcode_decoded.get("01", False)
+ product_barcode = barcode_decoded.get("02", False)
if not product_barcode:
# Sometimes the product does not yet have a GTIN. In this case
# try the AI 240 'Additional product identification assigned
# by the manufacturer'.
- product_barcode = barcode_decoded.get('240', False)
- lot_barcode = barcode_decoded.get('10', False)
- product_qty = barcode_decoded.get('37', False)
+ product_barcode = barcode_decoded.get("240", False)
+ lot_barcode = barcode_decoded.get("10", False)
+ product_qty = barcode_decoded.get("37", False)
if product_barcode:
- product = self.env['product.product'].search(
- self._barcode_domain(product_barcode))
+ product = self.env["product.product"].search(
+ self._barcode_domain(product_barcode)
+ )
if not product:
- self._set_messagge_info(
- 'not_found', _('Barcode for product not found'))
+ self._set_messagge_info("not_found", _("Barcode for product not found"))
return False
else:
processed = True
self.action_product_scaned_post(product)
if package_barcode:
- packaging = self.env['product.packaging'].search(
- self._barcode_domain(package_barcode))
+ packaging = self.env["product.packaging"].search(
+ self._barcode_domain(package_barcode)
+ )
if not packaging:
self._set_messagge_info(
- 'not_found', _('Barcode for product packaging not found'))
+ "not_found", _("Barcode for product packaging not found")
+ )
return False
else:
if len(packaging) > 1:
self._set_messagge_info(
- 'more_match', _('More than one package found'))
+ "more_match", _("More than one package found")
+ )
return False
processed = True
self.action_packaging_scaned_post(packaging)
- if lot_barcode and self.product_id.tracking != 'none':
+ if lot_barcode and self.product_id.tracking != "none":
self.process_lot(barcode_decoded)
processed = True
if product_qty:
self.product_qty = product_qty
if processed:
self.action_done()
- self._set_messagge_info('success', _('Barcode read correctly'))
+ self._set_messagge_info("success", _("Barcode read correctly"))
return True
- self._set_messagge_info('not_found', _('Barcode not found'))
+ self._set_messagge_info("not_found", _("Barcode not found"))
return False
diff --git a/stock_barcodes_gs1/wizard/stock_production_lot.py b/stock_barcodes_gs1/wizard/stock_production_lot.py
index a080c392ac32..5ccf9fe1a497 100644
--- a/stock_barcodes_gs1/wizard/stock_production_lot.py
+++ b/stock_barcodes_gs1/wizard/stock_production_lot.py
@@ -4,32 +4,32 @@
class WizStockBarcodesNewLot(models.TransientModel):
- _inherit = 'wiz.stock.barcodes.new.lot'
- _description = 'Wizard to create new lot from barcode scanner'
+ _inherit = "wiz.stock.barcodes.new.lot"
+ _description = "Wizard to create new lot from barcode scanner"
def _decode_barcode(self, barcode):
- return self.env['gs1_barcode'].decode(barcode)
+ return self.env["gs1_barcode"].decode(barcode)
def on_barcode_scanned(self, barcode):
try:
barcode_decoded = self._decode_barcode(barcode)
except Exception:
return super().on_barcode_scanned(barcode)
- package_barcode = barcode_decoded.get('01', False)
- product_barcode = barcode_decoded.get('02', False)
- lot_barcode = barcode_decoded.get('10', False)
+ package_barcode = barcode_decoded.get("01", False)
+ product_barcode = barcode_decoded.get("02", False)
+ lot_barcode = barcode_decoded.get("10", False)
if not lot_barcode:
return
if package_barcode:
- packaging = self.env['product.packaging'].search([
- ('barcode', '=', package_barcode),
- ])
+ packaging = self.env["product.packaging"].search(
+ [("barcode", "=", package_barcode)]
+ )
if packaging:
self.product_id = packaging.product_id
elif product_barcode:
- product = self.env['product.product'].search([
- ('barcode', '=', product_barcode),
- ])
+ product = self.env["product.product"].search(
+ [("barcode", "=", product_barcode)]
+ )
if product:
self.product_id = product
self.lot_name = lot_barcode
From d5fb638bd1eb80298820f611aaec2263691d074c Mon Sep 17 00:00:00 2001
From: Sergio Teruel
Date: Thu, 13 Feb 2020 22:19:38 +0100
Subject: [PATCH 08/19] [MIG] stock_barcodes_gs1: Migration to v13.0
---
stock_barcodes_gs1/README.rst | 10 +++++-----
stock_barcodes_gs1/__manifest__.py | 2 +-
stock_barcodes_gs1/i18n/es.po | 10 +++++-----
stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot | 17 ++++++++---------
.../static/description/index.html | 6 +++---
.../tests/test_stock_barcodes_gs1.py | 15 +++++++++++----
.../tests/test_stock_barcodes_new_lot_gs1.py | 3 +++
.../wizard/stock_barcodes_read.py | 6 +++++-
8 files changed, 41 insertions(+), 28 deletions(-)
diff --git a/stock_barcodes_gs1/README.rst b/stock_barcodes_gs1/README.rst
index 17df208ceb67..676c4c33a2c0 100644
--- a/stock_barcodes_gs1/README.rst
+++ b/stock_barcodes_gs1/README.rst
@@ -14,13 +14,13 @@ Stock Barcodes GS1
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--barcode-lightgray.png?logo=github
- :target: https://github.com/OCA/stock-logistics-barcode/tree/12.0/stock_barcodes_gs1
+ :target: https://github.com/OCA/stock-logistics-barcode/tree/13.0/stock_barcodes_gs1
:alt: OCA/stock-logistics-barcode
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-12-0/stock-logistics-barcode-12-0-stock_barcodes_gs1
+ :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-13-0/stock-logistics-barcode-13-0-stock_barcodes_gs1
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/150/12.0
+ :target: https://runbot.odoo-community.org/runbot/150/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -45,7 +45,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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -80,6 +80,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub.
+This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 7338dc3eed2b..9edd5fe844ff 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "12.0.1.0.0",
+ "version": "13.0.1.0.0",
"author": "Tecnativa, " "Odoo Community Association (OCA)",
"website": "https://odoo-community.org/",
"license": "AGPL-3",
diff --git a/stock_barcodes_gs1/i18n/es.po b/stock_barcodes_gs1/i18n/es.po
index da7045978b0a..0d83010e887a 100644
--- a/stock_barcodes_gs1/i18n/es.po
+++ b/stock_barcodes_gs1/i18n/es.po
@@ -18,31 +18,31 @@ msgstr ""
"X-Generator: Poedit 2.0.6\n"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:53
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "Barcode for product not found"
msgstr "Código de barras no encontrado"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:63
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "Barcode for product packaging not found"
msgstr "Código de barras de empaquetado no encontrado"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:81
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "Barcode not found"
msgstr "Código de barras no encontrado"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:79
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "Barcode read correctly"
msgstr "Código de barras leído correctamente"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:68
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "More than one package found"
msgstr "Se ha encontrado más de un empaquetado."
diff --git a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
index c873cd984728..1dd5cdc7b1cc 100644
--- a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
+++ b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
@@ -1,12 +1,12 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * stock_barcodes_gs1
+# * stock_barcodes_gs1
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
+"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
+"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -14,31 +14,31 @@ msgstr ""
"Plural-Forms: \n"
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:53
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "Barcode for product not found"
msgstr ""
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:63
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "Barcode for product packaging not found"
msgstr ""
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:81
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "Barcode not found"
msgstr ""
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:79
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "Barcode read correctly"
msgstr ""
#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:68
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "More than one package found"
msgstr ""
@@ -52,4 +52,3 @@ msgstr ""
#: model:ir.model,name:stock_barcodes_gs1.model_wiz_stock_barcodes_read
msgid "Wizard to read barcode"
msgstr ""
-
diff --git a/stock_barcodes_gs1/static/description/index.html b/stock_barcodes_gs1/static/description/index.html
index 9b9225287c3d..1723a4efa42f 100644
--- a/stock_barcodes_gs1/static/description/index.html
+++ b/stock_barcodes_gs1/static/description/index.html
@@ -367,7 +367,7 @@ Stock Barcodes GS1
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module extends barcode reader interface to allow to read GS1 barcodes.
The AI’s implemented are 01(Group), 02(Product), 37(Quantity) and 10(Lots).
Table of contents
@@ -392,7 +392,7 @@
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 smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
diff --git a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
index 7c04e61876d7..0eb1fe569825 100644
--- a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
+++ b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
@@ -1,9 +1,12 @@
# Copyright 2108-2019 Sergio Teruel
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.tests import common
+
from odoo.addons.stock_barcodes.tests.test_stock_barcodes import TestStockBarcodes
+@common.tagged("post_install", "-at_install")
class TestStockBarcodesGS1(TestStockBarcodes):
def setUp(self):
super().setUp()
@@ -19,10 +22,10 @@ def setUp(self):
"01993167101234533101002620130" "5041710ABC123214145354"
)
- self.product_wo_tracking_gs1 = self.product_wo_tracking.copy(
+ self.product_wo_tracking_gs1 = self.product_wo_tracking.with_context({}).copy(
{"barcode": "07010001234567"}
)
- self.product_tracking_gs1 = self.product_tracking.copy()
+ self.product_tracking_gs1 = self.product_tracking.with_context({}).copy()
self.packaging_gs1 = self.ProductPackaging.create(
{
"product_id": self.product_wo_tracking_gs1.id,
@@ -43,7 +46,7 @@ def test_wizard_scan_gs1_package(self):
"(Barcode for product packaging not found)",
)
# Scan packaging barcode with more than one package
- self.packaging_gs1.copy({"barcode": "19501101530000"})
+ self.packaging_gs1.with_context({}).copy({"barcode": "19501101530000"})
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01)
self.assertEqual(
self.wiz_scan.message,
@@ -65,7 +68,11 @@ def test_wizard_scan_gs1_product(self):
def test_wizard_scan_gs1_lot(self):
self.packaging_gs1.product_id = self.product_tracking_gs1
lot = self.StockProductionLot.create(
- {"name": "AB-123", "product_id": self.product_tracking_gs1.id}
+ {
+ "name": "AB-123",
+ "product_id": self.product_tracking_gs1.id,
+ "company_id": self.company.id,
+ }
)
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01)
self.assertEqual(self.wiz_scan.lot_id, lot)
diff --git a/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py b/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
index c1a6262ce080..271c546b156d 100644
--- a/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
+++ b/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
@@ -1,10 +1,13 @@
# Copyright 2108-2019 Sergio Teruel
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.tests import common
+
from odoo.addons.stock_barcodes_gs1.tests.test_stock_barcodes_gs1 import (
TestStockBarcodesGS1,
)
+@common.tagged("post_install", "-at_install")
class TestStockBarcodesNewLotGS1(TestStockBarcodesGS1):
def setUp(self):
super().setUp()
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index 46a361d8ab7f..b1befd409995 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -8,7 +8,11 @@ class WizStockBarcodesRead(models.AbstractModel):
def _prepare_lot_values(self, barcode_decoded):
lot_barcode = barcode_decoded.get("10", False)
- return {"name": lot_barcode, "product_id": self.product_id.id}
+ return {
+ "name": lot_barcode,
+ "product_id": self.product_id.id,
+ "company_id": self.env.user.company_id.id,
+ }
def _create_lot(self, barcode_decoded):
return self.env["stock.production.lot"].create(
From 72f7e6816592258977058905f1f82e1ac21cfb23 Mon Sep 17 00:00:00 2001
From: Sergio Teruel
Date: Fri, 31 Jul 2020 10:16:43 +0200
Subject: [PATCH 09/19] [FIX] stock_barcodes_gs1: Continue reading barcode if
can not read it as gs1
---
stock_barcodes_gs1/__manifest__.py | 2 +-
stock_barcodes_gs1/i18n/es.po | 9 +++------
stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot | 6 ------
stock_barcodes_gs1/wizard/stock_barcodes_read.py | 3 +--
4 files changed, 5 insertions(+), 15 deletions(-)
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 9edd5fe844ff..a7ac530eb636 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "13.0.1.0.0",
+ "version": "13.0.1.0.1",
"author": "Tecnativa, " "Odoo Community Association (OCA)",
"website": "https://odoo-community.org/",
"license": "AGPL-3",
diff --git a/stock_barcodes_gs1/i18n/es.po b/stock_barcodes_gs1/i18n/es.po
index 0d83010e887a..3424eabe865a 100644
--- a/stock_barcodes_gs1/i18n/es.po
+++ b/stock_barcodes_gs1/i18n/es.po
@@ -29,12 +29,6 @@ msgstr "Código de barras no encontrado"
msgid "Barcode for product packaging not found"
msgstr "Código de barras de empaquetado no encontrado"
-#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
-#, python-format
-msgid "Barcode not found"
-msgstr "Código de barras no encontrado"
-
#. module: stock_barcodes_gs1
#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
@@ -57,5 +51,8 @@ msgstr "Asistente para crear nuevo lote desde el lector de códigos de barras"
msgid "Wizard to read barcode"
msgstr "Asistente para leer código de barras"
+#~ msgid "Barcode not found"
+#~ msgstr "Código de barras no encontrado"
+
#~ msgid "More than one product found"
#~ msgstr "Se ha encontrado más de un producto."
diff --git a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
index 1dd5cdc7b1cc..27e1ecaa051b 100644
--- a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
+++ b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
@@ -25,12 +25,6 @@ msgstr ""
msgid "Barcode for product packaging not found"
msgstr ""
-#. module: stock_barcodes_gs1
-#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
-#, python-format
-msgid "Barcode not found"
-msgstr ""
-
#. module: stock_barcodes_gs1
#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index b1befd409995..244277670490 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -82,5 +82,4 @@ def process_barcode(self, barcode):
self.action_done()
self._set_messagge_info("success", _("Barcode read correctly"))
return True
- self._set_messagge_info("not_found", _("Barcode not found"))
- return False
+ return super().process_barcode()
From eda8374bd51d9da0c46e38ca8317fe0603a8581b Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Fri, 31 Jul 2020 12:16:17 +0200
Subject: [PATCH 10/19] [FIX] stock_barcodes_gs1: Pass argument to super
If not, you got an error.
---
stock_barcodes_gs1/__manifest__.py | 4 ++--
stock_barcodes_gs1/wizard/stock_barcodes_read.py | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index a7ac530eb636..9c299ac3d2ce 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,8 +3,8 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "13.0.1.0.1",
- "author": "Tecnativa, " "Odoo Community Association (OCA)",
+ "version": "13.0.1.0.2",
+ "author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://odoo-community.org/",
"license": "AGPL-3",
"category": "Extra Tools",
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index 244277670490..8c0517c41010 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -82,4 +82,4 @@ def process_barcode(self, barcode):
self.action_done()
self._set_messagge_info("success", _("Barcode read correctly"))
return True
- return super().process_barcode()
+ return super().process_barcode(barcode)
From 65ce7d4eb0da4bc6fc5a5d07d5f99d2932231a60 Mon Sep 17 00:00:00 2001
From: Enric Tobella
Date: Mon, 21 Sep 2020 17:29:25 +0200
Subject: [PATCH 11/19] [IMP] stock_barcodes_gs1: Allow the use of double
GS1-128 barcodes
---
stock_barcodes_gs1/__manifest__.py | 2 +-
stock_barcodes_gs1/i18n/ca.po | 51 +++++++++++++++++++
stock_barcodes_gs1/i18n/es.po | 10 ++--
.../tests/test_stock_barcodes_gs1.py | 26 +++++++++-
.../wizard/stock_barcodes_read.py | 7 +++
5 files changed, 89 insertions(+), 7 deletions(-)
create mode 100644 stock_barcodes_gs1/i18n/ca.po
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 9c299ac3d2ce..2aa040709601 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "13.0.1.0.2",
+ "version": "13.0.1.0.3",
"author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://odoo-community.org/",
"license": "AGPL-3",
diff --git a/stock_barcodes_gs1/i18n/ca.po b/stock_barcodes_gs1/i18n/ca.po
new file mode 100644
index 000000000000..56b300ad5959
--- /dev/null
+++ b/stock_barcodes_gs1/i18n/ca.po
@@ -0,0 +1,51 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * stock_barcodes_gs1
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2021-05-11 12:47+0000\n"
+"Last-Translator: Haftec \n"
+"Language-Team: none\n"
+"Language: ca\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.3.2\n"
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
+#, python-format
+msgid "Barcode for product not found"
+msgstr "No s'ha trobat el codi de barres del producte"
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
+#, python-format
+msgid "Barcode for product packaging not found"
+msgstr "No s'ha trobat el codi de barres per a l'empaquetat del producte"
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
+#, python-format
+msgid "Barcode read correctly"
+msgstr "Codi de barres llegit correctament"
+
+#. module: stock_barcodes_gs1
+#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
+#, python-format
+msgid "More than one package found"
+msgstr "S'ha trobat més d'un empaquetat"
+
+#. module: stock_barcodes_gs1
+#: model:ir.model,name:stock_barcodes_gs1.model_wiz_stock_barcodes_new_lot
+msgid "Wizard to create new lot from barcode scanner"
+msgstr "Assistent per crear un lot nou des de l'escàner de codis de barres"
+
+#. module: stock_barcodes_gs1
+#: model:ir.model,name:stock_barcodes_gs1.model_wiz_stock_barcodes_read
+msgid "Wizard to read barcode"
+msgstr "Assistent per llegir codi de barres"
diff --git a/stock_barcodes_gs1/i18n/es.po b/stock_barcodes_gs1/i18n/es.po
index 3424eabe865a..a5ff1ebe317a 100644
--- a/stock_barcodes_gs1/i18n/es.po
+++ b/stock_barcodes_gs1/i18n/es.po
@@ -7,15 +7,15 @@ msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-08-27 14:47+0000\n"
-"PO-Revision-Date: 2019-08-27 16:48+0200\n"
-"Last-Translator: \n"
+"PO-Revision-Date: 2021-05-11 12:47+0000\n"
+"Last-Translator: Haftec \n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.0.6\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
#. module: stock_barcodes_gs1
#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
@@ -39,7 +39,7 @@ msgstr "Código de barras leído correctamente"
#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
msgid "More than one package found"
-msgstr "Se ha encontrado más de un empaquetado."
+msgstr "Se ha encontrado más de un empaquetado"
#. module: stock_barcodes_gs1
#: model:ir.model,name:stock_barcodes_gs1.model_wiz_stock_barcodes_new_lot
diff --git a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
index 0eb1fe569825..2950c7c3c12a 100644
--- a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
+++ b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
@@ -11,7 +11,9 @@ class TestStockBarcodesGS1(TestStockBarcodes):
def setUp(self):
super().setUp()
# Barcode for packaging and lot
- self.gs1_barcode_01 = "01195011015300001714070410AB-123"
+ self.gs1_barcode_01_product = "0119501101530000"
+ self.gs1_barcode_01_lot = "1714070410AB-123"
+ self.gs1_barcode_01 = self.gs1_barcode_01_product + self.gs1_barcode_01_lot
self.gs1_barcode_01_not_found = "011xxx11015300001714070410AB-123"
self.gs1_barcode_01_not_lot = "01195011015300001714070410AB-124"
# Barcode for product and quantities
@@ -35,6 +37,28 @@ def setUp(self):
}
)
+ def test_wizard_scan_gs1_package_multi(self):
+ self.packaging_gs1.product_id = self.product_tracking_gs1
+ lot = self.StockProductionLot.create(
+ {
+ "name": "AB-123",
+ "product_id": self.product_tracking_gs1.id,
+ "company_id": self.company.id,
+ }
+ )
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01_product)
+ self.assertEqual(self.wiz_scan.product_id, self.product_tracking_gs1)
+ self.assertEqual(self.wiz_scan.packaging_id, self.packaging_gs1)
+ self.assertFalse(self.wiz_scan.lot_id)
+ self.assertEqual(self.wiz_scan.packaging_qty, 1)
+ self.assertEqual(self.wiz_scan.product_qty, 10)
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01_lot)
+ self.assertEqual(self.wiz_scan.product_id, self.product_tracking_gs1)
+ self.assertEqual(self.wiz_scan.packaging_id, self.packaging_gs1)
+ self.assertEqual(self.wiz_scan.lot_id, lot)
+ self.assertEqual(self.wiz_scan.packaging_qty, 1)
+ self.assertEqual(self.wiz_scan.product_qty, 10)
+
def test_wizard_scan_gs1_package(self):
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01)
self.assertEqual(self.wiz_scan.packaging_id, self.packaging_gs1)
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index 8c0517c41010..5b1ec95ca213 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -78,6 +78,13 @@ def process_barcode(self, barcode):
processed = True
if product_qty:
self.product_qty = product_qty
+ if not self.product_qty:
+ # This could happen with double GS1-128 barcodes
+ if self.packaging_id:
+ self.packaging_qty = 0.0 if self.manual_entry else 1.0
+ self.product_qty = self.packaging_id.qty * self.packaging_qty
+ else:
+ self.product_qty = 0.0 if self.manual_entry else 1.0
if processed:
self.action_done()
self._set_messagge_info("success", _("Barcode read correctly"))
From 5c4683e4a4cc5c76c25dfa07e41780a8cf46d5c0 Mon Sep 17 00:00:00 2001
From: Enric Tobella
Date: Wed, 2 Jun 2021 11:11:13 +0200
Subject: [PATCH 12/19] [FIX] stock_barcodes_gs1 * Do not replace the quantity
if a package is readed, we should multiply it * Use the product barcode as a
packaging barcode if no packaging barcode has been read and no product has
been found
---
stock_barcodes_gs1/__manifest__.py | 2 +-
.../tests/test_stock_barcodes_gs1.py | 41 ++++++++++++++++++-
.../wizard/stock_barcodes_read.py | 11 ++++-
3 files changed, 50 insertions(+), 4 deletions(-)
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 2aa040709601..140545bee9fd 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "13.0.1.0.3",
+ "version": "13.0.1.1.0",
"author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://odoo-community.org/",
"license": "AGPL-3",
diff --git a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
index 2950c7c3c12a..56b8fe07c38c 100644
--- a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
+++ b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
@@ -13,6 +13,9 @@ def setUp(self):
# Barcode for packaging and lot
self.gs1_barcode_01_product = "0119501101530000"
self.gs1_barcode_01_lot = "1714070410AB-123"
+ self.gs1_separator = self.env.user.gs1_barcode_separator or "\x1D"
+ self.gs1_barcode_unit_01 = self.gs1_separator + "371"
+ self.gs1_barcode_unit_02 = self.gs1_separator + "372"
self.gs1_barcode_01 = self.gs1_barcode_01_product + self.gs1_barcode_01_lot
self.gs1_barcode_01_not_found = "011xxx11015300001714070410AB-123"
self.gs1_barcode_01_not_lot = "01195011015300001714070410AB-124"
@@ -78,6 +81,21 @@ def test_wizard_scan_gs1_package(self):
"(More than one package found)",
)
+ def test_wizard_scan_gs1_package_units(self):
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01)
+ self.assertEqual(self.wiz_scan.packaging_id, self.packaging_gs1)
+ self.assertEqual(self.wiz_scan.product_qty, 10)
+ self.action_barcode_scanned(
+ self.wiz_scan, self.gs1_barcode_01 + self.gs1_barcode_unit_01
+ )
+ self.assertEqual(self.wiz_scan.packaging_id, self.packaging_gs1)
+ self.assertEqual(self.wiz_scan.product_qty, 10)
+ self.action_barcode_scanned(
+ self.wiz_scan, self.gs1_barcode_01 + self.gs1_barcode_unit_02
+ )
+ self.assertEqual(self.wiz_scan.packaging_id, self.packaging_gs1)
+ self.assertEqual(self.wiz_scan.product_qty, 20)
+
def test_wizard_scan_gs1_product(self):
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_02)
self.assertEqual(self.wiz_scan.product_id, self.product_wo_tracking_gs1)
@@ -86,8 +104,29 @@ def test_wizard_scan_gs1_product(self):
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_02_not_found)
self.assertEqual(
self.wiz_scan.message,
- "Barcode: 020xxx0001234567150410183724 " "(Barcode for product not found)",
+ "Barcode: 020xxx0001234567150410183724 "
+ "(Barcode for product packaging not found)",
+ )
+
+ def test_wizard_scan_gs1_product_as_packaging(self):
+ self.product_wo_tracking_gs1.barcode = "X07010001234567Xg"
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_02)
+ self.assertEqual(
+ self.wiz_scan.message,
+ "Barcode: 0207010001234567150410183724 "
+ "(Barcode for product packaging not found)",
)
+ self.ProductPackaging.create(
+ {
+ "product_id": self.product_wo_tracking_gs1.id,
+ "name": "Barcode as package",
+ "qty": 2.0,
+ "barcode": "07010001234567",
+ }
+ )
+ self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_02)
+ self.assertEqual(self.wiz_scan.product_id, self.product_wo_tracking_gs1)
+ self.assertEqual(self.wiz_scan.product_qty, 48)
def test_wizard_scan_gs1_lot(self):
self.packaging_gs1.product_id = self.product_tracking_gs1
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index 5b1ec95ca213..2be6218bc7af 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -50,7 +50,11 @@ def process_barcode(self, barcode):
product = self.env["product.product"].search(
self._barcode_domain(product_barcode)
)
- if not product:
+ if not product and not package_barcode:
+ # If we did not found a product and we have not a package, maybe we
+ # can try to use this product barcode as a packaging barcode
+ package_barcode = product_barcode
+ elif not product:
self._set_messagge_info("not_found", _("Barcode for product not found"))
return False
else:
@@ -76,7 +80,10 @@ def process_barcode(self, barcode):
if lot_barcode and self.product_id.tracking != "none":
self.process_lot(barcode_decoded)
processed = True
- if product_qty:
+ if product_qty and package_barcode:
+ # If we have processed a package, we need to multiply it
+ self.product_qty = self.product_qty * product_qty
+ elif product_qty:
self.product_qty = product_qty
if not self.product_qty:
# This could happen with double GS1-128 barcodes
From 8ad5b878df48f510481b6230712806b7783e620a Mon Sep 17 00:00:00 2001
From: Jasmin Solanki
Date: Wed, 16 Feb 2022 11:31:50 +0530
Subject: [PATCH 13/19] [IMP] stock_barcodes_gs1: black, isort, prettier
---
stock_barcodes_gs1/__manifest__.py | 2 +-
stock_barcodes_gs1/wizard/stock_barcodes_read.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 140545bee9fd..6373fa76efcb 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -5,7 +5,7 @@
"summary": "It provides read GS1 barcode on stock operations.",
"version": "13.0.1.1.0",
"author": "Tecnativa, Odoo Community Association (OCA)",
- "website": "https://odoo-community.org/",
+ "website": "https://github.com/OCA/stock-logistics-barcode",
"license": "AGPL-3",
"category": "Extra Tools",
"depends": ["stock_barcodes", "base_gs1_barcode"],
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index 2be6218bc7af..c1791109aaed 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -29,7 +29,7 @@ def process_lot(self, barcode_decoded):
self.lot_id = lot
def process_barcode(self, barcode):
- """ Only has been implemented AI (01, 02, 10, 37), so is possible that
+ """Only has been implemented AI (01, 02, 10, 37), so is possible that
scanner reads a barcode ok but this one is not precessed.
"""
try:
From a2da250c6f0b69bf67b2b66f5647668cbabb1ba2 Mon Sep 17 00:00:00 2001
From: Jasmin Solanki
Date: Wed, 16 Feb 2022 12:35:11 +0530
Subject: [PATCH 14/19] [MIG] stock_barcodes_gs1: Migration to 14.0
---
stock_barcodes_gs1/README.rst | 10 +++++-----
stock_barcodes_gs1/__manifest__.py | 2 +-
.../i18n/stock_barcodes_gs1.pot | 20 ++++++++++++++++++-
.../static/description/index.html | 6 +++---
.../tests/test_stock_barcodes_new_lot_gs1.py | 4 +---
5 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/stock_barcodes_gs1/README.rst b/stock_barcodes_gs1/README.rst
index 676c4c33a2c0..c56956ea31ba 100644
--- a/stock_barcodes_gs1/README.rst
+++ b/stock_barcodes_gs1/README.rst
@@ -14,13 +14,13 @@ Stock Barcodes GS1
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--barcode-lightgray.png?logo=github
- :target: https://github.com/OCA/stock-logistics-barcode/tree/13.0/stock_barcodes_gs1
+ :target: https://github.com/OCA/stock-logistics-barcode/tree/14.0/stock_barcodes_gs1
:alt: OCA/stock-logistics-barcode
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-13-0/stock-logistics-barcode-13-0-stock_barcodes_gs1
+ :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-14-0/stock-logistics-barcode-14-0-stock_barcodes_gs1
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/150/13.0
+ :target: https://runbot.odoo-community.org/runbot/150/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -45,7 +45,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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -80,6 +80,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub.
+This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 6373fa76efcb..7418e0d7970e 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "13.0.1.1.0",
+ "version": "14.0.1.0.0",
"author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/stock-logistics-barcode",
"license": "AGPL-3",
diff --git a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
index 27e1ecaa051b..7606769b2d7b 100644
--- a/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
+++ b/stock_barcodes_gs1/i18n/stock_barcodes_gs1.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -31,6 +31,24 @@ msgstr ""
msgid "Barcode read correctly"
msgstr ""
+#. module: stock_barcodes_gs1
+#: model:ir.model.fields,field_description:stock_barcodes_gs1.field_wiz_stock_barcodes_new_lot__display_name
+#: model:ir.model.fields,field_description:stock_barcodes_gs1.field_wiz_stock_barcodes_read__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: stock_barcodes_gs1
+#: model:ir.model.fields,field_description:stock_barcodes_gs1.field_wiz_stock_barcodes_new_lot__id
+#: model:ir.model.fields,field_description:stock_barcodes_gs1.field_wiz_stock_barcodes_read__id
+msgid "ID"
+msgstr ""
+
+#. module: stock_barcodes_gs1
+#: model:ir.model.fields,field_description:stock_barcodes_gs1.field_wiz_stock_barcodes_new_lot____last_update
+#: model:ir.model.fields,field_description:stock_barcodes_gs1.field_wiz_stock_barcodes_read____last_update
+msgid "Last Modified on"
+msgstr ""
+
#. module: stock_barcodes_gs1
#: code:addons/stock_barcodes_gs1/wizard/stock_barcodes_read.py:0
#, python-format
diff --git a/stock_barcodes_gs1/static/description/index.html b/stock_barcodes_gs1/static/description/index.html
index 1723a4efa42f..35cc12413d76 100644
--- a/stock_barcodes_gs1/static/description/index.html
+++ b/stock_barcodes_gs1/static/description/index.html
@@ -367,7 +367,7 @@ Stock Barcodes GS1
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module extends barcode reader interface to allow to read GS1 barcodes.
The AI’s implemented are 01(Group), 02(Product), 37(Quantity) and 10(Lots).
Table of contents
@@ -392,7 +392,7 @@
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 smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
diff --git a/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py b/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
index 271c546b156d..188be5523442 100644
--- a/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
+++ b/stock_barcodes_gs1/tests/test_stock_barcodes_new_lot_gs1.py
@@ -2,9 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests import common
-from odoo.addons.stock_barcodes_gs1.tests.test_stock_barcodes_gs1 import (
- TestStockBarcodesGS1,
-)
+from .test_stock_barcodes_gs1 import TestStockBarcodesGS1
@common.tagged("post_install", "-at_install")
From d4bca0e637f86f142971467ff1dc8be6da8de8d7 Mon Sep 17 00:00:00 2001
From: Lois Rilo
Date: Tue, 15 Mar 2022 17:57:44 +0100
Subject: [PATCH 15/19] [FIX] stock_barcodes_gs1: take company from env
---
stock_barcodes_gs1/__manifest__.py | 2 +-
stock_barcodes_gs1/wizard/stock_barcodes_read.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 7418e0d7970e..801d32bd809f 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "14.0.1.0.0",
+ "version": "14.0.1.0.1",
"author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/stock-logistics-barcode",
"license": "AGPL-3",
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index c1791109aaed..a94269e28a91 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -11,7 +11,7 @@ def _prepare_lot_values(self, barcode_decoded):
return {
"name": lot_barcode,
"product_id": self.product_id.id,
- "company_id": self.env.user.company_id.id,
+ "company_id": self.env.company.id,
}
def _create_lot(self, barcode_decoded):
From c8fccdbf3932f3bee39f6c0c1d87b044a28e35a8 Mon Sep 17 00:00:00 2001
From: sergio-teruel
Date: Wed, 27 Oct 2021 21:20:41 +0200
Subject: [PATCH 16/19] [IMP] stock_barcodes: Refactoring code and improvements
---
.../tests/test_stock_barcodes_gs1.py | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
index 56b8fe07c38c..487856e0eb72 100644
--- a/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
+++ b/stock_barcodes_gs1/tests/test_stock_barcodes_gs1.py
@@ -39,6 +39,8 @@ def setUp(self):
"barcode": "19501101530000",
}
)
+ # Set location to avoid crash tests
+ self.wiz_scan.location_id = self.location_1
def test_wizard_scan_gs1_package_multi(self):
self.packaging_gs1.product_id = self.product_tracking_gs1
@@ -69,7 +71,7 @@ def test_wizard_scan_gs1_package(self):
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01_not_found)
self.assertEqual(
self.wiz_scan.message,
- "Barcode: 011xxx11015300001714070410AB-123 "
+ "011xxx11015300001714070410AB-123 "
"(Barcode for product packaging not found)",
)
# Scan packaging barcode with more than one package
@@ -77,8 +79,7 @@ def test_wizard_scan_gs1_package(self):
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01)
self.assertEqual(
self.wiz_scan.message,
- "Barcode: 01195011015300001714070410AB-123 "
- "(More than one package found)",
+ "01195011015300001714070410AB-123 " "(More than one package found)",
)
def test_wizard_scan_gs1_package_units(self):
@@ -97,6 +98,7 @@ def test_wizard_scan_gs1_package_units(self):
self.assertEqual(self.wiz_scan.product_qty, 20)
def test_wizard_scan_gs1_product(self):
+ self.wiz_scan.location_id = self.location_1
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_02)
self.assertEqual(self.wiz_scan.product_id, self.product_wo_tracking_gs1)
self.assertEqual(self.wiz_scan.product_qty, 24)
@@ -104,8 +106,7 @@ def test_wizard_scan_gs1_product(self):
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_02_not_found)
self.assertEqual(
self.wiz_scan.message,
- "Barcode: 020xxx0001234567150410183724 "
- "(Barcode for product packaging not found)",
+ "020xxx0001234567150410183724 (Barcode for product packaging not found)",
)
def test_wizard_scan_gs1_product_as_packaging(self):
@@ -113,8 +114,7 @@ def test_wizard_scan_gs1_product_as_packaging(self):
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_02)
self.assertEqual(
self.wiz_scan.message,
- "Barcode: 0207010001234567150410183724 "
- "(Barcode for product packaging not found)",
+ "0207010001234567150410183724 " "(Barcode for product packaging not found)",
)
self.ProductPackaging.create(
{
@@ -141,7 +141,7 @@ def test_wizard_scan_gs1_lot(self):
self.assertEqual(self.wiz_scan.lot_id, lot)
self.assertEqual(
self.wiz_scan.message,
- "Barcode: 01195011015300001714070410AB-123 " "(Barcode read correctly)",
+ "01195011015300001714070410AB-123 " "(Barcode read correctly)",
)
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01_not_lot)
self.assertEqual(self.wiz_scan.lot_id.name, "AB-124")
@@ -150,7 +150,7 @@ def test_wizard_scan_gs1_not_found(self):
self.action_barcode_scanned(self.wiz_scan, self.gs1_barcode_01_not_processed)
self.assertEqual(
self.wiz_scan.message,
- "Barcode: 0199316710123453310100262013050417"
+ "0199316710123453310100262013050417"
"10ABC123214145354 (Barcode for product packaging "
"not found)",
)
From e13621316eab8bd62ceface61eb1cc0c326bac2a Mon Sep 17 00:00:00 2001
From: Lois Rilo
Date: Thu, 7 Jul 2022 13:22:08 +0200
Subject: [PATCH 17/19] [IMP] stock_barcodes_gs1: improvements after refactor
of stock_barcodes
* Auto create lot controlled from barcode options.
* Check required options before processing.
* Reduce complexity of `process_barcode` and enhance extensibility
of package barcode processing.
* More extensibility on product_qty handling.
* Align new lot wizard with barcodes read one by adding support to
AI 240
---
stock_barcodes_gs1/__manifest__.py | 2 +-
.../wizard/stock_barcodes_read.py | 44 ++++++++++++-------
.../wizard/stock_production_lot.py | 5 +++
3 files changed, 33 insertions(+), 18 deletions(-)
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 801d32bd809f..6de5d195c66b 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "14.0.1.0.1",
+ "version": "14.0.2.0.0",
"author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/stock-logistics-barcode",
"license": "AGPL-3",
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index a94269e28a91..aa03f0e6a694 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -24,10 +24,29 @@ def process_lot(self, barcode_decoded):
lot = self.env["stock.production.lot"].search(
[("name", "=", lot_barcode), ("product_id", "=", self.product_id.id)]
)
- if not lot:
+ if not lot and self.option_group_id.create_lot:
lot = self._create_lot(barcode_decoded)
self.lot_id = lot
+ def _process_product_qty_gs1(self, product_qty):
+ """Extend for custom processing of product qty."""
+ return product_qty
+
+ def process_barcode_package(self, package_barcode, processed):
+ packaging = self.env["product.packaging"].search(
+ self._barcode_domain(package_barcode)
+ )
+ if not packaging:
+ self._set_messagge_info(
+ "not_found", _("Barcode for product packaging not found")
+ )
+ return False
+ else:
+ if len(packaging) > 1:
+ self._set_messagge_info("more_match", _("More than one package found"))
+ return False
+ self.action_packaging_scaned_post(packaging)
+
def process_barcode(self, barcode):
"""Only has been implemented AI (01, 02, 10, 37), so is possible that
scanner reads a barcode ok but this one is not precessed.
@@ -61,29 +80,18 @@ def process_barcode(self, barcode):
processed = True
self.action_product_scaned_post(product)
if package_barcode:
- packaging = self.env["product.packaging"].search(
- self._barcode_domain(package_barcode)
- )
- if not packaging:
- self._set_messagge_info(
- "not_found", _("Barcode for product packaging not found")
- )
- return False
- else:
- if len(packaging) > 1:
- self._set_messagge_info(
- "more_match", _("More than one package found")
- )
- return False
- processed = True
- self.action_packaging_scaned_post(packaging)
+ value_returned = self.process_barcode_package(package_barcode, processed)
+ if value_returned is not None:
+ return value_returned
if lot_barcode and self.product_id.tracking != "none":
self.process_lot(barcode_decoded)
processed = True
if product_qty and package_barcode:
# If we have processed a package, we need to multiply it
+ product_qty = self._process_product_qty_gs1(product_qty)
self.product_qty = self.product_qty * product_qty
elif product_qty:
+ product_qty = self._process_product_qty_gs1(product_qty)
self.product_qty = product_qty
if not self.product_qty:
# This could happen with double GS1-128 barcodes
@@ -93,6 +101,8 @@ def process_barcode(self, barcode):
else:
self.product_qty = 0.0 if self.manual_entry else 1.0
if processed:
+ if not self.check_option_required():
+ return False
self.action_done()
self._set_messagge_info("success", _("Barcode read correctly"))
return True
diff --git a/stock_barcodes_gs1/wizard/stock_production_lot.py b/stock_barcodes_gs1/wizard/stock_production_lot.py
index 5ccf9fe1a497..167cd17e105c 100644
--- a/stock_barcodes_gs1/wizard/stock_production_lot.py
+++ b/stock_barcodes_gs1/wizard/stock_production_lot.py
@@ -17,6 +17,11 @@ def on_barcode_scanned(self, barcode):
return super().on_barcode_scanned(barcode)
package_barcode = barcode_decoded.get("01", False)
product_barcode = barcode_decoded.get("02", False)
+ if not product_barcode:
+ # Sometimes the product does not yet have a GTIN. In this case
+ # try the AI 240 'Additional product identification assigned
+ # by the manufacturer'.
+ product_barcode = barcode_decoded.get("240", False)
lot_barcode = barcode_decoded.get("10", False)
if not lot_barcode:
return
From 17673c322e5a1385ce5c7e66b2050269155e4b11 Mon Sep 17 00:00:00 2001
From: sergio-teruel
Date: Fri, 5 Aug 2022 12:06:56 +0200
Subject: [PATCH 18/19] [FIX] stock_barcodes_gs1: Do action_confirm after gs1
is readed instead of action_done
---
stock_barcodes_gs1/__manifest__.py | 2 +-
stock_barcodes_gs1/wizard/stock_barcodes_read.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index 6de5d195c66b..df007d7ef83d 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "14.0.2.0.0",
+ "version": "14.0.2.0.1",
"author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/stock-logistics-barcode",
"license": "AGPL-3",
diff --git a/stock_barcodes_gs1/wizard/stock_barcodes_read.py b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
index aa03f0e6a694..c8614c0149c5 100644
--- a/stock_barcodes_gs1/wizard/stock_barcodes_read.py
+++ b/stock_barcodes_gs1/wizard/stock_barcodes_read.py
@@ -103,7 +103,7 @@ def process_barcode(self, barcode):
if processed:
if not self.check_option_required():
return False
- self.action_done()
+ self.action_confirm()
self._set_messagge_info("success", _("Barcode read correctly"))
return True
return super().process_barcode(barcode)
From 8e7e8aac792d03f267f38c5161d4e86cddb3d052 Mon Sep 17 00:00:00 2001
From: sergio-teruel
Date: Thu, 16 Feb 2023 23:59:08 +0100
Subject: [PATCH 19/19] [MIG] stock_barcodes_gs1: Migration to v15.0
---
.../models/barcode_generate_mixin.py | 2 +-
.../odoo/addons/stock_barcodes_gs1 | 1 +
setup/stock_barcodes_gs1/setup.py | 6 ++++++
stock_barcodes_gs1/README.rst | 14 +++++++-------
stock_barcodes_gs1/__manifest__.py | 2 +-
stock_barcodes_gs1/static/description/index.html | 8 ++++----
.../tests/test_stock_barcodes_gs1.py | 2 +-
7 files changed, 21 insertions(+), 14 deletions(-)
create mode 120000 setup/stock_barcodes_gs1/odoo/addons/stock_barcodes_gs1
create mode 100644 setup/stock_barcodes_gs1/setup.py
diff --git a/barcodes_generator_abstract/models/barcode_generate_mixin.py b/barcodes_generator_abstract/models/barcode_generate_mixin.py
index 9f5706d395ad..7a552cd36551 100644
--- a/barcodes_generator_abstract/models/barcode_generate_mixin.py
+++ b/barcodes_generator_abstract/models/barcode_generate_mixin.py
@@ -6,7 +6,7 @@
import logging
-import barcode
+import barcode # pylint: disable=W7936
from odoo import _, api, exceptions, fields, models
diff --git a/setup/stock_barcodes_gs1/odoo/addons/stock_barcodes_gs1 b/setup/stock_barcodes_gs1/odoo/addons/stock_barcodes_gs1
new file mode 120000
index 000000000000..204b6b05edf9
--- /dev/null
+++ b/setup/stock_barcodes_gs1/odoo/addons/stock_barcodes_gs1
@@ -0,0 +1 @@
+../../../../stock_barcodes_gs1
\ No newline at end of file
diff --git a/setup/stock_barcodes_gs1/setup.py b/setup/stock_barcodes_gs1/setup.py
new file mode 100644
index 000000000000..28c57bb64031
--- /dev/null
+++ b/setup/stock_barcodes_gs1/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)
diff --git a/stock_barcodes_gs1/README.rst b/stock_barcodes_gs1/README.rst
index c56956ea31ba..0293d2c52b5d 100644
--- a/stock_barcodes_gs1/README.rst
+++ b/stock_barcodes_gs1/README.rst
@@ -14,14 +14,14 @@ Stock Barcodes GS1
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--barcode-lightgray.png?logo=github
- :target: https://github.com/OCA/stock-logistics-barcode/tree/14.0/stock_barcodes_gs1
+ :target: https://github.com/OCA/stock-logistics-barcode/tree/15.0/stock_barcodes_gs1
:alt: OCA/stock-logistics-barcode
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-14-0/stock-logistics-barcode-14-0-stock_barcodes_gs1
+ :target: https://translation.odoo-community.org/projects/stock-logistics-barcode-15-0/stock-logistics-barcode-15-0-stock_barcodes_gs1
:alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/150/14.0
- :alt: Try me on Runbot
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/webui/builds.html?repo=OCA/stock-logistics-barcode&target_branch=15.0
+ :alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -45,7 +45,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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -80,6 +80,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub.
+This module is part of the `OCA/stock-logistics-barcode `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_barcodes_gs1/__manifest__.py b/stock_barcodes_gs1/__manifest__.py
index df007d7ef83d..8a5d0e6478fd 100644
--- a/stock_barcodes_gs1/__manifest__.py
+++ b/stock_barcodes_gs1/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Stock Barcodes GS1",
"summary": "It provides read GS1 barcode on stock operations.",
- "version": "14.0.2.0.1",
+ "version": "15.0.1.0.0",
"author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/stock-logistics-barcode",
"license": "AGPL-3",
diff --git a/stock_barcodes_gs1/static/description/index.html b/stock_barcodes_gs1/static/description/index.html
index 35cc12413d76..c10c9d710dcc 100644
--- a/stock_barcodes_gs1/static/description/index.html
+++ b/stock_barcodes_gs1/static/description/index.html
@@ -3,7 +3,7 @@
-
+
Stock Barcodes GS1