Tribe__Tickets_Plus__Commerce__WooCommerce__Global_Stock::stock_equalize( WC_Order $order )
When WooCommerce reduces stock levels during order processing we need to look for global stock tickets and ensure we “equalize” the total stock levels/sales caps as appropriate.
Contents
Parameters
- $order
-
(WC_Order) (Required)
Source
File: src/Tribe/Commerce/WooCommerce/Global_Stock.php
public function stock_equalize( WC_Order $order ) {
$woo_tickets = Tribe__Tickets_Plus__Commerce__WooCommerce__Main::get_instance();
$ordered = array();
// Get the total quantity of global stock ordered per event
foreach ( $order->get_items() as $item ) {
$product = $woo_tickets->get_product_from_item( $order, $item );
$product_id = $woo_tickets->get_product_id( $product );
$event = $woo_tickets->get_event_for_ticket( $product_id );
// Skip non-tickets
if ( ! $event || ! isset( $event->ID ) ) {
continue;
}
$global_stock = new Tribe__Tickets__Global_Stock( $event->ID );
// Skip tickets that do not utilize global stock
if ( ! $global_stock->is_enabled() || ! $product->managing_stock() ) {
continue;
}
$ticket = $woo_tickets->get_ticket( $event->ID, $product_id );
$modes = array(
Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE,
Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE,
);
if ( in_array( $ticket->global_stock_mode(), $modes ) ) {
// If not defined setup this event
if ( ! isset( $ordered[ $event->ID ] ) ) {
$ordered[ $event->ID ] = 0;
}
// Add each item qty
$ordered[ $event->ID ] += (int) $item->get_quantity();
}
}
// For each ticket product that utilizes global stock, adjust the product inventory
foreach ( $ordered as $event_id => $quantity ) {
$global_stock = new Tribe__Tickets__Global_Stock( $event_id );
$level = $global_stock->get_stock_level();
$new_level = (int) $level - (int) $quantity;
$global_stock->set_stock_level( $new_level );
}
}