diff --git a/odoo/addons/base/models/ir_actions_report.py b/odoo/addons/base/models/ir_actions_report.py
index db3b875fad3..c4c37111860 100644
--- a/odoo/addons/base/models/ir_actions_report.py
+++ b/odoo/addons/base/models/ir_actions_report.py
@@ -507,6 +507,9 @@ class IrActionsReport(models.Model):
barcode_type = 'EAN13'
if len(value) in (11, 12):
value = '0%s' % value
+ elif barcode_type == 'auto':
+ symbology_guess = {8: 'EAN8', 13: 'EAN13'}
+ barcode_type = symbology_guess.get(len(value), 'Code128')
try:
width, height, humanreadable, quiet = int(width), int(height), bool(int(humanreadable)), bool(int(quiet))
# for `QR` type, `quiet` is not supported. And is simply ignored.
diff --git a/odoo/addons/base/models/ir_qweb_fields.py b/odoo/addons/base/models/ir_qweb_fields.py
index 653533ebf1e..73a54807424 100644
--- a/odoo/addons/base/models/ir_qweb_fields.py
+++ b/odoo/addons/base/models/ir_qweb_fields.py
@@ -651,17 +651,25 @@ class BarcodeConverter(models.AbstractModel):
width=dict(type='integer', string=_('Width'), default_value=600),
height=dict(type='integer', string=_('Height'), default_value=100),
humanreadable=dict(type='integer', string=_('Human Readable'), default_value=0),
+ quiet=dict(type='integer', string='Quiet', default_value=1),
+ mask=dict(type='string', string='Mask', default_value='')
)
return options
@api.model
def value_to_html(self, value, options=None):
+ if not value:
+ return ''
barcode_symbology = options.get('symbology', 'Code128')
barcode = self.env['ir.actions.report'].barcode(
barcode_symbology,
value,
- **{key: value for key, value in options.items() if key in ['width', 'height', 'humanreadable']})
- return u'' % base64.b64encode(barcode).decode('ascii')
+ **{key: value for key, value in options.items() if key in ['width', 'height', 'humanreadable', 'quiet', 'mask']})
+ img_attributes = {k[4:]: v for k, v in options.items() if k.startswith('img_')}
+ if 'alt' not in img_attributes:
+ img_attributes.update({'alt': 'Barcode %s' % value})
+ attributes = ' '.join(['%s="%s"' % attrs for attrs in img_attributes.items()])
+ return u'
' % (base64.b64encode(barcode).decode('ascii'), attributes)
class Contact(models.AbstractModel):
diff --git a/odoo/addons/base/tests/test_qweb.py b/odoo/addons/base/tests/test_qweb.py
index 5c80d204a19..72de3e9c3e9 100644
--- a/odoo/addons/base/tests/test_qweb.py
+++ b/odoo/addons/base/tests/test_qweb.py
@@ -557,6 +557,30 @@ class TestQWebNS(TransactionCase):
rendered = view2.with_context(lang=current_lang)._render().strip()
self.assertEqual(rendered, b'9/000/000*00')
+ def test_render_barcode(self):
+ partner = self.env['res.partner'].create({
+ 'name': 'bacode_test',
+ 'barcode': 'test'
+ })
+
+ view = self.env['ir.ui.view'].create({
+ 'name': "a_barcode_view",
+ 'type': 'qweb',
+ })
+
+ view.arch = u"""