/** * Action Add Coupon * * @return void */ public function addCouponAction() { if ($this->request->hasArgument('couponCode')) { $this->cart = $this->cartUtility->getCartFromSession($this->settings['cart'], $this->pluginSettings); $couponCode = $this->request->getArgument('couponCode'); /** @var \Extcode\Cart\Domain\Model\Product\Coupon $coupon */ $coupon = $this->couponRepository->findOneByCode($couponCode); if ($coupon && $coupon->getIsAvailable()) { $newCartCoupon = $this->objectManager->get(\Extcode\Cart\Domain\Model\Cart\CartCoupon::class, $coupon->getTitle(), $coupon->getCode(), $coupon->getCouponType(), $coupon->getDiscount(), $this->cart->getTaxClass($coupon->getTaxClassId()), $coupon->getCartMinPrice(), $coupon->getIsCombinable()); $couponWasAdded = $this->cart->addCoupon($newCartCoupon); if ($couponWasAdded == 1) { $this->addFlashMessage(\TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('tx_cart.ok.coupon.added', $this->extensionName), $messageTitle = '', $severity = \TYPO3\CMS\Core\Messaging\AbstractMessage::OK, $storeInSession = true); } if ($couponWasAdded == -1) { $this->addFlashMessage(\TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('tx_cart.error.coupon.already_added', $this->extensionName), $messageTitle = '', $severity = \TYPO3\CMS\Core\Messaging\AbstractMessage::WARNING, $storeInSession = true); } if ($couponWasAdded == -2) { $this->addFlashMessage(\TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('tx_cart.error.coupon.not_combinable', $this->extensionName), $messageTitle = '', $severity = \TYPO3\CMS\Core\Messaging\AbstractMessage::WARNING, $storeInSession = true); } } else { $this->addFlashMessage(\TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('tx_cart.error.coupon.not_accepted', $this->extensionName), $messageTitle = '', $severity = \TYPO3\CMS\Core\Messaging\AbstractMessage::WARNING, $storeInSession = true); } $this->sessionHandler->writeToSession($this->cart, $this->settings['cart']['pid']); } $this->redirect('showCart'); }
/** * Parse Services * * @param string $className * @param array $pluginSettings Plugin Settings * @param \Extcode\Cart\Domain\Model\Cart\Cart $cart * * @return array */ public function parseServices($className, array $pluginSettings, \Extcode\Cart\Domain\Model\Cart\Cart $cart) { $services = []; $type = strtolower($className) . 's'; if ($pluginSettings[$type]['options']) { foreach ($pluginSettings[$type]['options'] as $key => $value) { $class = '\\Extcode\\Cart\\Domain\\Model\\Cart\\' . $className; /** * Service * @var \Extcode\Cart\Domain\Model\Cart\Service $service */ $service = new $class($key, $value['title'], $cart->getTaxClass($value['taxClassId']), $value['status'], $value['note'], $cart->getIsNetCart()); if ($className == 'Payment') { if ($value['provider']) { $service->setProvider($value['provider']); } } if (is_array($value['extra'])) { $service->setExtraType($value['extra']['_typoScriptNodeValue']); unset($value['extra']['_typoScriptNodeValue']); foreach ($value['extra'] as $extraKey => $extraValue) { $extra = new \Extcode\Cart\Domain\Model\Cart\Extra($extraKey, $extraValue['value'], $extraValue['extra'], $cart->getTaxClass($value['taxClassId']), $cart->getIsNetCart()); $service->addExtra($extra); } } elseif (!floatval($value['extra'])) { $service->setExtraType($value['extra']); $extra = new \Extcode\Cart\Domain\Model\Cart\Extra(0, 0, 0, $cart->getTaxClass($value['taxClassId']), $cart->getIsNetCart()); $service->addExtra($extra); } else { $service->setExtraType('simple'); $extra = new \Extcode\Cart\Domain\Model\Cart\Extra(0, 0, $value['extra'], $cart->getTaxClass($value['taxClassId']), $cart->getIsNetCart()); $service->addExtra($extra); } if ($value['free']) { $service->setFreeFrom($value['free']['from']); $service->setFreeUntil($value['free']['until']); } if ($value['available']) { $service->setAvailableFrom($value['available']['from']); $service->setAvailableUntil($value['available']['until']); if ($value['available']['fallBackId']) { $service->setFallBackId($value['available']['fallBackId']); } } if ($pluginSettings[$type]['preset'] == $key) { $service->setIsPreset(true); } $additional = []; if ($value['additional.']) { foreach ($value['additional'] as $additionalKey => $additionalValue) { if ($additionalValue['value']) { $additional[$additionalKey] = $additionalValue['value']; } } } $service->setAdditionalArray($additional); $service->setCart($cart); $services[$key] = $service; } } return $services; }