You will need the following kind of python code  declaration in your .py file:
 class product_category(orm.Model):
    _inherit = 'product.category'
    _columns = {
        'ean_sequence_id': fields.many2one('ir.sequence', 'Ean Sequence'),
    }
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)