# tier-pricing-table/8.1.0/src/Addons/GlobalTieredPricing/GlobalTieredPricingCartManager.php

Tiered Pricing Table for WooCommerce, version 8.1.0. 78 lines.

- Page: https://pluginprobe.com/plugins/tier-pricing-table/8.1.0/code/src/Addons/GlobalTieredPricing/GlobalTieredPricingCartManager.php
- Raw: https://pluginprobe.com/plugins/tier-pricing-table/8.1.0/raw/src/Addons/GlobalTieredPricing/GlobalTieredPricingCartManager.php
- Modified: 2024-10-21T13:12:08+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/tier-pricing-table/8.1.0/code/src/Addons/GlobalTieredPricing/GlobalTieredPricingCartManager.php#L10-L20`.

```php
<?php namespace TierPricingTable\Addons\GlobalTieredPricing;

use TierPricingTable\Addons\GlobalTieredPricing\CPT\GlobalTieredPricingCPT;
use TierPricingTable\PriceManager;

class GlobalTieredPricingCartManager {
	
	/**
	 * Pricing rules
	 *
	 * @var GlobalPricingRule[]
	 */
	public $globalPricingRules = array();
	
	public function __construct() {
		
		add_action( 'init', function () {
			$this->globalPricingRules = GlobalTieredPricingCPT::getGlobalRules();
		} );
		
		add_filter( 'tiered_pricing_table/cart/total_product_count', array(
			$this,
			'calculateCommonQuantities',
		), 10, 2 );
	}
	
	public function calculateCommonQuantities( $quantity, $cartItem ) {
		
		$globalPricingData = $this->getGlobalPricingDataFromCartItem( $cartItem );
		
		if ( empty( $globalPricingData ) ) {
			return $quantity;
		}
		
		// Global pricing rule is set to calculate tiered pricing individually
		if ( 'cross' !== $globalPricingData['applying_type'] ) {
			return $quantity;
		}
		
		// Reset quantity to calculate it from scratch
		$quantity = 0;
		
		foreach ( wc()->cart->get_cart_contents() as $_cartItem ) {
			
			$_globalPricingData = $this->getGlobalPricingDataFromCartItem( $_cartItem );
			
			// This is a different pricing rule
			if ( empty( $_globalPricingData['id'] ) || $_globalPricingData['id'] !== $globalPricingData['id'] ) {
				continue;
			}
			
			// Item has the same global pricing rule as the pricing provider and its set to "mix and match" strategy
			$quantity += $_cartItem['quantity'];
		}
		
		return $quantity;
	}
	
	protected function getGlobalPricingDataFromCartItem( array $cartItem ): array {
		$data = array();
		
		if ( ! ( $cartItem['data'] instanceof \WC_Product ) ) {
			return $data;
		}
		
		$pricingRule = PriceManager::getPricingRule( $cartItem['data']->get_id() );
		
		if ( 'global-rules' !== $pricingRule->provider ) {
			return $data;
		}
		
		$data['id']            = $pricingRule->providerData['rule_id'] ?? null;
		$data['applying_type'] = $pricingRule->providerData['applying_type'] ?? null;
		
		return $data;
	}
}

```
