/** * {@inheritdoc} */ protected function areCouponsEligibleForPromotion(PromotionSubjectInterface $subject, PromotionInterface $promotion) { if (!$subject instanceof UserAwareInterface) { return false; } $eligible = false; // Check to see if there is a per user usage limit on coupon if ($subject instanceof PromotionCouponAwareSubjectInterface) { $coupon = $subject->getPromotionCoupon(); if (null !== $coupon && $promotion === $coupon->getPromotion()) { $eligible = $this->isCouponEligibleToLimit($coupon, $promotion, $subject->getUser()); } } elseif ($subject instanceof PromotionCouponsAwareSubjectInterface) { foreach ($subject->getPromotionCoupons() as $coupon) { if ($promotion === $coupon->getPromotion()) { $eligible = $this->isCouponEligibleToLimit($coupon, $promotion, $subject->getUser()); break; } } } else { return false; } if ($eligible) { $this->dispatcher->dispatch(SyliusPromotionEvents::COUPON_ELIGIBLE, new GenericEvent($promotion)); } return $eligible; }
/** * {@inheritdoc} */ public function isEligible(PromotionSubjectInterface $subject, array $configuration) { if (!$subject instanceof OrderInterface) { throw new UnsupportedTypeException($subject, 'Sylius\\Component\\Core\\Model\\OrderInterface'); } if (null === ($user = $subject->getUser())) { return false; } return $user->getOrders()->count() == $configuration['nth']; }
/** * {@inheritdoc} */ public function isEligible(PromotionSubjectInterface $subject, array $configuration) { if (!$subject instanceof OrderInterface) { throw new UnsupportedTypeException($subject, 'Sylius\\Component\\Core\\Model\\OrderInterface'); } if (null === ($user = $subject->getUser())) { return false; } return $this->orderRepository->countByUserAndPaymentState($user, PaymentInterface::STATE_COMPLETED) === $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 === ($user = $subject->getUser())) { return false; } $time = new \DateTime(sprintf('%d %s ago', $configuration['time'], $configuration['unit'])); if (isset($configuration['after']) && $configuration['after']) { return $user->getCreatedAt() >= $time; } return $user->getCreatedAt() < $time; }