Merge pull request #2554 from SteffenMahler/patch-3
fix issue in coupon handling
This commit is contained in:
commit
526ba3b9c0
|
|
@ -8,6 +8,7 @@ use Webkul\CartRule\Repositories\CartRuleCouponRepository;
|
|||
use Webkul\CartRule\Repositories\CartRuleCouponUsageRepository;
|
||||
use Webkul\CartRule\Repositories\CartRuleCustomerRepository;
|
||||
use Webkul\Customer\Repositories\CustomerGroupRepository;
|
||||
use Webkul\Checkout\Models\CartItem;
|
||||
use Webkul\Rule\Helpers\Validator;
|
||||
use Webkul\Checkout\Facades\Cart;
|
||||
|
||||
|
|
@ -101,16 +102,22 @@ class CartRule
|
|||
public function collect()
|
||||
{
|
||||
$cart = Cart::getCart();
|
||||
$appliedCartRuleIds = [];
|
||||
|
||||
$this->calculateCartItemTotals($cart->items()->get());
|
||||
|
||||
foreach ($cart->items()->get() as $item) {
|
||||
$this->process($item);
|
||||
$itemCartRuleIds = $this->process($item);
|
||||
$appliedCartRuleIds = array_merge($appliedCartRuleIds, $itemCartRuleIds);
|
||||
|
||||
if ($item->children()->count() && $item->product->getTypeInstance()->isChildrenCalculated())
|
||||
$this->devideDiscount($item);
|
||||
}
|
||||
|
||||
$cart->applied_cart_rule_ids = implode(',', array_unique($appliedCartRuleIds, SORT_REGULAR));
|
||||
$cart->save();
|
||||
$cart->refresh();
|
||||
|
||||
$this->processShippingDiscount($cart);
|
||||
|
||||
$this->processFreeShippingDiscount($cart);
|
||||
|
|
@ -176,7 +183,7 @@ class CartRule
|
|||
if ($coupon) {
|
||||
if ($coupon->usage_limit && $coupon->times_used >= $coupon->usage_limit)
|
||||
return false;
|
||||
|
||||
|
||||
if ($cart->customer_id && $coupon->usage_per_customer) {
|
||||
$couponUsage = $this->cartRuleCouponUsageRepository->findOneWhere([
|
||||
'cart_rule_coupon_id' => $coupon->id,
|
||||
|
|
@ -210,19 +217,15 @@ class CartRule
|
|||
/**
|
||||
* Cart item discount calculation process
|
||||
*
|
||||
* @param CartItem $item
|
||||
* @return void
|
||||
* @param \Webkul\Checkout\Models\CartItem $item
|
||||
* @return array
|
||||
*/
|
||||
public function process($item)
|
||||
public function process(CartItem $item): array
|
||||
{
|
||||
$item->discount_percent = 0;
|
||||
$item->discount_amount = 0;
|
||||
$item->base_discount_amount = 0;
|
||||
|
||||
$cart = $item->cart;
|
||||
|
||||
$cart->applied_cart_rule_ids = null;
|
||||
|
||||
$appliedRuleIds = [];
|
||||
|
||||
foreach ($this->getCartRules() as $rule) {
|
||||
|
|
@ -313,15 +316,7 @@ class CartRule
|
|||
|
||||
$item->save();
|
||||
|
||||
$cartAppliedCartRuleIds = array_merge(explode(',', $cart->applied_cart_rule_ids), $appliedRuleIds);
|
||||
|
||||
$cartAppliedCartRuleIds = array_filter($cartAppliedCartRuleIds);
|
||||
|
||||
$cartAppliedCartRuleIds = array_unique($cartAppliedCartRuleIds);
|
||||
|
||||
$cart->applied_cart_rule_ids = join(',', $cartAppliedCartRuleIds);
|
||||
|
||||
$cart->save();
|
||||
return $appliedRuleIds;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -520,4 +515,4 @@ class CartRule
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue