コード例 #1
0
ファイル: UnitDiscountAction.php プロジェクト: okwinza/Sylius
 /**
  * {@inheritdoc}
  */
 public function revert(PromotionSubjectInterface $subject, array $configuration, PromotionInterface $promotion)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnexpectedTypeException($subject, OrderInterface::class);
     }
     foreach ($subject->getItems() as $item) {
         $this->removeUnitsAdjustment($item, $promotion);
     }
 }
コード例 #2
0
 /**
  * {@inheritdoc}
  */
 public function execute(PromotionSubjectInterface $subject, array $configuration, PromotionInterface $promotion)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnexpectedTypeException($subject, OrderInterface::class);
     }
     $filteredItems = $this->priceRangeFilter->filter($subject->getItems()->toArray(), $configuration);
     $filteredItems = $this->taxonFilter->filter($filteredItems, $configuration);
     foreach ($filteredItems as $item) {
         $promotionAmount = (int) round($item->getUnitPrice() * $configuration['percentage']);
         $this->setUnitsAdjustments($item, $promotionAmount, $promotion);
     }
 }
コード例 #3
0
 /**
  * {@inheritdoc}
  */
 public function isEligible(PromotionSubjectInterface $subject, array $configuration)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnsupportedTypeException($subject, 'Sylius\\Component\\Core\\Model\\OrderInterface');
     }
     /* @var $item OrderItemInterface */
     foreach ($subject->getItems() as $item) {
         if ($configuration['variant'] == $item->getVariant()->getId()) {
             return !$configuration['exclude'];
         }
     }
     return (bool) $configuration['exclude'];
 }
コード例 #4
0
 /**
  * {@inheritdoc}
  */
 public function isEligible(PromotionSubjectInterface $subject, array $configuration)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnsupportedTypeException($subject, OrderInterface::class);
     }
     /* @var $item OrderItemInterface */
     foreach ($subject->getItems() as $item) {
         if ($configuration['product_code'] === $item->getProduct()->getCode()) {
             return true;
         }
     }
     return false;
 }
コード例 #5
0
 /**
  * {@inheritdoc}
  */
 public function isEligible(PromotionSubjectInterface $subject, array $configuration)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnsupportedTypeException($subject, OrderInterface::class);
     }
     /* @var $item OrderItemInterface */
     foreach ($subject->getItems() as $item) {
         if ($configuration['variant'] != $item->getVariant()->getId()) {
             continue;
         }
         return $this->isItemEligible($item, $configuration);
     }
     return (bool) $configuration['exclude'];
 }
コード例 #6
0
ファイル: TaxonRuleChecker.php プロジェクト: Mozan/Sylius
 /**
  * {@inheritdoc}
  */
 public function isEligible(PromotionSubjectInterface $subject, array $configuration)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnsupportedTypeException($subject, OrderInterface::class);
     }
     /* @var $item OrderItemInterface */
     foreach ($subject->getItems() as $item) {
         foreach ($item->getProduct()->getTaxons() as $taxon) {
             if ($configuration['taxons']->contains($taxon->getId())) {
                 return !$configuration['exclude'];
             }
         }
     }
     return (bool) $configuration['exclude'];
 }
コード例 #7
0
 /**
  * {@inheritdoc}
  */
 public function execute(PromotionSubjectInterface $subject, array $configuration, PromotionInterface $promotion)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnexpectedTypeException($subject, OrderInterface::class);
     }
     if (0 === $configuration['amount']) {
         return;
     }
     $filteredItems = $this->priceRangeFilter->filter($subject->getItems()->toArray(), $configuration);
     $filteredItems = $this->taxonFilter->filter($filteredItems, $configuration);
     $filteredItems = $this->productFilter->filter($filteredItems, $configuration);
     foreach ($filteredItems as $item) {
         $this->setUnitsAdjustments($item, $configuration['amount'], $promotion);
     }
 }
コード例 #8
0
ファイル: AddProductAction.php プロジェクト: bcremer/Sylius
 /**
  * {@inheritdoc}
  */
 public function revert(PromotionSubjectInterface $subject, array $configuration, PromotionInterface $promotion)
 {
     if ($subject instanceof OrderItemInterface) {
         return;
     }
     if (!$subject instanceof OrderInterface) {
         throw new UnexpectedTypeException($subject, 'Sylius\\Component\\Order\\Model\\OrderInterface');
     }
     $promotionItem = $this->createItem($configuration);
     foreach ($subject->getItems() as $item) {
         if ($item->equals($promotionItem)) {
             $subject->removeItem($item);
         }
     }
 }
