WIP : Implement coupon check on ordering tunnel

@todo CSS
@todo List coupon used and detailed effects
This commit is contained in:
gmorel
2013-10-20 23:01:12 +02:00
parent 8c4ca21615
commit f276ccfa37
8 changed files with 22 additions and 18 deletions

View File

@@ -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);

View File

@@ -155,7 +155,7 @@
</route>
<route id="order.coupon.process" path="/order/coupon" methods="post">
<default key="_controller">Thelia\Controller\Front\CouponController::consume</default>
<default key="_controller">Thelia\Controller\Front\CouponController::consumeAction</default>
<default key="_view">order-invoice</default>
</route>

View File

@@ -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) {

View File

@@ -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();
}
/**

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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(