| 1 |
<?php namespace TierPricingTable\Addons\RoleBasedPricing; |
| 2 |
|
| 3 |
use TierPricingTable\PricingRule; |
| 4 |
|
| 5 |
class PricingService { |
| 6 |
|
| 7 |
public function __construct() { |
| 8 |
/** |
| 9 |
* Main function to filter the tiered pricing rules |
| 10 |
* |
| 11 |
* @priority 20 |
| 12 |
*/ |
| 13 |
add_filter( 'tiered_pricing_table/price/pricing_rule', array( |
| 14 |
$this, |
| 15 |
'addPricing', |
| 16 |
), 20, 2 ); |
| 17 |
} |
| 18 |
|
| 19 |
/** |
| 20 |
* Main function to filter pricing rules with role-based pricing rule data |
| 21 |
* |
| 22 |
* @param PricingRule $pricingRule |
| 23 |
* @param $productId |
| 24 |
* |
| 25 |
* @return PricingRule |
| 26 |
*/ |
| 27 |
public function addPricing( PricingRule $pricingRule, $productId ): PricingRule { |
| 28 |
|
| 29 |
$product = wc_get_product( $productId ); |
| 30 |
|
| 31 |
if ( ! $product ) { |
| 32 |
return $pricingRule; |
| 33 |
} |
| 34 |
|
| 35 |
$roleBasedRule = RoleBasedPricingRulesRepository::getInstance()->getCurrentUserRule( $product ); |
| 36 |
|
| 37 |
if ( ! $roleBasedRule ) { |
| 38 |
return $pricingRule; |
| 39 |
} |
| 40 |
|
| 41 |
$pricingRule->setType( $roleBasedRule->getTieredPricingType() ); |
| 42 |
$pricingRule->setRules( $roleBasedRule->getTieredPricingRules() ); |
| 43 |
$pricingRule->setMinimum( $roleBasedRule->getMinimumOrderQuantity() ); |
| 44 |
|
| 45 |
$pricingRule->pricingData['pricing_type'] = $roleBasedRule->getPricingType(); |
| 46 |
|
| 47 |
$pricingRule->pricingData['regular_price'] = $roleBasedRule->getRegularPrice(); |
| 48 |
$pricingRule->pricingData['sale_price'] = $roleBasedRule->getSalePrice(); |
| 49 |
|
| 50 |
$pricingRule->pricingData['discount'] = $roleBasedRule->getDiscount(); |
| 51 |
$pricingRule->pricingData['discount_type'] = $roleBasedRule->getDiscountType(); |
| 52 |
|
| 53 |
$pricingRule->pricingData['tax_status'] = $roleBasedRule->getTaxStatus(); |
| 54 |
$pricingRule->pricingData['tax_class'] = $roleBasedRule->getTaxClass(); |
| 55 |
|
| 56 |
$pricingRule->provider = 'role-based'; |
| 57 |
$pricingRule->providerData['role'] = $roleBasedRule->getRole(); |
| 58 |
|
| 59 |
$pricingRule->logPricingModification( '[role-based]: Pricing rule is overridden by the rule for: ' . $roleBasedRule->getRole() ); |
| 60 |
|
| 61 |
do_action( 'tiered_pricing_table/role_based_pricing/after_adjusting_pricing_rule', $pricingRule, $roleBasedRule, |
| 62 |
$productId ); |
| 63 |
|
| 64 |
return $pricingRule; |
| 65 |
} |
| 66 |
} |
| 67 |
|