|
@ -21,7 +21,6 @@ |
|
|
############################################################################# |
|
|
############################################################################# |
|
|
|
|
|
|
|
|
import math |
|
|
import math |
|
|
import re |
|
|
|
|
|
from odoo import api, models |
|
|
from odoo import api, models |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -30,9 +29,10 @@ class ProductAutoBarcode(models.Model): |
|
|
|
|
|
|
|
|
@api.model |
|
|
@api.model |
|
|
def create(self, vals): |
|
|
def create(self, vals): |
|
|
|
|
|
"""generate barcode when create new product""" |
|
|
res = super(ProductAutoBarcode, self).create(vals) |
|
|
res = super(ProductAutoBarcode, self).create(vals) |
|
|
ean = generate_ean(str(res.id)) |
|
|
ean = generate_ean(str(res.id)) |
|
|
res.barcode = ean |
|
|
res.barcode = '21' + ean[2:] |
|
|
return res |
|
|
return res |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -68,19 +68,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)) |
|
|
|
|
|
return ean[:-1] + str(ean_checksum(ean)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProductTemplateAutoBarcode(models.Model): |
|
|
class ProductTemplateAutoBarcode(models.Model): |
|
@ -88,10 +86,8 @@ class ProductTemplateAutoBarcode(models.Model): |
|
|
|
|
|
|
|
|
@api.model |
|
|
@api.model |
|
|
def create(self, vals_list): |
|
|
def create(self, vals_list): |
|
|
|
|
|
"""generate barcode number when create new product""" |
|
|
templates = super(ProductTemplateAutoBarcode, self).create(vals_list) |
|
|
templates = super(ProductTemplateAutoBarcode, self).create(vals_list) |
|
|
ean = generate_ean(str(templates.id)) |
|
|
ean = generate_ean(str(templates.id)) |
|
|
templates.barcode = ean |
|
|
templates.barcode = '22' + ean[2:] |
|
|
return templates |
|
|
return templates |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
|
|
|
|
|