From a947fc302de2015e9898286c10d87175292d9b0f Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Mon, 13 May 2019 15:23:47 +0200 Subject: [PATCH 01/17] [ADD] report_qr --- report_qr/README.rst | 107 ++++++ report_qr/__init__.py | 2 + report_qr/__manifest__.py | 18 + report_qr/controllers/__init__.py | 1 + report_qr/controllers/qr.py | 17 + report_qr/models/__init__.py | 1 + report_qr/models/ir_actions_report.py | 17 + report_qr/readme/CONTRIBUTORS.rst | 1 + report_qr/readme/DESCRIPTION.rst | 13 + report_qr/readme/USAGE.rst | 18 + report_qr/static/description/icon.png | Bin 0 -> 9455 bytes report_qr/static/description/index.html | 446 ++++++++++++++++++++++++ report_qr/static/description/new_qr.png | Bin 0 -> 271 bytes report_qr/static/description/old_qr.png | Bin 0 -> 4875 bytes report_qr/tests/__init__.py | 1 + report_qr/tests/test_report_qr.py | 21 ++ 16 files changed, 663 insertions(+) create mode 100644 report_qr/README.rst create mode 100644 report_qr/__init__.py create mode 100644 report_qr/__manifest__.py create mode 100644 report_qr/controllers/__init__.py create mode 100644 report_qr/controllers/qr.py create mode 100644 report_qr/models/__init__.py create mode 100644 report_qr/models/ir_actions_report.py create mode 100644 report_qr/readme/CONTRIBUTORS.rst create mode 100644 report_qr/readme/DESCRIPTION.rst create mode 100644 report_qr/readme/USAGE.rst create mode 100644 report_qr/static/description/icon.png create mode 100644 report_qr/static/description/index.html create mode 100644 report_qr/static/description/new_qr.png create mode 100644 report_qr/static/description/old_qr.png create mode 100644 report_qr/tests/__init__.py create mode 100644 report_qr/tests/test_report_qr.py diff --git a/report_qr/README.rst b/report_qr/README.rst new file mode 100644 index 0000000000..f644a132fa --- /dev/null +++ b/report_qr/README.rst @@ -0,0 +1,107 @@ +============== +Web QR Manager +============== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Freporting--engine-lightgray.png?logo=github + :target: https://github.com/OCA/reporting-engine/tree/11.0/report_qr + :alt: OCA/reporting-engine +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/reporting-engine-11-0/reporting-engine-11-0-report_qr + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/143/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to print QR in better structure than the standard odoo. + +The original image looks like the following + +.. figure:: https://raw.githubusercontent.com/OCA/reporting-engine/11.0/report_qr/static/description/old_qr.png + :alt: Original QR + :width: 100 px + +With the new generator, it looks like: + +.. figure:: https://raw.githubusercontent.com/OCA/reporting-engine/11.0/report_qr/static/description/new_qr.png + :alt: New QR + :width: 100 px + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +When creating new reports, you should use a path like the following:: + + + + +The **error_correction** parameter controls the error correction used for the QR Code. The following four constants are made available: + +* **error_correction** = 1: About 7% or less errors can be corrected. +* **error_correction** = 0: About 15% or less errors can be corrected. +* **error_correction** = 3: About 25% or less errors can be corrected. +* **error_correction** = 2: About 30% or less errors can be corrected. + +The **box_size** parameter controls how many pixels each "box" of the QR code is. The default is 3. +The **border** parameter controls how many boxes thick the border should be (the default is 4, which is the minimum according to the specs). + +The **version** parameter is an integer from 1 to 40 that controls the size of the QR Code (the smallest, version 1, is a 21x21 matrix). Set to None and use the fit parameter when making the code to determine this automatically. + +**fill_color** and **back_color** can change the background and the painting color of the QR, when using the default image factory. + +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 +~~~~~~~ + +* Creu Blanca + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella + +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/reporting-engine `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/report_qr/__init__.py b/report_qr/__init__.py new file mode 100644 index 0000000000..91c5580fed --- /dev/null +++ b/report_qr/__init__.py @@ -0,0 +1,2 @@ +from . import controllers +from . import models diff --git a/report_qr/__manifest__.py b/report_qr/__manifest__.py new file mode 100644 index 0000000000..4b5803c5e2 --- /dev/null +++ b/report_qr/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + 'name': 'Web QR Manager', + 'version': '11.0.1.0.0', + 'author': 'Creu Blanca, ' + 'Odoo Community Association (OCA)', + 'category': 'Sales', + 'website': 'https://github.com/OCA/reporting-engine', + 'license': 'AGPL-3', + 'depends': [ + 'web', + ], + 'data': [ + ], + 'installable': True, +} diff --git a/report_qr/controllers/__init__.py b/report_qr/controllers/__init__.py new file mode 100644 index 0000000000..da6b5392e6 --- /dev/null +++ b/report_qr/controllers/__init__.py @@ -0,0 +1 @@ +from . import qr diff --git a/report_qr/controllers/qr.py b/report_qr/controllers/qr.py new file mode 100644 index 0000000000..b0a12721e0 --- /dev/null +++ b/report_qr/controllers/qr.py @@ -0,0 +1,17 @@ +import werkzeug +from odoo import http +from odoo.http import request + + +class Home(http.Controller): + + @http.route('/report/qr', type='http', auth="public") + def report_qr(self, value, box_size=3, border=3, **kwargs): + try: + barcode = request.env['ir.actions.report'].qr_generate( + value, box_size=box_size, border=border, **kwargs) + except (ValueError, AttributeError): + raise werkzeug.exceptions.HTTPException( + description='Cannot convert into barcode.') + return request.make_response( + barcode, headers=[('Content-Type', 'image/png')]) diff --git a/report_qr/models/__init__.py b/report_qr/models/__init__.py new file mode 100644 index 0000000000..a248cf2162 --- /dev/null +++ b/report_qr/models/__init__.py @@ -0,0 +1 @@ +from . import ir_actions_report diff --git a/report_qr/models/ir_actions_report.py b/report_qr/models/ir_actions_report.py new file mode 100644 index 0000000000..e2dd160939 --- /dev/null +++ b/report_qr/models/ir_actions_report.py @@ -0,0 +1,17 @@ +from odoo import api, models +import qrcode +import io + + +class IrActionsReport(models.Model): + _inherit = 'ir.actions.report' + + @api.model + def qr_generate(self, value, box_size=3, border=5, **kwargs): + try: + qr = qrcode.make(value, box_size=box_size, border=border, **kwargs) + arr = io.BytesIO() + qr.save(arr, format='png') + return arr.getvalue() + except Exception: + raise ValueError("Cannot convert into barcode.") diff --git a/report_qr/readme/CONTRIBUTORS.rst b/report_qr/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..93ec993e04 --- /dev/null +++ b/report_qr/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Enric Tobella diff --git a/report_qr/readme/DESCRIPTION.rst b/report_qr/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..e4e45291b1 --- /dev/null +++ b/report_qr/readme/DESCRIPTION.rst @@ -0,0 +1,13 @@ +This module allows to print QR in better structure than the standard odoo. + +The original image looks like the following + +.. figure:: static/description/old_qr.png + :alt: Original QR + :width: 100 px + +With the new generator, it looks like: + +.. figure:: static/description/new_qr.png + :alt: New QR + :width: 100 px diff --git a/report_qr/readme/USAGE.rst b/report_qr/readme/USAGE.rst new file mode 100644 index 0000000000..365558ad65 --- /dev/null +++ b/report_qr/readme/USAGE.rst @@ -0,0 +1,18 @@ +When creating new reports, you should use a path like the following:: + + + + +The **error_correction** parameter controls the error correction used for the QR Code. The following four constants are made available: + +* **error_correction** = 1: About 7% or less errors can be corrected. +* **error_correction** = 0: About 15% or less errors can be corrected. +* **error_correction** = 3: About 25% or less errors can be corrected. +* **error_correction** = 2: About 30% or less errors can be corrected. + +The **box_size** parameter controls how many pixels each "box" of the QR code is. The default is 3. +The **border** parameter controls how many boxes thick the border should be (the default is 4, which is the minimum according to the specs). + +The **version** parameter is an integer from 1 to 40 that controls the size of the QR Code (the smallest, version 1, is a 21x21 matrix). Set to None and use the fit parameter when making the code to determine this automatically. + +**fill_color** and **back_color** can change the background and the painting color of the QR, when using the default image factory. diff --git a/report_qr/static/description/icon.png b/report_qr/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/report_qr/static/description/index.html b/report_qr/static/description/index.html new file mode 100644 index 0000000000..99f52e2c1a --- /dev/null +++ b/report_qr/static/description/index.html @@ -0,0 +1,446 @@ + + + + + + +Web QR Manager + + + +
+

