/** * 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'); }
/** * @test */ public function getCouponTaxReturnsAllCouponsTaxSum() { $gross = 10.0; $tax = $gross - $gross / ($this->normalTaxClass->getCalc() + 1); $firstCoupon = $this->getMock(\Extcode\Cart\Domain\Model\Cart\CartCoupon::class, [], array(), '', false, true, true, array('getCode', 'getTax', 'getTaxClass', 'getIsUseable', 'getIsCombinable')); $firstCoupon->expects($this->any())->method('getCode')->will($this->returnValue('firstCouponCode')); $firstCoupon->expects($this->any())->method('getTax')->will($this->returnValue($tax)); $firstCoupon->expects($this->any())->method('getTaxClass')->will($this->returnValue($this->normalTaxClass)); $firstCoupon->expects($this->any())->method('getIsUseable')->will($this->returnValue(true)); $firstCoupon->expects($this->any())->method('getIsCombinable')->will($this->returnValue(true)); $this->grossCart->addCoupon($firstCoupon); $taxes = []; $taxes[$this->normalTaxClass->getId()] += $tax; $this->assertArraySubset($taxes, $this->grossCart->getCouponTaxes()); $this->netCart->addCoupon($firstCoupon); $this->assertArraySubset($taxes, $this->netCart->getCouponTaxes()); }