X-Git-Url: http://git.inspyration.org/?a=blobdiff_plain;f=addons%2Fproduct%2Fproduct.py;fp=addons%2Fproduct%2Fproduct.py;h=fa35591c0b40805d29450757aff10399f6f2d9e7;hb=dc560a4dd0b6c109eede6b30c02ae4b34ca77c38;hp=589ff9e5cb7d54640dda306114e8138763489817;hpb=b5164698f255633e68e6c3b75f30eae8492326dc;p=odoo%2Fodoo.git diff --git a/addons/product/product.py b/addons/product/product.py index 589ff9e..fa35591 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -55,18 +55,6 @@ def ean_checksum(eancode): check = int(10 - math.ceil(total % 10.0)) %10 return check -def check_ean(eancode): - """returns True if eancode is a valid ean13 string, or null""" - if not eancode: - return True - if len(eancode) != 13: - return False - try: - int(eancode) - except: - return False - return ean_checksum(eancode) == int(eancode[-1]) - def sanitize_ean13(ean13): """Creates and returns a valid ean13 from an invalid one""" if not ean13: @@ -494,6 +482,7 @@ class product_template(osv.osv): _columns = { 'name': fields.char('Name', required=True, translate=True, select=True), + 'sequence': fields.integer('Sequence', help='Gives the sequence order when displaying a product list'), 'product_manager': fields.many2one('res.users','Product Manager'), 'description': fields.text('Description',translate=True, help="A precise description of the Product, used only for internal information purposes."), @@ -571,7 +560,7 @@ class product_template(osv.osv): 'product_variant_count': fields.function( _get_product_variant_count, type='integer', string='# of Product Variants'), # related to display product product information if is_product_variant - 'ean13': fields.related('product_variant_ids', 'ean13', type='char', string='EAN13 Barcode'), + 'barcode': fields.related('product_variant_ids', 'barcode', type='char', string='Barcode', oldname='ean13'), 'default_code': fields.related('product_variant_ids', 'default_code', type='char', string='Internal Reference'), } @@ -713,8 +702,8 @@ class product_template(osv.osv): # TODO: this is needed to set given values to first variant after creation # these fields should be moved to product as lead to confusion related_vals = {} - if vals.get('ean13'): - related_vals['ean13'] = vals['ean13'] + if vals.get('barcode'): + related_vals['barcode'] = vals['barcode'] if vals.get('default_code'): related_vals['default_code'] = vals['default_code'] if related_vals: @@ -760,6 +749,7 @@ class product_template(osv.osv): 'categ_id' : _default_category, 'type' : 'consu', 'active': True, + 'sequence': 1, } def _check_uom(self, cursor, user, ids, context=None): @@ -932,7 +922,7 @@ class product_product(osv.osv): 'default_code' : fields.char('Internal Reference', select=True), 'active': fields.boolean('Active', help="If unchecked, it will allow you to hide the product without removing it."), 'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True, ondelete="cascade", select=True, auto_join=True), - 'ean13': fields.char('EAN13 Barcode', size=13, help="International Article Number used for product identification."), + 'barcode': fields.char('Barcode', help="International Article Number used for product identification.", oldname='ean13'), 'name_template': fields.related('product_tmpl_id', 'name', string="Template Name", type='char', store={ 'product.template': (_get_name_template_ids, ['name'], 10), 'product.product': (lambda self, cr, uid, ids, c=None: ids, [], 10), @@ -989,14 +979,6 @@ class product_product(osv.osv): return {'value': {'uom_po_id': uom_id}} return False - def _check_ean_key(self, cr, uid, ids, context=None): - for product in self.read(cr, uid, ids, ['ean13'], context=context): - if not check_ean(product['ean13']): - return False - return True - - _constraints = [(_check_ean_key, 'You provided an invalid "EAN13 Barcode" reference. You may use the "Internal Reference" field instead.', ['ean13'])] - def on_order(self, cr, uid, ids, orderline, quantity): pass @@ -1062,7 +1044,7 @@ class product_product(osv.osv): if operator in positive_operators: ids = self.search(cr, user, [('default_code','=',name)]+ args, limit=limit, context=context) if not ids: - ids = self.search(cr, user, [('ean13','=',name)]+ args, limit=limit, context=context) + ids = self.search(cr, user, [('barcode','=',name)]+ args, limit=limit, context=context) if not ids and operator not in expression.NEGATIVE_TERM_OPERATORS: # Do not merge the 2 next lines into one single search, SQL search performance would be abysmal # on a database with thousands of matching products, due to the huge merge+unique needed for the @@ -1176,7 +1158,7 @@ class product_product(osv.osv): class product_packaging(osv.osv): _name = "product.packaging" _description = "Packaging" - _rec_name = 'ean' + _rec_name = 'barcode' _order = 'sequence' _columns = { 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of packaging."), @@ -1189,26 +1171,18 @@ class product_packaging(osv.osv): 'rows' : fields.integer('Number of Layers', required=True, help='The number of layers on a pallet or box'), 'product_tmpl_id' : fields.many2one('product.template', 'Product', select=1, ondelete='cascade', required=True), - 'ean' : fields.char('EAN', size=14, help="The EAN code of the package unit."), + 'barcode' : fields.char('Barcode', help="The Barcode of the package unit.", oldname="ean"), 'code' : fields.char('Code', help="The code of the transport unit."), 'weight': fields.float('Total Package Weight', help='The weight of a full package, pallet or box.'), } - def _check_ean_key(self, cr, uid, ids, context=None): - for pack in self.browse(cr, uid, ids, context=context): - if not check_ean(pack.ean): - return False - return True - - _constraints = [(_check_ean_key, 'Error: Invalid ean code', ['ean'])] - def name_get(self, cr, uid, ids, context=None): if not len(ids): return [] res = [] for pckg in self.browse(cr, uid, ids, context=context): - p_name = pckg.ean and '[' + pckg.ean + '] ' or '' + p_name = pckg.barcode and '[' + pckg.barcode + '] ' or '' p_name += pckg.ul.name res.append((pckg.id,p_name)) return res