Web QR Manager

+ + +

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runbot

+

This module allows to print QR in better structure than the standard odoo.

+

The original image looks like the following

+
+Original QR +
+

With the new generator, it looks like:

+
+New QR +
+

Table of contents

+ +
+

Usage

+

When creating new reports, you should use a path like the following:

+
+<img t-att-src="'/report/qr/?value=%s&amp;error_correction=%s' % ('HELLO WORLD!', 3)" style="width:100;height:100"/>
+
+

The error_correction parameter controls the error correction used for the QR Code. The following four constants are made available:

+
    +
  • error_correction = 1: About 7% or less errors can be corrected.
  • +
  • error_correction = 0: About 15% or less errors can be corrected.
  • +
  • error_correction = 3: About 25% or less errors can be corrected.
  • +
  • error_correction = 2: About 30% or less errors can be corrected.
  • +
+

The box_size parameter controls how many pixels each “box” of the QR code is. The default is 3. +The border parameter controls how many boxes thick the border should be (the default is 4, which is the minimum according to the specs).

+

The version parameter is an integer from 1 to 40 that controls the size of the QR Code (the smallest, version 1, is a 21x21 matrix). Set to None and use the fit parameter when making the code to determine this automatically.

+

fill_color and back_color can change the background and the painting color of the QR, when using the default image factory.

