[IMP] sale_stock: do not verify inventory for non-stockable products (sale.order...
authorOlivier Dony <odo@openerp.com>
Fri, 8 Aug 2014 11:49:10 +0000 (13:49 +0200)
committerOlivier Dony <odo@openerp.com>
Fri, 8 Aug 2014 12:37:14 +0000 (14:37 +0200)
addons/sale_stock/sale_stock.py

index 9930a3f..94ecec9 100644 (file)
@@ -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: