If you want generate the barcode for product in odoo You will need the following kind of python code declaration in your .py file:
from openerp.osv import fields, orm
from openerp.tools.translate import _
def isodd(x):
return bool(x % 2)
class product_product(orm.Model):
_inherit = 'product.product'
_columns = {
'ean_sequence_id': fields.many2one('ir.sequence', 'Ean Sequence'),
}
def _get_ean_next_code(self, cr, uid, product, context=None):
if context is None: context = {}
sequence_obj = self.pool.get('ir.sequence')
ean = ''
if product.ean_sequence_id:
ean = sequence_obj.next_by_id(cr, uid, product.ean_sequence_id.id, context=context)
elif product.categ_id.ean_sequence_id:
ean = sequence_obj.next_by_id(cr, uid, product.categ_id.ean_sequence_id.id, context=context)
elif product.company_id and product.company_id.ean_sequence_id:
ean = sequence_obj.next_by_id(cr, uid, product.company_id.ean_sequence_id.id, context=context)
else:
ean = sequence_obj.next_by_code(cr, uid, 'product.ean13.code', context=context)
if len(ean) > 12:
raise orm.except_orm(_("Configuration Error!"),
_("There next sequence is upper than 12 characters. This can't work."
"You will have to redefine the sequence or create a new one"))
else:
ean = (len(ean[0:6]) == 6 and ean[0:6] or ean[0:6].ljust(6,'0')) + ean[6:].rjust(6,'0')
return ean
def _get_ean_key(self, code):
sum = 0
for i in range(12):
if isodd(i):
sum += 3 * int(code[i])
else:
sum += int(code[i])
key = (10 - sum % 10) % 10
return str(key)
def _generate_ean13_value(self, cr, uid, product, context=None):
ean13 = False
if context is None: context = {}
ean = self._get_ean_next_code(cr, uid, product, context=context)
if len(ean) != 12:
raise orm.except_orm(_("Configuration Error!"),
_("This sequence is different than 12 characters. This can't work."
"You will have to redefine the sequence or create a new one"))
key = self._get_ean_key(ean)
ean13 = ean + key
return ean13
def generate_ean13(self, cr, uid, ids, context=None):
if context is None: context = {}
product_ids = self.browse(cr, uid, ids, context=context)
for product in product_ids:
if product.ean13:
continue
ean13 = self._generate_ean13_value(cr, uid, product, context=context)
self.write(cr, uid, [product.id], {
'ean13': ean13
}, context=context)
return True
def create(self, cr, uid, vals, context=None):
if context is None: context = {}
id = super(product_product, self).create(cr, uid, vals, context=context)
if not vals.get('ean13'):
ean13 = self.generate_ean13(cr, uid, [id], context=context)
return id
def copy(self, cr, uid, id, default=None, context=None):
if default is None: default = {}
if context is None: context = {}
default['ean13'] = False
return super(product_product, self).copy(cr, uid, id, default=default, context=context)
You can start printing barcode from any row and column on PDF.
0 Comment(s)