|
|
@ -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.") |