reporting-engine/report_qr/models/ir_actions_report.py

37 lines
1.2 KiB
Python
Raw Normal View History

2021-03-23 19:37:36 +00:00
from flectra import api, models
import qrcode
from qrcode.image import svg, pil
import io
class IrActionsReport(models.Model):
_inherit = 'ir.actions.report'
@api.model
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:
# 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()
img.save(arr)
return arr.getvalue()
except Exception:
raise ValueError("Cannot convert into barcode.")