From 90c229442da04ff3f78ff5728794f0b26436a05a Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Mon, 17 Jun 2019 12:24:19 +0530 Subject: [PATCH] Fixed issues with testing criteria of cart rule conditions --- .../Webkul/Discount/src/Actions/BuyAGetB.php | 18 +++---- .../Discount/src/Actions/FixedAmount.php | 4 -- .../Discount/src/Helpers/CouponAbleRule.php | 1 - .../Webkul/Discount/src/Helpers/Discount.php | 49 +++++++++---------- 4 files changed, 32 insertions(+), 40 deletions(-) diff --git a/packages/Webkul/Discount/src/Actions/BuyAGetB.php b/packages/Webkul/Discount/src/Actions/BuyAGetB.php index 53cde528f..3f810943e 100644 --- a/packages/Webkul/Discount/src/Actions/BuyAGetB.php +++ b/packages/Webkul/Discount/src/Actions/BuyAGetB.php @@ -2,23 +2,21 @@ namespace Webkul\Discount\Actions; -class BuyAGetB -{ - public function __construct() - { - } +use Webkul\Discount\Actions\Action; +class BuyAGetB extends Action +{ public function calculate($rule, $item, $cart) { //calculate discount amount $action_type = $rule->action_type; // action type used - $disc_threshold = $rule->disc_threshold; // atleast quantity by default 1 --> may be omitted in near future + $disc_threshold = $rule->disc_threshold; // atleast quantity by default 1 $disc_amount = $rule->disc_amount; // value of discount $disc_quantity = $rule->disc_quantity; //max quantity allowed to be discounted $amountDiscounted = 0; - $leastWorthItem = $this->leastWorthItem(); - $realQty = $leastWorthItem['quantity']; + + $realQty = $item['quantity']; if ($cart->items_qty >= $disc_threshold) { $amountDiscounted = $disc_amount; @@ -27,8 +25,8 @@ class BuyAGetB $amountDiscounted = $amountDiscounted * $disc_quantity; } - if ($amountDiscounted > $leastWorthItem['price']) { - $amountDiscounted = $leastWorthItem['price']; + if ($amountDiscounted > $item['price']) { + $amountDiscounted = $item['price']; } } diff --git a/packages/Webkul/Discount/src/Actions/FixedAmount.php b/packages/Webkul/Discount/src/Actions/FixedAmount.php index 4f5d713f3..f76f0aba2 100644 --- a/packages/Webkul/Discount/src/Actions/FixedAmount.php +++ b/packages/Webkul/Discount/src/Actions/FixedAmount.php @@ -6,10 +6,6 @@ use Webkul\Discount\Actions\Action; class FixedAmount extends Action { - public function __construct() - { - } - public function calculate($rule, $item, $cart) { //calculate discount amount diff --git a/packages/Webkul/Discount/src/Helpers/CouponAbleRule.php b/packages/Webkul/Discount/src/Helpers/CouponAbleRule.php index f1d22647d..31b733b09 100644 --- a/packages/Webkul/Discount/src/Helpers/CouponAbleRule.php +++ b/packages/Webkul/Discount/src/Helpers/CouponAbleRule.php @@ -114,7 +114,6 @@ class CouponAbleRule extends Discount */ public function remove() { - dd('removing coupon'); $cart = Cart::getCart(); $existingRule = $this->cartRuleCart->findWhere([ diff --git a/packages/Webkul/Discount/src/Helpers/Discount.php b/packages/Webkul/Discount/src/Helpers/Discount.php index d6faa429f..e9d0cf03e 100644 --- a/packages/Webkul/Discount/src/Helpers/Discount.php +++ b/packages/Webkul/Discount/src/Helpers/Discount.php @@ -299,7 +299,8 @@ abstract class Discount * * @return boolean */ - protected function testIfAllConditionAreTrue($conditions, $cart) { + protected function testIfAllConditionAreTrue($conditions, $cart) + { array_pop($conditions); $shipping_address = $cart->getShippingAddressAttribute() ?? ''; @@ -320,9 +321,7 @@ abstract class Discount $total_weight = $total_weight + $item->base_total_weight; } - $test_mode = config('pricerules.test_mode.0'); - $test_conditions = config('pricerules.cart.conditions'); - $result = 1; + $result = true; foreach ($conditions as $condition) { $actual_value = ${$condition->attribute}; @@ -332,43 +331,43 @@ abstract class Discount if ($condition->type == 'numeric' || $condition->type == 'string' || $condition->type == 'text') { if ($test_condition == '=') { if ($actual_value != $test_value) { - $result = 0; + $result = false; break; } } else if ($test_condition == '>=') { if (! ($actual_value >= $test_value)) { - $result = 0; + $result = false; break; } } else if ($test_condition == '<=') { if (! ($actual_value <= $test_value)) { - $result = 0; + $result = false; break; } } else if ($test_condition == '>') { if (! ($actual_value > $test_value)) { - $result = 0; + $result = false; break; } } else if ($test_condition == '<') { if (! ($actual_value < $test_value)) { - $result = 0; + $result = false; break; } } else if ($test_condition == '{}') { if (! str_contains($actual_value, $test_value)) { - $result = 0; + $result = false; break; } } else if ($test_condition == '!{}') { if (str_contains($actual_value, $test_value)) { - $result = 0; + $result = false; break; } @@ -388,7 +387,7 @@ abstract class Discount protected function testIfAnyConditionIsTrue($conditions, $cart) { array_pop($conditions); - $result = true; + $result = false; $shipping_address = $cart->getShippingAddressAttribute() ?? ''; @@ -415,44 +414,44 @@ abstract class Discount if ($condition->type == 'numeric' || $condition->type == 'string' || $condition->type == 'text') { if ($test_condition == '=') { - if ($actual_value != $test_value) { - $result = false; + if ($actual_value == $test_value) { + $result = true; break; } } else if ($test_condition == '>=') { - if (! ($actual_value >= $test_value)) { - $result = false; + if ($actual_value >= $test_value) { + $result = true; break; } } else if ($test_condition == '<=') { - if (! ($actual_value <= $test_value)) { - $result = false; + if ($actual_value <= $test_value) { + $result = true; break; } } else if ($test_condition == '>') { - if (! ($actual_value > $test_value)) { - $result = false; + if ($actual_value > $test_value) { + $result = true; break; } } else if ($test_condition == '<') { - if (! ($actual_value < $test_value)) { - $result = false; + if ($actual_value < $test_value) { + $result = true; break; } } else if ($test_condition == '{}') { - if (! str_contains($actual_value, $test_value)) { - $result = false; + if (str_contains($actual_value, $test_value)) { + $result = true; break; } } else if ($test_condition == '!{}') { if (str_contains($actual_value, $test_value)) { - $result = false; + $result = true; break; }