Index: uc_order.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/ubercart/uc_order/uc_order.module,v
retrieving revision 1.12.2.40
diff -u -r1.12.2.40 uc_order.module
--- uc_order.module	11 Aug 2010 15:10:46 -0000	1.12.2.40
+++ uc_order.module	18 Aug 2010 23:47:56 -0000
@@ -1888,3 +1888,60 @@
 
   return $can_delete;
 }
+
+/**
+ *
+ * Implementation of hook_nodeapi
+ *
+ * This hook is required to remove old stock information on product delete and SKU change (during product update process)
+ * Otherwise all this information still coming up in stock reports
+ */
+function uc_stock_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
+
+  // If node is not product - exit here
+	if (uc_product_is_product($node) !== TRUE) {
+    return;
+  }
+
+	switch ($op) {
+    case 'delete':
+			uc_stock_remove_old_sku($node->nid);
+			break;
+
+    case 'presave':
+			if ($node->nid > 0) { // Only work with existing nodes - not new ones
+				$oldSkus = uc_stock_get_sku($node->nid);
+				if ($node->model != $oldSkus) {
+					uc_stock_remove_old_sku($node->nid);
+				}
+			}
+			break;
+
+      case 'load': // Just for programming convenience adding stock to $node object
+			$stock = uc_stock_level($node->model);
+			return array('stocklevel' => $stock);
+			break;
+	}
+}
+
+/**
+ * Getting SKU from ubercart (not Stock module) tables based on node id of the node being edited
+ * @param $nid: node id (int)
+ * @return (string) SKU
+ */
+function uc_stock_get_sku($nid) {
+	$query = db_query("SELECT model FROM {uc_products} WHERE nid = %d LIMIT 1", $nid);
+	$sku = db_fetch_object($query);
+
+	return $sku->model;
+}
+
+/**
+ * Deleting SKU data from Stock module tables
+ * @param $nid
+ * @return bool mysql result
+ */
+function uc_stock_remove_old_sku($nid) {
+	return db_query("DELETE FROM uc_product_stock WHERE nid = %d", $nid);
+}
+