+
+
+

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

+
    +
  • Creu Blanca
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

This module is part of the OCA/reporting-engine project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/report_qr/static/description/new_qr.png b/report_qr/static/description/new_qr.png new file mode 100644 index 0000000000000000000000000000000000000000..6b4848f12f27bf665b124de0051eaf911ed7eed5 GIT binary patch literal 271 zcmV+q0r38bP)WD31SdTMfyDVANicOXPV}F&Q-_!K z^?fNZKBX*t>o>h3hvSxLTH_$(eg~TeX$}*L3Mw`1Rhj6=0f1~{@Jx*3fTET(npT{@ z$eY#>1Hj-y%vn)uxzYAEJqN6t1<)N5E`@yZo;dE5N%ok7t+}xX(|GJ{!32D^kK;4gmP^IJ?)f25Y+u4BV-qC^m4%r7K+%cL0C*uQyP9 VMc37qqBZ~k002ovPDHLkV1mNXZ?FIW literal 0 HcmV?d00001 diff --git a/report_qr/static/description/old_qr.png b/report_qr/static/description/old_qr.png new file mode 100644 index 0000000000000000000000000000000000000000..73958fa99591e7c9562ad61c68f5accfdf3b6865 GIT binary patch literal 4875 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 BP&WVo literal 0 HcmV?d00001 diff --git a/report_qr/tests/__init__.py b/report_qr/tests/__init__.py new file mode 100644 index 0000000000..c7c57bc296 --- /dev/null +++ b/report_qr/tests/__init__.py @@ -0,0 +1 @@ +from . import test_report_qr diff --git a/report_qr/tests/test_report_qr.py b/report_qr/tests/test_report_qr.py new file mode 100644 index 0000000000..e6f5bf7a3c --- /dev/null +++ b/report_qr/tests/test_report_qr.py @@ -0,0 +1,21 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import HttpCase + + +class TestReportQr(HttpCase): + + def test_qr_generation(self): + data = 'TEST' + image = self.url_open('/report/qr?value=%s' % data) + self.assertEqual(image.headers['Content-type'], 'image/png') + + def test_qr_overflow(self): + """There is a QR limitation for 4296 characters, we will test that an + Exception is raised""" + new_data = '' + for i in range(0, 1500): + new_data += 'TEST' + with self.assertRaises(Exception): + self.env['ir.actions.report'].qr_generate(new_data) From 0cf88da15f3c9534a104b1902536de53bf6b3d3f Mon Sep 17 00:00:00 2001 From: David Date: Thu, 19 Sep 2019 14:26:53 +0200 Subject: [PATCH 02/17] [IMP] report_qr: Allow to use SVG as output --- report_qr/README.rst | 4 ++++ report_qr/controllers/qr.py | 8 ++++++-- report_qr/i18n/report_qr.pot | 20 ++++++++++++++++++++ report_qr/models/ir_actions_report.py | 25 ++++++++++++++++++++++--- report_qr/readme/CONTRIBUTORS.rst | 4 ++++ report_qr/static/description/index.html | 6 +++++- 6 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 report_qr/i18n/report_qr.pot diff --git a/report_qr/README.rst b/report_qr/README.rst index f644a132fa..5b7ba48842 100644 --- a/report_qr/README.rst +++ b/report_qr/README.rst @@ -89,6 +89,10 @@ Contributors * Enric Tobella +* `Tecnativa `_: + + * David Vidal + Maintainers ~~~~~~~~~~~ diff --git a/report_qr/controllers/qr.py b/report_qr/controllers/qr.py index b0a12721e0..50b74fef8b 100644 --- a/report_qr/controllers/qr.py +++ b/report_qr/controllers/qr.py @@ -6,12 +6,16 @@ class Home(http.Controller): @http.route('/report/qr', type='http', auth="public") - def report_qr(self, value, box_size=3, border=3, **kwargs): + def report_qr(self, value, box_size=3, border=3, factory='png', **kwargs): try: barcode = request.env['ir.actions.report'].qr_generate( - value, box_size=box_size, border=border, **kwargs) + value, box_size=box_size, border=border, + factory=factory, **kwargs) except (ValueError, AttributeError): raise werkzeug.exceptions.HTTPException( description='Cannot convert into barcode.') + if factory != 'png': + return request.make_response( + barcode, headers=[('Content-Type', 'image/svg+xml')]) return request.make_response( barcode, headers=[('Content-Type', 'image/png')]) diff --git a/report_qr/i18n/report_qr.pot b/report_qr/i18n/report_qr.pot new file mode 100644 index 0000000000..b7b3d8d16d --- /dev/null +++ b/report_qr/i18n/report_qr.pot @@ -0,0 +1,20 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_qr +# +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: report_qr +#: model:ir.model,name:report_qr.model_ir_actions_report +msgid "ir.actions.report" +msgstr "" + diff --git a/report_qr/models/ir_actions_report.py b/report_qr/models/ir_actions_report.py index e2dd160939..9fc4ec6379 100644 --- a/report_qr/models/ir_actions_report.py +++ b/report_qr/models/ir_actions_report.py @@ -1,5 +1,6 @@ from odoo import api, models import qrcode +from qrcode.image import svg, pil import io @@ -7,11 +8,29 @@ class IrActionsReport(models.Model): _inherit = 'ir.actions.report' @api.model - def qr_generate(self, value, box_size=3, border=5, **kwargs): + def qr_generate(self, value, box_size=3, border=5, + factory='png', **kwargs): + factories = { + 'png': pil.PilImage, + 'svg': svg.SvgImage, + 'svg-fragment': svg.SvgFragmentImage, + 'svg-path': svg.SvgPathImage, + } + # Color parameters seem to be inverted in the library + back_color = kwargs.pop("back_color", "black") + fill_color = kwargs.pop("fill_color", "white") try: - qr = qrcode.make(value, box_size=box_size, border=border, **kwargs) + # Defaults to png if the argument is unknown + image_factory = factories.get(factory, pil.PilImage) + qr = qrcode.QRCode( + box_size=box_size, border=border, + image_factory=image_factory, **kwargs) + qr.add_data(value) + qr.make() + img = qr.make_image(fill_color=fill_color, + back_color=back_color) arr = io.BytesIO() - qr.save(arr, format='png') + img.save(arr) return arr.getvalue() except Exception: raise ValueError("Cannot convert into barcode.") diff --git a/report_qr/readme/CONTRIBUTORS.rst b/report_qr/readme/CONTRIBUTORS.rst index 93ec993e04..ba55fe73fc 100644 --- a/report_qr/readme/CONTRIBUTORS.rst +++ b/report_qr/readme/CONTRIBUTORS.rst @@ -1 +1,5 @@ * Enric Tobella + +* `Tecnativa `_: + + * David Vidal diff --git a/report_qr/static/description/index.html b/report_qr/static/description/index.html index 99f52e2c1a..4595badd78 100644 --- a/report_qr/static/description/index.html +++ b/report_qr/static/description/index.html @@ -3,7 +3,7 @@ - + Web QR Manager -
-