コード例 #9
0
ファイル: AddProductAction.php プロジェクト: Silwereth/Sylius
 /**
  * {@inheritdoc}
  */
 public function revert(PromotionSubjectInterface $subject, array $configuration, PromotionInterface $promotion)
 {
     if ($subject instanceof OrderItemInterface) {
         return;
     }
     if (!$subject instanceof OrderInterface) {
         throw new UnexpectedTypeException($subject, OrderInterface::class);
     }
     $promotionItem = $this->createItem($configuration);
     $promotionItem->setImmutable(true);
     foreach ($subject->getItems() as $item) {
         if ($item->equals($promotionItem)) {
             $subject->removeItem($item);
         }
     }
 }
コード例 #10
0
 /**
  * {@inheritdoc}
  */
 public function isEligible(PromotionSubjectInterface $subject, array $configuration)
 {
     if (!isset($configuration['taxons'])) {
         return;
     }
     if (!$subject instanceof OrderInterface) {
         throw new UnsupportedTypeException($subject, OrderInterface::class);
     }
     /* @var $item OrderItemInterface */
     foreach ($subject->getItems() as $item) {
         foreach ($item->getProduct()->getTaxons() as $taxon) {
             if (in_array($taxon->getCode(), $configuration['taxons'], true)) {
                 return true;
             }
         }
     }
     return false;
 }
コード例 #11
0
 /**
  * {@inheritdoc}
  */
 public function isEligible(PromotionSubjectInterface $subject, array $configuration)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnsupportedTypeException($subject, OrderInterface::class);
     }
     /* @var $item OrderItemInterface */
     foreach ($subject->getItems() as $item) {
         if ($configuration['variant'] == $item->getVariant()->getId()) {
             if (!$configuration['exclude']) {
                 if (isset($configuration['count'])) {
                     return parent::isEligible($item, $configuration);
                 }
                 return true;
             }
             return false;
         }
     }
     return (bool) $configuration['exclude'];
 }
コード例 #12
0
 /**
  * {@inheritdoc}
  */
 public function isEligible(PromotionSubjectInterface $subject, array $configuration)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnexpectedTypeException($subject, OrderInterface::class);
     }
     if (!isset($configuration['taxon']) || !isset($configuration['count'])) {
         return false;
     }
     $targetTaxon = $this->taxonRepository->findOneBy(['code' => $configuration['taxon']]);
     if (null === $targetTaxon) {
         return false;
     }
     $validProducts = 0;
     foreach ($subject->getItems() as $item) {
         if (!$item->getProduct()->hasTaxon($targetTaxon)) {
             continue;
         }
         $validProducts += $item->getQuantity();
     }
     return $validProducts >= $configuration['count'];
 }
コード例 #13
0
 /**
  * {@inheritdoc}
  */
 public function isEligible(PromotionSubjectInterface $subject, array $configuration)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnexpectedTypeException($subject, OrderInterface::class);
     }
     if (!isset($configuration['taxon']) || !isset($configuration['amount'])) {
         return false;
     }
     $targetTaxon = $this->taxonRepository->findOneBy(['code' => $configuration['taxon']]);
     if (null === $targetTaxon) {
         return false;
     }
     $itemsWithTaxonTotal = 0;
     /** @var OrderItemInterface $item */
     foreach ($subject->getItems() as $item) {
         if ($item->getProduct()->hasTaxon($targetTaxon)) {
             $itemsWithTaxonTotal += $item->getTotal();
         }
     }
     return $itemsWithTaxonTotal >= $configuration['amount'];
 }
コード例 #14
0
 /**
  * {@inheritdoc}
  */
 public function execute(PromotionSubjectInterface $subject, array $configuration, PromotionInterface $promotion)
 {
     if (!$subject instanceof OrderInterface) {
         throw new UnexpectedTypeException($subject, OrderInterface::class);
     }
     $channelCode = $subject->getChannel()->getCode();
     if (!isset($configuration[$channelCode]) || !isset($configuration[$channelCode]['percentage'])) {
         return false;
     }
     $filteredItems = $this->priceRangeFilter->filter($subject->getItems()->toArray(), array_merge(['channel' => $subject->getChannel()], $configuration[$channelCode]));
     $filteredItems = $this->taxonFilter->filter($filteredItems, $configuration[$channelCode]);
     $filteredItems = $this->productFilter->filter($filteredItems, $configuration[$channelCode]);
     if (empty($filteredItems)) {
         return false;
     }
     foreach ($filteredItems as $item) {
         $promotionAmount = (int) round($item->getUnitPrice() * $configuration[$channelCode]['percentage']);
         $this->setUnitsAdjustments($item, $promotionAmount, $promotion);
     }
     return true;
 }