/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Orm\Zed\Discount\Persistence\SpyDiscount $discountEntity * * @return bool */ protected function isDiscountApplicable(QuoteTransfer $quoteTransfer, SpyDiscount $discountEntity) { if ($discountEntity->getDiscountType() === DiscountConstants::TYPE_VOUCHER) { $voucherCode = $discountEntity->getVoucherCode(); if ($this->voucherValidator->isUsable($voucherCode) === false) { return false; } } $queryString = $discountEntity->getDecisionRuleQueryString(); if (!$queryString) { return true; } try { $compositeSpecification = $this->decisionRuleBuilder->buildFromQueryString($queryString); foreach ($quoteTransfer->getItems() as $itemTransfer) { if ($compositeSpecification->isSatisfiedBy($quoteTransfer, $itemTransfer) === true) { return true; } } } catch (QueryStringException $exception) { $this->getLogger()->warning($exception->getMessage(), ['exception' => $exception]); } return false; }
/** * @param int $amount * @param string|null $voucherCoder * * @return \Orm\Zed\Discount\Persistence\SpyDiscount */ protected function createDiscountEntity($amount, $voucherCoder = null) { $discountEntity = new SpyDiscount(); $discountEntity->setVirtualColumn('VoucherCode', $voucherCoder); $discountEntity->setDecisionRuleQueryString('query string'); $discountEntity->setAmount($amount); return $discountEntity; }
/** * @param integer $idDiscount * @param \Orm\Zed\Discount\Persistence\SpyDiscount $discountEntity * @param \Generated\Shared\Transfer\DiscountConfiguratorTransfer $discountConfigurator * * @return void */ protected function hydrateDiscountVoucher($idDiscount, SpyDiscount $discountEntity, DiscountConfiguratorTransfer $discountConfigurator) { if ($discountEntity->getFkDiscountVoucherPool()) { $discountVoucherTransfer = new DiscountVoucherTransfer(); $discountVoucherTransfer->setIdDiscount($idDiscount); $discountVoucherTransfer->setFkDiscountVoucherPool($discountEntity->getFkDiscountVoucherPool()); $discountConfigurator->setDiscountVoucher($discountVoucherTransfer); } }
/** * @param \Orm\Zed\Discount\Persistence\SpyDiscount $discountEntity * * @return string */ protected function getFormattedAmount(SpyDiscount $discountEntity) { return $this->getCalculatorPlugin($discountEntity->getCalculatorPlugin())->getFormattedAmount($discountEntity->getAmount()); }
/** * @return \Orm\Zed\Discount\Persistence\SpyDiscount */ protected function createDiscountEntity() { $discountEntity = new SpyDiscount(); $discountEntity->setAmount(10)->setDecisionRuleQueryString('decisionRule string')->setDisplayName('display name')->setDescription('description')->setCollectorQueryString('collector query string')->setCalculatorPlugin('Calculator plugin')->setValidFrom('2001-01-01')->setValidTo('2001-01-01')->setIsActive(true)->setFkDiscountVoucherPool(1)->setIsExclusive(true); return $discountEntity; }
/** * @param string $voucherCode * @param \Orm\Zed\Discount\Persistence\SpyDiscount $discountEntity * * @return \Orm\Zed\Discount\Persistence\SpyDiscountVoucher */ protected function createVoucherCode($voucherCode, SpyDiscount $discountEntity) { $voucherEntity = new SpyDiscountVoucher(); $voucherEntity->setFkDiscountVoucherPool($discountEntity->getFkDiscountVoucherPool()); $voucherEntity->setCode($voucherCode); $voucherEntity->setIsActive(true); $voucherEntity->save(); return $voucherEntity; }
/** * @param \Generated\Shared\Transfer\DiscountConfiguratorTransfer $discountConfiguratorTransfer * @param \Orm\Zed\Discount\Persistence\SpyDiscount $discountEntity * * @return void */ protected function hydrateDiscountEntity(DiscountConfiguratorTransfer $discountConfiguratorTransfer, SpyDiscount $discountEntity) { $discountEntity->fromArray($discountConfiguratorTransfer->getDiscountGeneral()->toArray()); $discountEntity->setAmount($discountConfiguratorTransfer->getDiscountCalculator()->getAmount()); $discountEntity->setCalculatorPlugin($discountConfiguratorTransfer->getDiscountCalculator()->getCalculatorPlugin()); $discountEntity->setCollectorQueryString($discountConfiguratorTransfer->getDiscountCalculator()->getCollectorQueryString()); $discountEntity->setDecisionRuleQueryString($discountConfiguratorTransfer->getDiscountCondition()->getDecisionRuleQueryString()); }