diff --git a/uc_order/uc_order.ca.inc b/uc_order/uc_order.ca.inc index 9bde735..8631383 100644 --- a/uc_order/uc_order.ca.inc +++ b/uc_order/uc_order.ca.inc @@ -58,6 +58,17 @@ function uc_order_ca_trigger() { ), ); + $triggers['uc_order_delete'] = array( + '#title' => t('An order is being deleted'), + '#category' => t('Order'), + '#arguments' => array( + 'order' => array( + '#entity' => 'uc_order', + '#title' => t('Order'), + ), + ), + ); + return $triggers; } diff --git a/uc_order/uc_order.module b/uc_order/uc_order.module index dc55ca8..f309132 100644 --- a/uc_order/uc_order.module +++ b/uc_order/uc_order.module @@ -1226,6 +1226,7 @@ function uc_order_delete($order_id) { // Perform the operations if we're deleting a valid order. if ($order !== FALSE) { + ca_pull_trigger('uc_order_delete', $order); uc_order_module_invoke('delete', $order, NULL); // Delete data from the appropriate Ubercart order tables. diff --git a/uc_stock/uc_stock.ca.inc b/uc_stock/uc_stock.ca.inc index d1308ca..8db6330 100644 --- a/uc_stock/uc_stock.ca.inc +++ b/uc_stock/uc_stock.ca.inc @@ -30,6 +30,155 @@ function uc_stock_ca_predicate() { ), ); + $predicates['uc_stock_increment_on_cancel'] = array( + '#title' => t('Increment stock on cancelling order'), + '#trigger' => 'uc_order_status_update', + '#conditions' => array( + '#operator' => 'AND', + '#conditions' => array( + array( + '#name' => 'uc_order_status_condition', + '#title' => t('If the order status is Cancelled.'), + '#argument_map' => array( + 'order' => 'updated_order', + ), + '#settings' => array( + 'order_status' => 'canceled', + ), + ), + array( + '#name' => 'uc_order_status_condition', + '#title' => t('If the order status wasn\'t Canceled.'), + '#argument_map' => array( + 'order' => 'order', + ), + '#settings' => array( + 'order_status' => 'canceled', + 'negate' => TRUE, + ), + ), + array( + '#name' => 'uc_order_status_condition', + '#title' => t('If the order status wasn\'t In Checkout.'), + '#argument_map' => array( + 'order' => 'order', + ), + '#settings' => array( + 'order_status' => 'in_checkout', + 'negate' => TRUE, + ), + ), + ), + ), + '#class' => 'uc_stock', + '#status' => 0, + '#actions' => array( + array( + '#name' => 'uc_stock_action_increment_stock', + '#title' => t('Increment stock of products in order'), + '#argument_map' => array( + 'order' => 'order', + ), + ), + ), + ); + + $predicates['uc_stock_increment_on_delete'] = array( + '#title' => t('Increment stock on deleting an order'), + '#trigger' => 'uc_order_delete', + '#conditions' => array( + '#operator' => 'AND', + '#conditions' => array( + array( + '#name' => 'uc_order_status_condition', + '#title' => t('If the order status wasn\'t Canceled.'), + '#argument_map' => array( + 'order' => 'order', + ), + '#settings' => array( + 'order_status' => 'canceled', + 'negate' => TRUE, + ), + ), + array( + '#name' => 'uc_order_status_condition', + '#title' => t('If the order status wasn\'t In Checkout.'), + '#argument_map' => array( + 'order' => 'order', + ), + '#settings' => array( + 'order_status' => 'in_checkout', + 'negate' => TRUE, + ), + ), + ), + ), + '#class' => 'uc_stock', + '#status' => 0, + '#actions' => array( + array( + '#name' => 'uc_stock_action_increment_stock', + '#title' => t('Increment stock of products in order'), + '#argument_map' => array( + 'order' => 'order', + ), + ), + ), + ); + + $predicates['uc_stock_decrement_on_uncancel'] = array( + '#title' => t('Decrement stock when order cancellation is being undone'), + '#trigger' => 'uc_order_status_update', + '#conditions' => array( + '#operator' => 'AND', + '#conditions' => array( + array( + '#name' => 'uc_order_status_condition', + '#title' => t('If the order status was Canceled.'), + '#argument_map' => array( + 'order' => 'order', + ), + '#settings' => array( + 'order_status' => 'canceled', + ), + ), + array( + '#name' => 'uc_order_status_condition', + '#title' => t('If the order status isn\'t Canceled.'), + '#argument_map' => array( + 'order' => 'updated_order', + ), + '#settings' => array( + 'order_status' => 'canceled', + 'negate' => TRUE, + ), + ), + array( + '#name' => 'uc_order_status_condition', + '#title' => t('If the order status isn\'t In Checkout.'), + '#argument_map' => array( + 'order' => 'updated_order', + ), + '#settings' => array( + 'order_status' => 'in_checkout', + 'negate' => TRUE, + ), + ), + ), + ), + '#class' => 'uc_stock', + '#status' => 0, + '#actions' => array( + array( + '#name' => 'uc_stock_action_decrement_stock', + '#title' => t('Decrement stock of products in order'), + '#argument_map' => array( + 'order' => 'order', + ), + ), + ), + ); + return $predicates; } @@ -45,6 +194,14 @@ function uc_stock_ca_action() { ), '#category' => t('Stock'), ); + $actions['uc_stock_action_increment_stock'] = array( + '#title' => t('Increment stock of products on the order with tracking activated.'), + '#callback' => 'uc_stock_action_increment_stock', + '#arguments' => array( + 'order' => array('#entity' => 'uc_order', '#title' => t('Order')), + ), + '#category' => t('Stock'), + ); return $actions; } @@ -61,3 +218,12 @@ function uc_stock_action_decrement_stock($order, $settings) { array_walk($order->products, 'uc_stock_adjust_product_stock', $order); } } + +/** + * Increase the stock of ordered products. + */ +function uc_stock_action_increment_stock($order, $settings) { + if (is_array($order->products)) { + array_walk($order->products, 'uc_stock_increment_product_stock', $order); + } +} diff --git a/uc_stock/uc_stock.module b/uc_stock/uc_stock.module index acd0f8e..3bed41e 100644 --- a/uc_stock/uc_stock.module +++ b/uc_stock/uc_stock.module @@ -292,6 +292,14 @@ function uc_stock_decrement_product_stock($product, $key, $order) { } /** + * Increment a product's stock. + */ +function uc_stock_increment_product_stock($product, $key, $order) { + $product->qty = -$product->qty; + return uc_stock_adjust_product_stock($product, $key, $order); +} + +/** * Adjusts a product's stock. * * @param $product