diff --git a/modules/order/commerce_order.install b/modules/order/commerce_order.install index 4aa42ec..d105b5d 100644 --- a/modules/order/commerce_order.install +++ b/modules/order/commerce_order.install @@ -82,7 +82,7 @@ function commerce_order_schema() { ), 'primary key' => array('order_id'), 'unique keys' => array( - 'order_number' => array('order_number'), + 'order_number' => array(array('order_number', 100), array('type', 100)), 'revision_id' => array('revision_id'), ), 'indexes' => array( @@ -471,3 +471,11 @@ function commerce_order_update_7109() { return t('Schema for the commerce_order table has been updated.'); } + +/** + * Made order_number to be unique only for commerce_order type. + */ +function commerce_order_update_7110() { + db_drop_unique_key('commerce_order', 'order_number'); + db_add_unique_key('commerce_order', 'order_number', array(array('order_number', 100), array('type', 100))); +} diff --git a/modules/order/commerce_order.module b/modules/order/commerce_order.module index 7bbe0e8..e2215f4 100644 --- a/modules/order/commerce_order.module +++ b/modules/order/commerce_order.module @@ -755,8 +755,8 @@ function commerce_order_load($order_id) { /** * Loads an order by number. */ -function commerce_order_load_by_number($order_number) { - $orders = commerce_order_load_multiple(array(), array('order_number' => $order_number)); +function commerce_order_load_by_number($order_number, $type = 'commerce_order') { + $orders = commerce_order_load_multiple(array(), array('order_number' => $order_number, 'type' => $type)); return $orders ? reset($orders) : FALSE; } @@ -971,14 +971,19 @@ function commerce_order_validate_number_characters($order_number) { * @param $order_id * The ID of the order the number is for; an empty value represents the number * is meant for a new order. + * @param $type + * The name of commerce order bundle. * * @return * TRUE or FALSE indicating whether or not the number exists for another * order. */ -function commerce_order_validate_number_unique($order_number, $order_id) { +function commerce_order_validate_number_unique($order_number, $order_id, $type = 'commerce_order') { // Look for an ID of an order matching the supplied number. - if ($match_id = db_query('SELECT order_id FROM {commerce_order} WHERE order_number = :order_number', array(':order_number' => $order_number))->fetchField()) { + if ($match_id = db_query('SELECT order_id FROM {commerce_order} WHERE order_number = :order_number AND type = :type', array( + ':order_number' => $order_number, + ':type' => $type, + ))->fetchField()) { // If this number is supposed to be for a new order or an order other than // the one that matched... if (empty($order_id) || $match_id != $order_id) {