Show possible ranges in bulk table
Display possible ranges within a bulk data table.
add_filter('advanced_woo_discount_rules_bulk_table_ranges', function($response_ranges, $rules, $product){
if(class_exists('\Wdr\App\Helpers\Woocommerce')){
$partially_matched = array();
foreach($response_ranges as $key => $response_range){
//Get rule id from ranges
$rule_id = isset($response_range['rule_id']) ? $response_range['rule_id'] : 0;
//Get quantity from ranges
$buy_qty = isset($response_range['from']) ? (int)$response_range['from'] : 0;
$quantity = 0;
if(!empty($rule_id)){
//Find current rule from rule object
foreach($rules as $rule){
$current_rule_id = $rule->getId();
if($rule_id == $current_rule_id){
//Get rule filter
$filters = $rule->getFilter();
//Get cart items
$cart_items = \Wdr\App\Helpers\Woocommerce::getCart();
$bundle_set = array();
//Get discount section detail
if (isset($rule->rule->set_adjustments)) {
if (!empty($rule->rule->set_adjustments) && $rule->rule->set_adjustments != '{}' && $rule->rule->set_adjustments != '[]') {
$bundle_set = json_decode($rule->rule->set_adjustments);
}
}
$operator = isset($bundle_set->operator) ? $bundle_set->operator : array();
//This is for filters having product filter
foreach($filters as $filter){
$type = isset($filter->type) ? $filter->type : array();
$method = isset($filter->method) ? $filter->method : array();
if(!empty($type) && $type == 'products' && !empty($method) && $method == 'in_list'){
$values = isset($filter->value) ? $filter->value : array();
}
}
if(isset($values) && !empty($values)){
continue;
}
//Check quantities in cart
switch ($operator) {
case 'product_cumulative':
$quantity += $rule->getProductCumulativeDiscountQuantity($cart_items);
break;
case 'variation':
$quantity += $rule->getProductVariationDiscountQuantity($product, $cart_items);
break;
default:
case 'product':
if(!empty($cart_items)){
foreach ($cart_items as $cart_item){
$cart_item_product_id =\Wdr\App\Helpers\Woocommerce::getProductIdFromCartItem($cart_item);
if(in_array($cart_item_product_id, $values)){
$quantity += isset($cart_item['quantity']) ? $cart_item['quantity'] : 0;
}
}
}
break;
}
//Check next possible range
if($quantity < $buy_qty){
$partially_matched[$key] = $buy_qty;
}
}
}
}
}
//get mininimum range of next range
if(!empty($partially_matched)){
$seleted_range = array_keys($partially_matched, min($partially_matched));
$matched_range = !empty($seleted_range) ? $response_ranges[$seleted_range[0]] : array();
if(!empty($matched_range)){
$build_response_ranges[] = $matched_range;
return $build_response_ranges;
}
}
}
return $response_ranges;
}, 10, 3);