Web QR Manager

+
+ + +Odoo Community Association + +
+

Web QR Manager

-

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runboat

This module allows to print QR in better structure than the standard odoo.

The original image looks like the following

@@ -390,7 +395,7 @@

Web QR Manager

-

Usage

+

Usage

When creating new reports, you should use a path like the following:

 <img t-att-src="'/report/qr/?value=%s&amp;error_correction=%s' % ('HELLO WORLD!', 3)" style="width:100;height:100"/>
@@ -415,7 +420,7 @@ 

Usage

painting color of the QR, when using the default image factory.

-

Bug Tracker

+

Bug Tracker

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

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Creu Blanca
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -454,5 +459,6 @@

Maintainers

+
diff --git a/report_qr/tests/test_report_qr.py b/report_qr/tests/test_report_qr.py index 56ddf27fc0..280b62e282 100644 --- a/report_qr/tests/test_report_qr.py +++ b/report_qr/tests/test_report_qr.py @@ -7,7 +7,7 @@ class TestReportQr(HttpCase): def test_qr_generation(self): data = "TEST" - image = self.url_open("/report/qr?value=%s" % data) + image = self.url_open(f"/report/qr?value={data}") self.assertEqual(image.headers["Content-type"], "image/png") def test_qr_overflow(self): From e31ea4f34145f57559d574989dc44017c2201291 Mon Sep 17 00:00:00 2001 From: Don Kendall Date: Mon, 15 Jun 2026 15:10:03 -0400 Subject: [PATCH 16/17] [IMP] report_qr: pre-commit auto fixes Signed-off-by: Don Kendall --- report_qr/README.rst | 16 ++++++++-------- report_qr/static/description/index.html | 14 +++++++------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/report_qr/README.rst b/report_qr/README.rst index c8fd719430..4d185b1f05 100644 --- a/report_qr/README.rst +++ b/report_qr/README.rst @@ -11,7 +11,7 @@ Web QR Manager !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ffc224f11cbced82001a630f127329f541f40db2637dffb1c5fc9133de642cb9 + !! source digest: sha256:0abb25654696b74625fde2a93b1730532574594789883405a883106fd34e6ab8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -21,13 +21,13 @@ Web QR Manager :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github - :target: https://github.com/OCA/reporting-engine/tree/18.0/report_qr + :target: https://github.com/OCA/reporting-engine/tree/19.0/report_qr :alt: OCA/reporting-engine .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/reporting-engine-18-0/reporting-engine-18-0-report_qr + :target: https://translation.odoo-community.org/projects/reporting-engine-19-0/reporting-engine-19-0-report_qr :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -43,8 +43,8 @@ With the new generator, it looks like: |image2| -.. |image1| image:: https://raw.githubusercontent.com/OCA/reporting-engine/18.0/report_qr/static/description/old_qr.png -.. |image2| image:: https://raw.githubusercontent.com/OCA/reporting-engine/18.0/report_qr/static/description/new_qr.png +.. |image1| image:: https://raw.githubusercontent.com/OCA/reporting-engine/19.0/report_qr/static/description/old_qr.png +.. |image2| image:: https://raw.githubusercontent.com/OCA/reporting-engine/19.0/report_qr/static/description/new_qr.png **Table of contents** @@ -87,7 +87,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -120,6 +120,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/reporting-engine `_ project on GitHub. +This module is part of the `OCA/reporting-engine `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/report_qr/static/description/index.html b/report_qr/static/description/index.html index 865be0b4d7..e99f6d348d 100644 --- a/report_qr/static/description/index.html +++ b/report_qr/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Web QR Manager