diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index 9930a3fedff..94ecec9efe3 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -301,42 +301,43 @@ class sale_order_line(osv.osv): res['value'].update(res_packing.get('value', {})) warning_msgs = res_packing.get('warning') and res_packing['warning']['message'] or '' - #determine if the product is MTO or not (for a further check) - isMto = False - if warehouse_id: - warehouse = self.pool.get('stock.warehouse').browse(cr, uid, warehouse_id, context=context) - for product_route in product_obj.route_ids: - if warehouse.mto_pull_id and warehouse.mto_pull_id.route_id and warehouse.mto_pull_id.route_id.id == product_route.id: - isMto = True - break - else: - try: - mto_route_id = self.pool.get('ir.model.data').get_object(cr, uid, 'stock', 'route_warehouse0_mto').id - except: - # if route MTO not found in ir_model_data, we treat the product as in MTS - mto_route_id = False - if mto_route_id: + if product_obj.type == 'product': + #determine if the product is MTO or not (for a further check) + isMto = False + if warehouse_id: + warehouse = self.pool.get('stock.warehouse').browse(cr, uid, warehouse_id, context=context) for product_route in product_obj.route_ids: - if product_route.id == mto_route_id: + if warehouse.mto_pull_id and warehouse.mto_pull_id.route_id and warehouse.mto_pull_id.route_id.id == product_route.id: isMto = True break + else: + try: + mto_route_id = self.pool.get('ir.model.data').get_object(cr, uid, 'stock', 'route_warehouse0_mto').id + except: + # if route MTO not found in ir_model_data, we treat the product as in MTS + mto_route_id = False + if mto_route_id: + for product_route in product_obj.route_ids: + if product_route.id == mto_route_id: + isMto = True + break - #check if product is available, and if not: raise a warning, but do this only for products that aren't processed in MTO - if not isMto: - uom2 = False - if uom: - uom2 = product_uom_obj.browse(cr, uid, uom, context=context) - if product_obj.uom_id.category_id.id != uom2.category_id.id: - uom = False - if not uom2: - uom2 = product_obj.uom_id - compare_qty = float_compare(product_obj.virtual_available, qty, precision_rounding=uom2.rounding) - if (product_obj.type=='product') and int(compare_qty) == -1: - warn_msg = _('You plan to sell %.2f %s but you only have %.2f %s available !\nThe real stock is %.2f %s. (without reservations)') % \ - (qty, uom2.name, - max(0,product_obj.virtual_available), uom2.name, - max(0,product_obj.qty_available), uom2.name) - warning_msgs += _("Not enough stock ! : ") + warn_msg + "\n\n" + #check if product is available, and if not: raise a warning, but do this only for products that aren't processed in MTO + if not isMto: + uom_record = False + if uom: + uom_record = product_uom_obj.browse(cr, uid, uom, context=context) + if product_obj.uom_id.category_id.id != uom_record.category_id.id: + uom_record = False + if not uom_record: + uom_record = product_obj.uom_id + compare_qty = float_compare(product_obj.virtual_available, qty, precision_rounding=uom_record.rounding) + if compare_qty == -1: + warn_msg = _('You plan to sell %.2f %s but you only have %.2f %s available !\nThe real stock is %.2f %s. (without reservations)') % \ + (qty, uom_record.name, + max(0,product_obj.virtual_available), uom_record.name, + max(0,product_obj.qty_available), uom_record.name) + warning_msgs += _("Not enough stock ! : ") + warn_msg + "\n\n" #update of warning messages if warning_msgs: