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.


Parameters

$order

(WC_Order) (Required)


Top ↑

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 );
		}
	}