[IMP]Product:EAN code validation check on product_packaging bug:606325

bzr revid: ron@tinyerp.com-20101119130208-u6akfv119p6n0lnu
This commit is contained in:
ron@tinyerp.com 2010-11-19 18:32:08 +05:30
parent 5b647eb30c
commit 05a612012c
1 changed files with 38 additions and 27 deletions

View File

@ -30,6 +30,34 @@ from tools.translate import _
def is_pair(x):
return not x%2
def check_ean(ean_code):
if not ean_code:
return True
if len(ean_code) not in [13,14,8]:
return False
try:
int(ean_code)
except:
return False
oddsum=0
evensum=0
total=0
eanvalue=ean_code
reversevalue = eanvalue[::-1]
finalean=reversevalue[1:]
for i in range(len(finalean)):
if is_pair(i):
oddsum += int(finalean[i])
else:
evensum += int(finalean[i])
total=(oddsum * 3) + evensum
check = int(10 - math.ceil(total % 10.0))
if check != int(ean_code[-1]):
return False
return True
#----------------------------------------------------------
# UOM
#----------------------------------------------------------
@ -448,33 +476,8 @@ class product_product(osv.osv):
def _check_ean_key(self, cr, uid, ids):
for partner in self.browse(cr, uid, ids):
if not partner.ean13:
continue
if len(partner.ean13) not in [13,14,8]:
return False
try:
int(partner.ean13)
except:
return False
oddsum=0
evensum=0
total=0
eanvalue=partner.ean13
reversevalue = eanvalue[::-1]
finalean=reversevalue[1:]
for i in range(len(finalean)):
if is_pair(i):
oddsum += int(finalean[i])
else:
evensum += int(finalean[i])
total=(oddsum * 3) + evensum
check = int(10 - math.ceil(total % 10.0))
if check != int(partner.ean13[-1]):
return False
return True
res = check_ean(partner.ean13)
return res
_constraints = [(_check_ean_key, 'Error: Invalid ean code', ['ean13'])]
@ -604,6 +607,14 @@ class product_packaging(osv.osv):
}
def _check_ean_key_r(self, cr, uid, ids):
for partner in self.browse(cr, uid, ids):
res = check_ean(partner.ean)
return res
_constraints = [(_check_ean_key_r, 'Error: Invalid ean code', ['ean'])]
def name_get(self, cr, uid, ids, context={}):
if not len(ids):
return []