Ciao un modulo pronto non ci sta, ma puoi usare questo che ho fatto io per strutturare l'ean.
necessita di una libreria esterna che si chiama pybarcode.
Ti allego il codice che ho scritto. Io compongo il barcode dal codice fornitore + il default_code del prodotto.
Se ti servono criteri differenti modifica il codice qui di seguito:
class product_product(osv.osv):
_inherit = 'product.product'
def create(self, cr, uid, vals, context={}):
if not vals['ean13'] and vals['default_code']:
if len(vals['seller_ids']) > 0:
code = unicode(vals['seller_ids'][0][2]['name']).rjust(5,'0') + unicode(vals['default_code']).rjust(7, '0')
else:
code = unicode(vals['default_code']).rjust(12, '0')
vals['ean13'] = barcode.get_barcode('ean13', code).get_fullcode()
return super(product_product, self).create(cr, uid, vals, context)
def write(self, cr, uid, ids, vals, context={}):
if len(ids) > 1:
return super(product_product, self).write(cr, uid, ids, vals, context)
product = self.pool.get('product.product')
p = product.browse(cr, uid, ids[0], context)
if 'ean13' not in vals or not vals['ean13']:
if 'seller_ids' in vals:
code = unicode(vals['seller_ids'][0][2]['name']).rjust(5,'0')
elif len(p.seller_ids) > 0:
code = unicode(p.seller_ids[0].id).rjust(5,'0')
else:
code = unicode('').rjust(5,'0')
if 'default_code' in vals:
code += unicode(vals['default_code']).rjust(7,'0')
else:
code += unicode(p.default_code).rjust(7,'0')
vals['ean13'] = barcode.get_barcode('ean13', code).get_fullcode()
return super(product_product, self).write(cr, uid, ids, vals, context)
product_product()
o per comodità
dpaste.com/hold/803633/
ciao fabrizio