/** * {@inheritdoc} */ protected function areCouponsEligibleForPromotion(PromotionSubjectInterface $subject, PromotionInterface $promotion) { if (!$subject instanceof CustomerAwareInterface) { return false; } $eligible = false; // Check to see if there is a per customer usage limit on coupon if ($subject instanceof PromotionCouponAwareSubjectInterface) { $coupon = $subject->getPromotionCoupon(); if (null !== $coupon && $promotion === $coupon->getPromotion()) { $eligible = $this->isCouponEligibleToLimit($coupon, $promotion, $subject->getCustomer()); } } elseif ($subject instanceof PromotionCouponsAwareSubjectInterface) { foreach ($subject->getPromotionCoupons() as $coupon) { if ($promotion === $coupon->getPromotion()) { $eligible = $this->isCouponEligibleToLimit($coupon, $promotion, $subject->getCustomer()); break; } } } else { return false; } if ($eligible) { $this->dispatcher->dispatch(SyliusPromotionEvents::COUPON_ELIGIBLE, new GenericEvent($promotion)); } return $eligible; }
/** * {@inheritdoc} */ public function isEligible(PromotionSubjectInterface $promotionSubject, PromotionInterface $promotion) { if (!$promotion->isCouponBased()) { throw new UnsupportedPromotionException('Only coupon based promotions can be evaluated by this checker.'); } if (!$promotionSubject instanceof OrderInterface) { return false; } $coupon = $promotionSubject->getPromotionCoupon(); if (!$coupon instanceof CouponInterface) { return false; } if ($promotion !== $coupon->getPromotion()) { return false; } $couponUsageLimit = $coupon->getPerCustomerUsageLimit(); if (0 === $couponUsageLimit) { return true; } $customer = $promotionSubject->getCustomer(); if (null === $customer) { return false; } $placedOrdersNumber = $this->orderRepository->countByCustomerAndCoupon($customer, $coupon); // <= because we need to include the cart orders as well return $placedOrdersNumber <= $couponUsageLimit; }
/** * {@inheritdoc} */ public function isEligible(PromotionSubjectInterface $subject, array $configuration) { if (!$subject instanceof OrderInterface) { throw new UnsupportedTypeException($subject, 'Sylius\\Component\\Core\\Model\\OrderInterface'); } if (null === ($customer = $subject->getCustomer())) { return false; } return $this->orderRepository->countByCustomerAndPaymentState($customer, PaymentInterface::STATE_COMPLETED) === $configuration['nth'] - 1; }
/** * {@inheritdoc} */ public function isEligible(PromotionSubjectInterface $subject, array $configuration) { if (!$subject instanceof OrderInterface) { throw new UnsupportedTypeException($subject, OrderInterface::class); } if (null === ($customer = $subject->getCustomer())) { return false; } $time = new \DateTime(sprintf('%d %s ago', $configuration['time'], $configuration['unit'])); if (isset($configuration['after']) && $configuration['after']) { return $customer->getCreatedAt() >= $time; } return $customer->getCreatedAt() < $time; }
/** * {@inheritdoc} */ public function isEligible(PromotionSubjectInterface $subject, array $configuration) { if (!$subject instanceof OrderInterface) { throw new UnsupportedTypeException($subject, OrderInterface::class); } if (!isset($configuration['nth']) || !is_int($configuration['nth'])) { return false; } $customer = $subject->getCustomer(); if (null === $customer) { return false; } return $this->orderRepository->countByCustomerAndPaymentState($customer, PaymentInterface::STATE_COMPLETED) === $configuration['nth'] - 1; }
/** * {@inheritdoc} */ public function isEligible(PromotionSubjectInterface $subject, array $configuration) { if (!$subject instanceof OrderInterface) { throw new UnsupportedTypeException($subject, OrderInterface::class); } if (null === ($customer = $subject->getCustomer())) { return false; } if (!$customer instanceof CustomerInterface) { return false; } if (null === $customer->getGroup()) { return false; } return $configuration['group_code'] === $customer->getGroup()->getCode(); }
/** * {@inheritdoc} */ public function isEligible(PromotionSubjectInterface $subject, array $configuration) { if (!$subject instanceof OrderInterface) { throw new UnsupportedTypeException($subject, OrderInterface::class); } if (!isset($configuration['nth']) || !is_int($configuration['nth'])) { return false; } $customer = $subject->getCustomer(); if (null === $customer) { return false; } //eligible if it is first order of guest and the promotion is on first order if (null === $customer->getId()) { return 1 === $configuration['nth']; } return $this->orderRepository->countByCustomer($customer) === $configuration['nth'] - 1; }
/** * {@inheritdoc} */ public function isEligible(PromotionSubjectInterface $subject, array $configuration) { if (!$subject instanceof OrderInterface) { throw new UnsupportedTypeException($subject, 'Sylius\\Component\\Core\\Model\\OrderInterface'); } if (null === ($customer = $subject->getCustomer())) { return false; } if (!$customer instanceof GroupableInterface) { return false; } /* @var GroupInterface $group */ foreach ($customer->getGroups() as $group) { if ($configuration['groups'] == $group->getId()) { return true; } } return false; }
/** * {@inheritdoc} */ public function isEligible(PromotionSubjectInterface $promotionSubject, PromotionCouponInterface $promotionCoupon) { if (!$promotionSubject instanceof OrderInterface) { return true; } if (!$promotionCoupon instanceof CorePromotionCouponInterface) { return true; } $perCustomerUsageLimit = $promotionCoupon->getPerCustomerUsageLimit(); if ($perCustomerUsageLimit === null) { return true; } $customer = $promotionSubject->getCustomer(); if ($customer === null) { return true; } $placedOrdersNumber = $this->orderRepository->countByCustomerAndCoupon($customer, $promotionCoupon); return $placedOrdersNumber < $perCustomerUsageLimit; }