Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
 
  • How to generate the barcode for product in Odoo9 ?

    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 407
    Comment on it

    Barcode is the most important part of point dale module its indicate the unique number of any product in stocks. So 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_template(orm.Model): 
    #    _inherit = 'product.template' 
    # 
    #    _columns = { 
    #        'variants': fields.one2many('product.product', 'product_tmpl_id', 'Variants'), 
    #    } 
    #    
    #    def generate_ean13(self, cr, uid, ids, context=None): 
    #        if context is None: context = {} 
    #        product_obj = self.pool.get('product.product') 
    #        templates = self.browse(cr, uid, ids, context=context) 
    #        for template in templates: 
    #            variant_ids = [x.id for x in template.variant_ids] 
    #            product_obj.generate_ean13(cr, uid, variant_ids, context=context) 
    #        return True 
    
    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) 
    
    

    Note-You can start printing barcode from any row and column on PDF.

 0 Comment(s)

Sign In
                           OR                           
                           OR                           
Register

Sign up using

                           OR                           
Forgot Password
Fill out the form below and instructions to reset your password will be emailed to you:
Reset Password
Fill out the form below and reset your password: