From f276ccfa374240f2e90e231930f380ec9330038e Mon Sep 17 00:00:00 2001 From: gmorel Date: Sun, 20 Oct 2013 23:01:12 +0200 Subject: [PATCH] WIP : Implement coupon check on ordering tunnel @todo CSS @todo List coupon used and detailed effects --- core/lib/Thelia/Action/Coupon.php | 5 ++++ .../Thelia/Config/Resources/routing/front.xml | 2 +- .../Controller/Front/CouponController.php | 1 + core/lib/Thelia/Coupon/BaseFacade.php | 24 +++++++++---------- core/lib/Thelia/Coupon/CouponManager.php | 2 +- .../lib/Thelia/Coupon/Type/CouponAbstract.php | 2 +- .../Thelia/Coupon/Type/CouponInterface.php | 2 +- .../Coupon/Type/RemoveXPercentManager.php | 2 +- 8 files changed, 22 insertions(+), 18 deletions(-) diff --git a/core/lib/Thelia/Action/Coupon.php b/core/lib/Thelia/Action/Coupon.php index 5d58745f1..2517c575d 100755 --- a/core/lib/Thelia/Action/Coupon.php +++ b/core/lib/Thelia/Action/Coupon.php @@ -105,6 +105,7 @@ class Coupon extends BaseAction implements EventSubscriberInterface $coupon = $couponFactory->buildCouponFromCode($event->getCode()); $isValid = $coupon->isMatching(); + if ($isValid) { /** @var Request $request */ $request = $this->container->get('request'); @@ -121,7 +122,11 @@ class Coupon extends BaseAction implements EventSubscriberInterface $totalDiscount = $couponManager->getDiscount(); + // @todo decrement coupon quantity + // @todo modify Cart total discount + $request->getSession()->getCart()->setDiscount($totalDiscount); + } $event->setIsValid($isValid); diff --git a/core/lib/Thelia/Config/Resources/routing/front.xml b/core/lib/Thelia/Config/Resources/routing/front.xml index fd72010cc..8631b6da9 100755 --- a/core/lib/Thelia/Config/Resources/routing/front.xml +++ b/core/lib/Thelia/Config/Resources/routing/front.xml @@ -155,7 +155,7 @@ - Thelia\Controller\Front\CouponController::consume + Thelia\Controller\Front\CouponController::consumeAction order-invoice diff --git a/core/lib/Thelia/Controller/Front/CouponController.php b/core/lib/Thelia/Controller/Front/CouponController.php index d28513455..dd0e6d722 100755 --- a/core/lib/Thelia/Controller/Front/CouponController.php +++ b/core/lib/Thelia/Controller/Front/CouponController.php @@ -73,6 +73,7 @@ class CouponController extends BaseFrontController // Dispatch Event to the Action $this->getDispatcher()->dispatch(TheliaEvents::COUPON_CONSUME, $couponConsumeEvent); + } catch (FormValidationException $e) { $message = sprintf('Please check your coupon code: %s', $e->getMessage()); } catch (PropelException $e) { diff --git a/core/lib/Thelia/Coupon/BaseFacade.php b/core/lib/Thelia/Coupon/BaseFacade.php index 048d0eace..6c8a1f27d 100644 --- a/core/lib/Thelia/Coupon/BaseFacade.php +++ b/core/lib/Thelia/Coupon/BaseFacade.php @@ -107,7 +107,7 @@ class BaseFacade implements FacadeInterface */ public function getCheckoutTotalPrice() { - // TODO: Implement getCheckoutTotalPrice() method. + return $this->getRequest()->getSession()->getOrder()->getTotalAmount(); } /** @@ -117,7 +117,7 @@ class BaseFacade implements FacadeInterface */ public function getCheckoutPostagePrice() { - // TODO: Implement getCheckoutPostagePrice() method. + return $this->getRequest()->getSession()->getOrder()->getPostage(); } /** @@ -127,7 +127,8 @@ class BaseFacade implements FacadeInterface */ public function getCartTotalPrice() { - // TODO: Implement getCartTotalPrice() method. + return $this->getRequest()->getSession()->getCart()->getTotalAmount(); + } /** @@ -137,7 +138,7 @@ class BaseFacade implements FacadeInterface */ public function getCheckoutCurrency() { - $this->getRequest()->getSession()->getCurrency(); + return $this->getRequest()->getSession()->getCurrency()->getCode(); } @@ -148,7 +149,7 @@ class BaseFacade implements FacadeInterface */ public function getNbArticlesInCart() { - // TODO: Implement getNbArticlesInCart() method. + return count($this->getRequest()->getSession()->getCart()->getCartItems()); } /** @@ -158,16 +159,13 @@ class BaseFacade implements FacadeInterface */ public function getCurrentCoupons() { - // @todo implement -// $consumedCoupons = $this->getRequest()->getSession()->getConsumedCoupons(); - // @todo convert coupon code to coupon Interface - + $couponCodes = $this->getRequest()->getSession()->getConsumedCoupons(); + if (null === $couponCodes) { + return array(); + } $couponFactory = $this->container->get('thelia.coupon.factory'); - // @todo get from cart - $couponCodes = array('XMAS', 'SPRINGBREAK'); - $coupons = array(); foreach ($couponCodes as $couponCode) { $coupons[] = $couponFactory->buildCouponFromCode($couponCode); @@ -246,7 +244,7 @@ class BaseFacade implements FacadeInterface */ public function getMainCurrency() { - // TODO: Implement getMainCurrency() method. + return $this->getRequest()->getSession()->getCurrency(); } /** diff --git a/core/lib/Thelia/Coupon/CouponManager.php b/core/lib/Thelia/Coupon/CouponManager.php index f4bbb3486..d831d92d6 100644 --- a/core/lib/Thelia/Coupon/CouponManager.php +++ b/core/lib/Thelia/Coupon/CouponManager.php @@ -184,7 +184,7 @@ class CouponManager /** @var CouponInterface $coupon */ foreach ($coupons as $coupon) { // @todo modify Cart with discount for each cart item - $discount += $coupon->getDiscount($this->adapter); + $discount += $coupon->exec($this->adapter); } return $discount; diff --git a/core/lib/Thelia/Coupon/Type/CouponAbstract.php b/core/lib/Thelia/Coupon/Type/CouponAbstract.php index 6844da120..35ce3db4e 100644 --- a/core/lib/Thelia/Coupon/Type/CouponAbstract.php +++ b/core/lib/Thelia/Coupon/Type/CouponAbstract.php @@ -195,7 +195,7 @@ abstract class CouponAbstract implements CouponInterface * * @return float Amount removed from the Total Checkout */ - public function getDiscount() + public function exec() { return $this->amount; } diff --git a/core/lib/Thelia/Coupon/Type/CouponInterface.php b/core/lib/Thelia/Coupon/Type/CouponInterface.php index c84141b14..2e48c4fda 100644 --- a/core/lib/Thelia/Coupon/Type/CouponInterface.php +++ b/core/lib/Thelia/Coupon/Type/CouponInterface.php @@ -205,7 +205,7 @@ interface CouponInterface * * @return float Amount removed from the Total Checkout */ - public function getDiscount(); + public function exec(); /** * Check if the current Coupon is matching its conditions (Rules) diff --git a/core/lib/Thelia/Coupon/Type/RemoveXPercentManager.php b/core/lib/Thelia/Coupon/Type/RemoveXPercentManager.php index d5c45b4d3..b0a8e82cd 100644 --- a/core/lib/Thelia/Coupon/Type/RemoveXPercentManager.php +++ b/core/lib/Thelia/Coupon/Type/RemoveXPercentManager.php @@ -98,7 +98,7 @@ class RemoveXPercentManager extends CouponAbstract * @throws \InvalidArgumentException * @return float */ - public function getDiscount() + public function exec() { if ($this->percent >= 100) { throw new \InvalidArgumentException(