OCA reporting engine fork for dev and update.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

36 lines
1.2 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. from odoo import api, models
  2. import qrcode
  3. from qrcode.image import svg, pil
  4. import io
  5. class IrActionsReport(models.Model):
  6. _inherit = 'ir.actions.report'
  7. @api.model
  8. def qr_generate(self, value, box_size=3, border=5,
  9. factory='png', **kwargs):
  10. factories = {
  11. 'png': pil.PilImage,
  12. 'svg': svg.SvgImage,
  13. 'svg-fragment': svg.SvgFragmentImage,
  14. 'svg-path': svg.SvgPathImage,
  15. }
  16. # Color parameters seem to be inverted in the library
  17. back_color = kwargs.pop("back_color", "black")
  18. fill_color = kwargs.pop("fill_color", "white")
  19. try:
  20. # Defaults to png if the argument is unknown
  21. image_factory = factories.get(factory, pil.PilImage)
  22. qr = qrcode.QRCode(
  23. box_size=box_size, border=border,
  24. image_factory=image_factory, **kwargs)
  25. qr.add_data(value)
  26. qr.make()
  27. img = qr.make_image(fill_color=fill_color,
  28. back_color=back_color)
  29. arr = io.BytesIO()
  30. img.save(arr)
  31. return arr.getvalue()
  32. except Exception:
  33. raise ValueError("Cannot convert into barcode.")