=== modified file 'uc_order/uc_order.ca.inc'
--- uc_order/uc_order.ca.inc	2009-09-09 23:01:34 +0000
+++ uc_order/uc_order.ca.inc	2009-09-15 19:38:52 +0000
@@ -587,7 +587,7 @@
 function uc_order_condition_has_products($order, $settings) {
   $products = array();
   foreach ($order->products as $product) {
-    $products[] = $product->nid;
+    $products[] = $product->model;
   }
   $required = array_intersect($settings['products'], $products);
   if ($settings['required']) {
@@ -626,13 +626,15 @@
     ),
     '#default_value' => $settings['forbidden'],
   );
+
   $options = array();
-  $result = db_query("SELECT nid, model FROM {uc_products}");
+  $result = db_query("SELECT nid FROM {uc_products}");
   while ($product = db_fetch_object($result)) {
-    $options[$product->nid] = $product->model;
+    $options += uc_product_get_models(node_load($product), FALSE);
   }
+
   $form['products'] = array('#type' => 'select',
-    '#title' => t('Products'),
+    '#title' => t('Product models'),
     '#options' => $options,
     '#default_value' => $settings['products'],
     '#multiple' => TRUE,

=== modified file 'uc_order/uc_order.install'
--- uc_order/uc_order.install	2009-08-18 16:18:33 +0000
+++ uc_order/uc_order.install	2009-09-15 21:36:22 +0000
@@ -1065,3 +1065,63 @@
   return $ret;
 }
 
+/**
+ * Convert the settings for the uc_order_condition_has_products to models.
+ */
+function uc_order_update_6013() {
+  $ret = array();
+
+  $models = array();
+  $count = 0;
+
+  $result = db_query("SELECT pid, conditions FROM {ca_predicates} WHERE conditions LIKE '%%uc_order_condition_has_products%%'");
+  while ($predicate = db_fetch_object($result)) {
+    $conditions = unserialize($predicate->conditions);
+
+    $save = uc_order_6013_condition_helper($conditions['#conditions'], $predicate->pid);
+
+    if ($save) {
+      db_query("UPDATE {ca_predicates} SET conditions = '%s' WHERE pid = '%s'", serialize($conditions), $predicate->pid);
+      $count++;
+    }
+  }
+
+  $t = get_t();
+  $ret[] = array('success' => TRUE, 'query' => $t('Fixed %count predicates with the condition "uc_order_condition_has_products".', array('%count' => $count)));
+
+  return $ret;
+}
+
+function uc_order_6013_condition_helper(&$conditions, $pid, $save = FALSE) {
+  foreach ($conditions as $key => &$condition) {
+    if (isset($condition['#conditions'])) {
+      $save = uc_order_6013_condition_helper($condition['#conditions'], $pid, $save);
+    }
+    else {
+      if ($condition['#name'] == 'uc_order_condition_has_products' && isset($condition['#settings']['products'])) {
+        $save = TRUE;
+        $products = array();
+
+        foreach ($condition['#settings']['products'] as $x => $nid) {
+          // The "Any" setting will be an empty string.
+          if (is_numeric($nid)) {
+            if (!isset($models[$nid])) {
+              // Get the latest revision's model.
+              $models[$nid] = db_result(db_query("SELECT p.model FROM {uc_product} AS p LEFT JOIN {node} AS n ON n.vid = p.vid WHERE n.nid = %d", $nid));
+            }
+
+            $model = $models[$nid];
+          }
+          else {
+            $model = $nid;
+          }
+
+          $condition['#settings']['products'][$x] = $model;
+        }
+      }
+    }
+  }
+
+  return $save;
+}
+

