function b2bking_get_min_tiered_price($product){
if (!is_a($product,'WC_Product_Variation') && !is_a($product,'WC_Product')){
$product = wc_get_product($product);
}
$price = wc_price($product->get_price());
$priceoriginal = $price;
if (!is_a($product,'WC_Product_Variation') && !is_a($product,'WC_Product')){
return $price;
}
$user_id = get_current_user_id();
$account_type = get_user_meta($user_id,'b2bking_account_type', true);
if ($account_type === 'subaccount'){
// for all intents and purposes set current user as the subaccount parent
$parent_user_id = get_user_meta($user_id, 'b2bking_account_parent', true);
$user_id = $parent_user_id;
}
$currentusergroupidnr = apply_filters('b2bking_b2b_group_for_pricing', b2bking()->get_user_group($user_id), $user_id);
$is_b2b_user = get_user_meta( $user_id, 'b2bking_b2buser', true );
// Search price tiers
$price_tiers = get_post_meta($product->get_id(), 'b2bking_product_pricetiers_group_'.$currentusergroupidnr, true );
// if no tiers, get regular
if (empty($price_tiers)){
$price_tiers = get_post_meta($product->get_id(), 'b2bking_product_pricetiers_group_b2c', true );
}
// apply percentage instead of final prices (optiinally)
$price_tiers = b2bking()->convert_price_tiers($price_tiers, $product);
if (!empty($price_tiers)){
if ( '' !== $product->get_price() ) {
if ( $product->is_on_sale() ) {
$price = get_post_meta($product->get_id(),'_sale_price',true);
if ($is_b2b_user === 'yes'){
// Search if there is a specific price set for the user's group
$b2b_price = b2bking()->tofloat(get_post_meta($product->get_id(), 'b2bking_sale_product_price_group_'.$currentusergroupidnr, true ));
if (!empty($b2b_price)){
$price = $b2b_price;
}
}
} else {
$price = get_post_meta($product->get_id(),'_regular_price',true);
if ($is_b2b_user === 'yes'){
// Search if there is a specific price set for the user's group
$b2b_price = b2bking()->tofloat(get_post_meta($product->get_id(), 'b2bking_regular_product_price_group_'.$currentusergroupidnr, true ));
if (!empty($b2b_price)){
$price = $b2b_price;
}
}
}
$price_tiers = array_filter(explode(';', $price_tiers));
$min_price = b2bking()->tofloat($price);
$max_price = b2bking()->tofloat($price);
// first eliminate all quantities larger than the quantity in cart
foreach($price_tiers as $tier){
$tier_values = explode(':', $tier);
if (isset($tier_values[1])){
if (b2bking()->tofloat($tier_values[1]) < $min_price){
$min_price = b2bking()->tofloat($tier_values[1]);
}
}
}
$min_price = b2bking()->b2bking_wc_get_price_to_display( $product, array( 'price' => b2bking()->get_woocs_price($min_price ) ) );
return wc_price($min_price);
} else {
return $price;
}
} else {
// check if product is variable
if ($product->is_type('variable')){
$range = false;
if (!$range){
// check if any variation has tiered price and if not, return
$have_tiered_price_in_any_variation = 'no';
$children = $product->get_children();
foreach ($children as $variation_id){
// Search price tiers
$price_tiers = get_post_meta($variation_id, 'b2bking_product_pricetiers_group_'.$currentusergroupidnr, true );
// if no tiers, get regular
if (empty($price_tiers)){
$price_tiers = get_post_meta($variation_id, 'b2bking_product_pricetiers_group_b2c', true );
}
$price_tiers = b2bking()->convert_price_tiers($price_tiers, wc_get_product($variation_id));
if (!empty($price_tiers)){
$have_tiered_price_in_any_variation = 'yes';
break;
}
}
if ($have_tiered_price_in_any_variation === 'no'){
$range = $price;
return $price;
}
// parse all variations and get min and max price across all. Store it in cache.
$min_price = 'no';
$max_price = 'no';
// get all variations, and check price for each.
foreach ($children as $variation_id){
$productvariation = wc_get_product($variation_id);
// get sale/regular price / group price
if ( '' !== $productvariation->get_price() ) {
if ( $productvariation->is_on_sale() ) {
$varprice = get_post_meta($variation_id,'_sale_price',true);
if ($is_b2b_user === 'yes'){
// Search if there is a specific price set for the user's group
$b2b_price = b2bking()->tofloat(get_post_meta($variation_id, 'b2bking_sale_product_price_group_'.$currentusergroupidnr, true ));
if (!empty($b2b_price)){
$varprice = $b2b_price;
}
}
} else {
$varprice = get_post_meta($variation_id,'_regular_price',true);
if ($is_b2b_user === 'yes'){
// Search if there is a specific price set for the user's group
$b2b_price = b2bking()->tofloat(get_post_meta($variation_id, 'b2bking_regular_product_price_group_'.$currentusergroupidnr, true ));
if (!empty($b2b_price)){
$varprice = $b2b_price;
}
}
}
$varprice = b2bking()->b2bking_wc_get_price_to_display( $productvariation, array( 'price' => $varprice ) );
// Search price tiers
$price_tiers = get_post_meta($variation_id, 'b2bking_product_pricetiers_group_'.$currentusergroupidnr, true );
// if no tiers, get regular
if (empty($price_tiers)){
$price_tiers = get_post_meta($variation_id, 'b2bking_product_pricetiers_group_b2c', true );
}
$price_tiers = b2bking()->convert_price_tiers($price_tiers, $productvariation);
if (!empty($price_tiers)){
$price_tiers = array_filter(explode(';', $price_tiers));
$var_min_price = b2bking()->tofloat($varprice);
$var_max_price = b2bking()->tofloat($varprice);
// first eliminate all quantities larger than the quantity in cart
foreach($price_tiers as $tier){
$tier_values = explode(':', $tier);
if (b2bking()->tofloat($tier_values[1]) < $var_min_price){
$var_min_price = b2bking()->tofloat($tier_values[1]);
}
}
// clear cache mostly for variable products
if (apply_filters('b2bking_clear_wc_products_cache', true)){
WC_Cache_Helper::get_transient_version( 'product', true );
}
// adjust price for tax
$var_min_price = b2bking()->b2bking_wc_get_price_to_display( $productvariation, array( 'price' => $var_min_price ) );
$var_max_price = b2bking()->b2bking_wc_get_price_to_display( $productvariation, array( 'price' => $var_max_price ) );
} else {
$var_min_price = b2bking()->b2bking_wc_get_price_to_display( $productvariation, array( 'price' => $varprice ) );
$var_max_price = b2bking()->b2bking_wc_get_price_to_display( $productvariation, array( 'price' => $varprice ) );
}
}
if ($min_price === 'no'){
$min_price = $var_min_price;
$max_price = $var_max_price;
} else {
if ($var_min_price < $min_price){
$min_price = $var_min_price;
}
if ($var_max_price > $max_price){
$max_price = $var_max_price;
}
}
}
$range = wc_price($min_price);
}
return $range;
} else {
return $price;
}
}
}