From be931439aa3138392ac3913f3fcc66413e970a01 Mon Sep 17 00:00:00 2001 From: Steffen Mahler Date: Tue, 23 Jun 2020 16:33:55 +0200 Subject: [PATCH] fix issue in validateCartItem, refactoring of CartRule helper --- .../Webkul/CartRule/src/Helpers/CartRule.php | 46 ++++++++++++------- packages/Webkul/Checkout/src/Cart.php | 21 ++++++++- .../Webkul/Product/src/Type/Configurable.php | 6 ++- 3 files changed, 55 insertions(+), 18 deletions(-) diff --git a/packages/Webkul/CartRule/src/Helpers/CartRule.php b/packages/Webkul/CartRule/src/Helpers/CartRule.php index ba76ef565..223d920e5 100644 --- a/packages/Webkul/CartRule/src/Helpers/CartRule.php +++ b/packages/Webkul/CartRule/src/Helpers/CartRule.php @@ -144,7 +144,7 @@ class CartRule if ($staticCartRules::$cartID === cart()->getCart()->id && $staticCartRules::$cartRules) { return $staticCartRules::$cartRules; } - + $staticCartRules::$cartID = cart()->getCart()->id; $customerGroupId = null; @@ -157,21 +157,7 @@ class CartRule } } - $cartRules = $this->cartRuleRepository->scopeQuery(function ($query) use ($customerGroupId) { - return $query->leftJoin('cart_rule_customer_groups', 'cart_rules.id', '=', 'cart_rule_customer_groups.cart_rule_id') - ->leftJoin('cart_rule_channels', 'cart_rules.id', '=', 'cart_rule_channels.cart_rule_id') - ->where('cart_rule_customer_groups.customer_group_id', $customerGroupId) - ->where('cart_rule_channels.channel_id', core()->getCurrentChannel()->id) - ->where(function ($query1) { - $query1->where('cart_rules.starts_from', '<=', Carbon::now()->format('Y-m-d')) - ->orWhereNull('cart_rules.starts_from'); - }) - ->where(function ($query2) { - $query2->where('cart_rules.ends_till', '>=', Carbon::now()->format('Y-m-d')) - ->orWhereNull('cart_rules.ends_till'); - }) - ->orderBy('sort_order', 'asc'); - })->findWhere(['status' => 1]); + $cartRules = $this->getCartRuleQuery($customerGroupId, core()->getCurrentChannel()->id); $staticCartRules::$cartRules = $cartRules; return $cartRules; @@ -564,4 +550,32 @@ class CartRule } } } + + /** + * @param $customerGroupId + * @param $channelId + * + * @return \Illuminate\Database\Eloquent\Collection + */ + public function getCartRuleQuery($customerGroupId, $channelId): \Illuminate\Database\Eloquent\Collection + { + $cartRules = $this->cartRuleRepository->scopeQuery(function ($query) use ($customerGroupId, $channelId) { + return $query->leftJoin('cart_rule_customer_groups', 'cart_rules.id', '=', + 'cart_rule_customer_groups.cart_rule_id') + ->leftJoin('cart_rule_channels', 'cart_rules.id', '=', 'cart_rule_channels.cart_rule_id') + ->where('cart_rule_customer_groups.customer_group_id', $customerGroupId) + ->where('cart_rule_channels.channel_id', $channelId) + ->where(function ($query1) { + $query1->where('cart_rules.starts_from', '<=', Carbon::now()->format('Y-m-d')) + ->orWhereNull('cart_rules.starts_from'); + }) + ->where(function ($query2) { + $query2->where('cart_rules.ends_till', '>=', Carbon::now()->format('Y-m-d')) + ->orWhereNull('cart_rules.ends_till'); + }) + ->orderBy('sort_order', 'asc'); + })->findWhere(['status' => 1]); + return $cartRules; + } + } diff --git a/packages/Webkul/Checkout/src/Cart.php b/packages/Webkul/Checkout/src/Cart.php index 1733f05f7..b25d705e0 100755 --- a/packages/Webkul/Checkout/src/Cart.php +++ b/packages/Webkul/Checkout/src/Cart.php @@ -816,7 +816,7 @@ class Cart } foreach ($cart->items as $item) { - if ($item->product && $item->product->status === 0) { + if ($this->isCartItemInactive($item)) { $this->cartItemRepository->delete($item->id); @@ -1123,6 +1123,25 @@ class Cart return $cart; } + /** + * Returns true, if cart item is inactive + * + * @param \Webkul\Checkout\Contracts\CartItem $item + * + * @return bool + */ + private function isCartItemInactive(\Webkul\Checkout\Contracts\CartItem $item): bool { + if ($item->product->status === 0) { + return true; + } + + if ($item->product->type === 'configurable' && $item->child && $item->child->product->status === 0) { + return true; + } + + return false; + } + /** * @param $user * diff --git a/packages/Webkul/Product/src/Type/Configurable.php b/packages/Webkul/Product/src/Type/Configurable.php index 393287536..8d3fbcf6e 100644 --- a/packages/Webkul/Product/src/Type/Configurable.php +++ b/packages/Webkul/Product/src/Type/Configurable.php @@ -2,6 +2,7 @@ namespace Webkul\Product\Type; +use Webkul\Customer\Contracts\CartItem; use Webkul\Product\Models\ProductAttributeValue; use Webkul\Product\Models\ProductFlat; use Illuminate\Support\Str; @@ -539,10 +540,13 @@ class Configurable extends AbstractType * Validate cart item product price * * @param \Webkul\Checkout\Contracts\CartItem $item - * @return float */ public function validateCartItem($item) { + if (! $item || ! $item->child) { + return; + } + $price = $item->child->product->getTypeInstance()->getFinalPrice($item->quantity); if ($price == $item->base_price) {