couponFactory->create()->load($code, 'code'); if (!$this->isCouponValid($coupon, $customerId)) { continue; } if (isset($validCouponCodes[$coupon->getRuleId()])) { continue; } $validCouponCodes[$coupon->getRuleId()] = $coupon->getCode(); } return $validCouponCodes; } /** * Validate coupon object * * @param CouponInterface $coupon * @param int|null $customerId * @return bool */ private function isCouponValid(CouponInterface $coupon, ?int $customerId = null): bool { if (!$coupon->getId()) { return false; } if ($coupon->getUsageLimit() && $coupon->getTimesUsed() >= $coupon->getUsageLimit()) { return false; } if (!$customerId || !$coupon->getUsagePerCustomer()) { return true; } $couponUsage = $this->objectFactory->create(); $this->usageFactory->create()->loadByCustomerCoupon( $couponUsage, $customerId, $coupon->getId() ); if ($couponUsage->getCouponId() && $couponUsage->getTimesUsed() >= $coupon->getUsagePerCustomer() ) { return false; } return true; } }