[IMP] Manufacture should be by default in all warehouses
[odoo/odoo.git] / addons / point_of_sale / tools / eanmaker
1 #!/usr/bin/python
2
3 import sys
4 import re
5 import math
6
7 def ean_checksum(eancode):
8     """returns the checksum of an ean string of length 13, returns -1 if the string has the wrong length"""
9     if len(eancode) <> 13:
10         return -1
11     oddsum=0
12     evensum=0
13     total=0
14     eanvalue=eancode
15     reversevalue = eanvalue[::-1]
16     finalean=reversevalue[1:]
17
18     for i in range(len(finalean)):
19         if i % 2 == 0:
20             oddsum += int(finalean[i])
21         else:
22             evensum += int(finalean[i])
23     total=(oddsum * 3) + evensum
24
25     check = int(10 - math.ceil(total % 10.0)) %10
26     return check
27
28 def check_ean(eancode):
29     """returns True if eancode is a valid ean13 string, or null"""
30     if not eancode:
31         return True
32     if len(eancode) <> 13:
33         return False
34     try:
35         int(eancode)
36     except:
37         return False
38     return ean_checksum(eancode) == int(eancode[-1])
39
40 def sanitize_ean13(ean13):
41     """Creates and returns a valid ean13 from an invalid one"""
42     if not ean13:
43         return "0000000000000"
44     ean13 = re.sub("[A-Za-z]","0",ean13);
45     ean13 = re.sub("[^0-9]","",ean13);
46     ean13 = ean13[:13]
47     if len(ean13) < 13:
48         ean13 = ean13 + '0' * (13-len(ean13))
49     return ean13[:-1] + str(ean_checksum(ean13))
50
51 def main():
52     for arg in sys.argv[1:]:
53         print sanitize_ean13(arg)
54
55 if __name__ == '__main__':
56     main()