private function isCouponEligibleToLimit(CouponInterface $coupon, PromotionInterface $promotion, CustomerInterface $customer = null) { if (!$coupon instanceof CouponInterface) { return true; } if (!$coupon->getPerCustomerUsageLimit()) { return true; } if (null === $customer && $coupon->getPerCustomerUsageLimit()) { return false; } return $this->isCouponEligible($coupon, $promotion, $customer); }
/** * @param CouponInterface $coupon * @param CustomerInterface|null $customer * * @return bool */ private function isCouponEligibleToLimit(CouponInterface $coupon, CustomerInterface $customer = null) { $couponUsageLimit = $coupon->getPerCustomerUsageLimit(); if (0 === $couponUsageLimit) { return true; } if (null === $customer) { return false; } $placedOrdersNumber = $this->orderRepository->countByCustomerAndCoupon($customer, $coupon); // <= because we need to include the cart orders as well return $placedOrdersNumber <= $couponUsageLimit; }
public function it_recognizes_subject_as_not_eligible_if_user_not_linked_to_order(OrderInterface $subject, PromotionInterface $promotion, CouponInterface $coupon) { $subject->getUser()->willReturn(null); $coupon->getCode()->willReturn('D0003'); $coupon->getPerUserUsageLimit()->willReturn(1); $coupon->getPromotion()->willReturn($promotion); $subject->getPromotionCoupon()->willReturn($coupon); $promotion->getRules()->willReturn(array()); $promotion->getStartsAt()->willReturn(null); $promotion->getEndsAt()->willReturn(null); $promotion->isCouponBased()->willReturn(true); $promotion->hasCoupons()->willReturn(true); $promotion->hasCoupon($coupon)->willReturn(true); $promotion->getUsageLimit()->willReturn(null); $promotion->getCoupons()->willReturn(array($coupon)); $this->isEligible($subject, $promotion)->shouldReturn(false); }
/** * @Then /^(this coupon) should still exist in the registry$/ */ public function couponShouldStillExistInTheRegistry(CouponInterface $coupon) { Assert::true($this->indexPage->isSingleResourceOnPage(['code' => $coupon->getCode()]), sprintf('Coupon with code %s should exist.', $coupon->getCode())); }
public function it_recognizes_subject_as_eligible_if_customer_not_linked_to_order_and_coupon_not_restricted_by_customer(OrderInterface $subject, PromotionInterface $promotion, CouponInterface $coupon) { $subject->getCustomer()->willReturn(null); $coupon->getCode()->willReturn('D0003'); $coupon->getPerCustomerUsageLimit()->willReturn(0); $coupon->getPromotion()->willReturn($promotion); $subject->getPromotionCoupons()->willReturn([$coupon]); $promotion->hasRules()->willReturn(false); $promotion->getStartsAt()->willReturn(null); $promotion->getEndsAt()->willReturn(null); $promotion->isCouponBased()->willReturn(true); $promotion->hasCoupons()->willReturn(true); $promotion->hasCoupon($coupon)->willReturn(true); $promotion->getUsageLimit()->willReturn(null); $promotion->getCoupons()->willReturn([$coupon]); $this->isEligible($subject, $promotion)->shouldReturn(true); }