Permalink
Browse files

Merge pull request #29 from ovnicraft/8.0

Migrate report_webkit_barcode to 8.0
  • Loading branch information...
gurneyalex committed May 4, 2016
2 parents 969e263 + 2af4a2e commit 4f83804ce5b1cd689f8086aea11a88d10044fe3a
@@ -0,0 +1,95 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
=====================
Webkit Report Barcode
=====================
This module Add barcodes in webkit reports
Usage
=====
To embed a barcode image in a webkit report, use ``${helper.barcode(value)}``.
Depending on template filtering, you might need to force not to use any filter
by doing ``${helper.barcode(value) | safe}``
The function is defined as:
barcode(value, code='Code128', drawOpts=None, htmlAttrs=None)
Parameters
----------
value
Value for barcode as expected by barcode type. Code128 takes a number or
numeric string
code
barcode type. ReportLab 2.5 has the following codes: Codabar, Code11,
Code128, EAN13, EAN8, Extended39, Extended93, FIM, I2of5, MSI, POSTNET, QR,
Standard39, Standard93, USPS_4State
drawOpts
dictionary of options for reportlab graphic. Depends on barcode type. Use
*format* to specify image format (default png), *width* to specify image
width in pixels (int), *height* to specify image height in pixels (int)
htmlAttrs
dictionary of html attributes
Requirements
------------
This module depends on reportlab and lxml, which are both part of the odoo
installation.
#. Go to ...
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/{repo_id}/{branch}
.. repo_id is available in https://github.com/OCA/maintainer-tools/blob/master/tools/repos_with_ids.txt
.. branch is "8.0" for example
Known issues / Roadmap
======================
* ...
Bug Tracker
===========
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/{project_repo}/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
<https://github.com/OCA/
{project_repo}/issues/new?body=module:%20
{module_name}%0Aversion:%20
{branch}%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Images
------
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
Contributors
------------
* Vincent Vinet <vincent.vinet@savoirfairelinux.com>
* Cristian Salamea <ovnicraft@gmail.com>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
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.
To contribute to this module, please visit https://odoo-community.org.
@@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
# © 2014 Savoir-faire Linux
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import helper_barcode
helper_barcode.patch_helper()
@@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
# © 2014 Savoir-faire Linux
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Webkit Report Barcode',
'version': '8.0.1.0.0',
'author': "Savoir-faire Linux,Odoo Community Association (OCA)",
'maintainer': 'Savoir-faire Linux',
'website': 'http://www.savoirfairelinux.com',
'license': 'AGPL-3',
'category': 'Reports/Webkit',
'depends': [
'report_webkit',
],
'installable': True,
}
@@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
# © 2014 Savoir-faire Linux
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
from openerp.addons.report_webkit.report_helper import WebKitHelper
_logger = logging.getLogger(__name__)
def patch_helper():
try:
# Reportlab also has createBarcodeDrawingInMemory. Unfortunately, it
# is broken in 2.5, so we'll have to do the same thing it does in 3.0
from reportlab.graphics.barcode import createBarcodeDrawing
from lxml.etree import tostring as HTML, Element
except ImportError, e:
_logger.warn("Failed to import required dependency: %s", e[0])
return
def barcode(self, value, code='Code128', drawOpts=None, htmlAttrs=None):
""" Generate a <img /> tag with embedded barcode
Params:
- value: barcode value, must be valid for barcode type
- code: barcode type, as per reportlab.graphics.barcode.getCodes()
- drawOpts: options for the reportlab barcode
- htmlAttrs: attributes for <img /> tag
"""
drawOpts = (drawOpts or {})
imgtype = drawOpts.pop('format', 'png')
attrs = (htmlAttrs or {})
drawOpts['value'] = value
for k in ('width', 'height'):
# Attempt to unify drawing and image sizes to prevent accidental
# scaling, and reduce parameter duplication
if k in drawOpts and k not in attrs:
attrs[k] = "{0}px".format(drawOpts[k])
elif k in attrs and k not in drawOpts:
# reportlab expects a float
value = str(attrs[k])
if value.endswith("px"):
value = value[:-2].strip()
try:
value = float(value)
except ValueError:
# Ignore values that we can't handle
pass
else:
drawOpts[k] = value
data = createBarcodeDrawing(code, **drawOpts).asString(imgtype)
attrs['src'] = "data:image/{1};base64,{0}".format(
data.encode('base64'), imgtype,
)
return HTML(Element('img', attrs))
WebKitHelper.barcode = barcode
Binary file not shown.

0 comments on commit 4f83804

Please sign in to comment.