/** * updates order status to pre-ordered for orders that are charged upfront. This handles gateways that don't call * payment_complete(). Unfortunately status changes show like pending->processing/completed->pre-ordered * * @since 1.0 * @param int $order_id the post ID of the order * @return string */ public function update_manual_payment_complete_order_status($order_id) { $order = new WC_Order($order_id); // don't update status for non pre-order orders if (!WC_Pre_Orders_Order::order_contains_pre_order($order)) { return; } // don't update if pre-order will be charged upon release if (WC_Pre_Orders_Order::order_will_be_charged_upon_release($order)) { return; } // change order status to pre-ordered $order->update_status('pre-ordered'); }
if (!defined('ABSPATH')) { exit; } // Exit if accessed directly ?> <?php do_action('woocommerce_email_header', $email_heading); ?> <?php $availability_date_text = !empty($availability_date) ? sprintf(__(' on %s.', WC_Pre_Orders::TEXT_DOMAIN), $availability_date) : '.'; ?> <?php if (WC_Pre_Orders_Order::order_will_be_charged_upon_release($order)) { ?> <?php if (WC_Pre_Orders_Order::order_has_payment_token($order)) { echo "<p>" . sprintf(__("Your pre-order has been received. You will be automatically charged for your order via your selected payment method when your pre-order is released%s Your order details are shown below for your reference.", WC_Pre_Orders::TEXT_DOMAIN), $availability_date_text) . "</p>"; } else { echo "<p>" . sprintf(__("Your pre-order has been received. You will be prompted for payment for your order when your pre-order is released%s Your order details are shown below for your reference.", WC_Pre_Orders::TEXT_DOMAIN), $availability_date_text) . "</p>"; } } else { ?> <p><?php printf(__("Your pre-order has been received. You will be notified when your pre-order is released%s Your order details are shown below for your reference.", WC_Pre_Orders::TEXT_DOMAIN), $availability_date_text); ?> </p>
/** * Completes the pre-order by updating the pre-order status to 'completed' and following this process for handling payment : * * - for a pre-order charged upon released AND containing a payment token, an action is fired for the supported gateway * to hook into an charge the total payment amount. Note that the supported gateway will then call WC_Order::payment_complete() * upon successful charge * * - for a pre-order charged upon released with no payment token, the order status is changed to 'pending' and an email * is sent containing a link for the customer to come back to and pay for their order * * - for a pre-order charged upfront, the order status is changed to 'completed' or 'processing' based on the same rules * from WC_Order::payment_complete() -- this is because payment_complete() has already occurred for these order * * @since 1.0 * @param int|WC_Order $order post IDs or order object to complete the pre-order for * @param string $message optional message to include in 'pre-order completed' email to customer */ public static function complete_pre_order($order, $message = '') { if (!is_object($order)) { $order = new WC_Order($order); } if (!self::can_pre_order_be_changed_to('completed', $order)) { return; } // complete pre-order charged upon release if (WC_Pre_Orders_Order::order_will_be_charged_upon_release($order)) { // update order status to pending so it can be paid by automatic payment, or on pay page by customer if 'pay later' gateway was used $order->update_status('pending'); if (WC_Pre_Orders_Order::order_has_payment_token($order)) { global $woocommerce; // load payment gateways $woocommerce->payment_gateways(); // fire action for payment gateway to charge pre-order do_action('wc_pre_orders_process_pre_order_completion_payment_' . $order->payment_method, $order); } // complete pre-order charged upfront } else { $product = WC_Pre_Orders_Order::get_pre_order_product($order); // update order status to completed or processing - based on same process from WC_Order::payment_complete() if ($product->is_downloadable() && $product->is_virtual() || !apply_filters('woocommerce_order_item_needs_processing', true, $product, $order->id)) { $order->update_status('completed'); } else { $order->update_status('processing'); } } // update pre-order status to completed WC_Pre_Orders_Order::update_pre_order_status($order, 'completed', $message); do_action('wc_pre_orders_pre_order_completed', $order, $message); }