Browse Source

Apr 25 [UPDT] : Bug Fixed 'product_barcode'

pull/275/head
AjmalCybro 2 years ago
parent
commit
8adc73a3c0
  1. 2
      product_barcode/__manifest__.py
  2. 39
      product_barcode/models/product_form.py

2
product_barcode/__manifest__.py

@ -22,7 +22,7 @@
{ {
'name': 'Product Barcode Generator', 'name': 'Product Barcode Generator',
'version': '14.0.2.0.0', 'version': '14.0.2.0.1',
'summary': 'Generates EAN13 Standard Barcode for Product.', 'summary': 'Generates EAN13 Standard Barcode for Product.',
'live_test_url': 'https://www.youtube.com/watch?v=0BrFcOEkWu4&feature=youtu.be', 'live_test_url': 'https://www.youtube.com/watch?v=0BrFcOEkWu4&feature=youtu.be',
'category': 'Inventory', 'category': 'Inventory',

39
product_barcode/models/product_form.py

@ -31,16 +31,8 @@ class ProductAutoBarcode(models.Model):
@api.model @api.model
def create(self, vals): def create(self, vals):
res = super(ProductAutoBarcode, self).create(vals) res = super(ProductAutoBarcode, self).create(vals)
barcode_id = res.id ean = generate_ean(str(res.id))
barcode_search = False res.barcode = '21' + ean[2:]
while not barcode_search:
ean = generate_ean(str(barcode_id))
if self.env['product.product'].search([('barcode', '=', ean)]):
barcode_search = False
barcode_id += 1
else:
barcode_search = True
res.barcode = ean
return res return res
@ -65,7 +57,6 @@ def ean_checksum(eancode):
check = int(10 - math.ceil(total % 10.0)) % 10 check = int(10 - math.ceil(total % 10.0)) % 10
return check return check
def check_ean(eancode): def check_ean(eancode):
"""returns True if eancode is a valid ean13 string, or null""" """returns True if eancode is a valid ean13 string, or null"""
if not eancode: if not eancode:
@ -76,20 +67,17 @@ def check_ean(eancode):
int(eancode) int(eancode)
except: except:
return False return False
return ean_checksum(eancode) == int(eancode[-1]) return ean_checksum(eancode)
def generate_ean(ean): def generate_ean(ean):
"""Creates and returns a valid ean13 from an invalid one""" """Creates and returns a valid ean13 from an invalid one"""
if not ean: if not ean:
return "0000000000000" return "0000000000000"
ean = re.sub("[A-Za-z]", "0", ean) product_identifier = '00000000000' + ean
ean = re.sub("[^0-9]", "", ean) ean = product_identifier[-11:]
ean = ean[:13] check_number = check_ean(ean + '00')
if len(ean) < 13: return f'{ean}0{check_number}'
ean = ean + '0' * (13 - len(ean))
print("barcode : ", ean[:-1] + str(ean_checksum(ean)))
return ean[:-1] + str(ean_checksum(ean))
class ProductTemplateAutoBarcode(models.Model): class ProductTemplateAutoBarcode(models.Model):
@ -98,17 +86,8 @@ class ProductTemplateAutoBarcode(models.Model):
@api.model @api.model
def create(self, vals_list): def create(self, vals_list):
templates = super(ProductTemplateAutoBarcode, self).create(vals_list) templates = super(ProductTemplateAutoBarcode, self).create(vals_list)
barcode_id = templates.id ean = generate_ean(str(templates.id))
barcode_search = False templates.barcode = '22' + ean[2:]
while not barcode_search:
ean = generate_ean(str(barcode_id))
if self.env['product.product'].search([('barcode', '=', ean)]):
barcode_search = False
barcode_id += 1
else:
barcode_search = True
templates.barcode = ean
return templates return templates
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
Loading…
Cancel
Save