autoship_create_scheduled_orders (function)
(src/orders.php) Used to create and send Scheduled Orders to QPilot.
Code
/**
* Creates and Sends scheduled orders to QPilot
* WC Orders are broken down and grouped by Frequency Type + Frequency + Next Occurrence
* @uses autoship_get_scheduled_order_data()
* @uses QPilotClient::upsert_order()
*
* Developers can modify QPilot Orders using the {@see autoship_create_scheduled_order_data}
* filter
*
* @param WC_Order|int $order A WC Order object or order id.
* @param string Optional. $creation_date The date the order should be
* created based on should be 'Y-m-d H:i:s' format.
* Default NULL.
* @return array|WP_Error An array of ids created or WP_Error on failure.
*/
function autoship_create_scheduled_orders( $order, $creation_date = null ) {
if ( is_numeric( $order ) ){
$order = wc_get_order( $order );
}
$order_id = $order->get_id();
// Create the scheduled order data to upsert
// Group the data for the order by frequency, frequency type, and next occurrence.
$group_scheduled_order_data = autoship_get_scheduled_order_data ( $order, $creation_date );
if ( !empty( $group_scheduled_order_data ) ){
// Set the Expected Scheduled Order count
autoship_set_scheduled_order_expected_count( $order, count( $group_scheduled_order_data ) );
// Set the Source if not already set.
autoship_flag_if_scheduled_order_related( $order, 'source' );
}
$scheduled_order_ids = array();
$error = '';
// Loop through the order groups and upsert each.
foreach ( $group_scheduled_order_data as $scheduled_order_data ) {
$scheduled_order_data = apply_filters( 'autoship_create_scheduled_order_data', $scheduled_order_data, $order_id );
// Create the order in QPilot.
$scheduled_order = autoship_create_scheduled_order( $scheduled_order_data['customerId'], $scheduled_order_data );
if ( is_wp_error( $scheduled_order ) ){
// Attach the orders key, save the error and add an error note.
$note = sprintf( __('Creating Scheduled Orders from Order #%d Failed. Additional Details: %s'), $order_id, $scheduled_order->get_error_message() );
$error = new WP_Error( 'Create Scheduled Orders Failed', $note );
autoship_set_order_created_scheduled_orders_key( $order_id, $scheduled_order_ids );
autoship_set_order_created_scheduled_orders_error( $order_id, $error );
$order->add_order_note( $note );
} else {
// Tag on the order ids to this order's metadata.
$scheduled_order_ids[] = $scheduled_order->id;
update_post_meta( $order_id, '_autoship_created_scheduled_order_id', $scheduled_order_ids, false );
}
}
if ( !empty( $group_scheduled_order_data ) ){
// Add any last IDs
autoship_set_order_created_scheduled_orders_key( $order_id, $scheduled_order_ids );
// Only if no errors then add success note
if ( empty( $error ) ){
$note = sprintf( __('Autoship Scheduled Order Created Successfully: %s.'), implode( ', ' , $scheduled_order_ids ) );
autoship_set_order_created_scheduled_orders_error( $order_id );
$order->add_order_note( $note );
do_action( 'autoship_create_scheduled_orders_success', $scheduled_order_ids, $order_id ); }
}
if ( !empty( $error ) )
do_action( 'autoship_create_scheduled_orders_failure', $scheduled_order_ids, $order_id, $error );
return $scheduled_order_ids;
}