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

    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 379
    Comment on it

    If you want to generate the barcode for product in openERP .Then you will need the following kind of python code declaration in your .py file and run in Odoo server.

    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) 
    
    After that we have to go in .XML file :
    
    <?xml version="1.0" encoding="utf-8"?> 
    <openerp> 
        <data> 
            
            <record id="view_product_category_simple_ean_form" model="ir.ui.view"> 
                <field name="name">product.category.form</field> 
                <field name="model">product.category</field> 
                <field name="inherit_id" ref="product.product_category_form_view"/> 
                <field name="arch" type="xml"> 
                    <field name="type" position="after"> 
                        <field name="ean_sequence_id" domain="[('barcode_sequence', '=', 1)]" 
                            context="{'default_name': name and 'EAN ' + name or 'EAN', 'default_barcode_sequence': 1}"/> 
                        <newline/> 
                    </field> 
                </field> 
            </record> 
            
    		<record id="view_product_simple_ean_form" model="ir.ui.view"> 
    			<field name="name">product.product.form</field> 
    			<field name="model">product.product</field> 
    			<field name="inherit_id" ref="product.product_normal_form_view"/> 
    			<field name="arch" type="xml"> 
    				<field name="ean13" position="after"> 
                        <field name="ean_sequence_id" domain="[('barcode_sequence', '=', 1)]" 
                            context="{'default_name': name and 'EAN ' + name or 'EAN', 'default_barcode_sequence': 1}" 
                            class="oe_edit_only"/> 
    					<button 
    						string="Generate the EAN13" 
    						name="generate_ean13" 
    						attrs="{'invisible': [('ean13', '!=', False)]}" 
    						type="object" colspan="2"/> 
    				</field> 
    			</field> 
    		</record> 
            
        </data> 
    </openerp>
    

    Note-> You can start printing bar-code from any row and column on PDF in reporting tools.

 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: