<?php namespace QUI\ERP\Coupons; use QUI; use Quiqqer\Engine\Collector; use QUI\ERP\Order\Basket\Basket; use QUI\ERP\Order\Basket\BasketGuest; use QUI\ERP\Coupons\Handler as CouponsHandler; /** * Class Events * * Global Event Handler for quiqqer/payment-paypal */ class Events { /** * Template event quiqqer/order: onQuiqqer::order::orderProcessBasketEnd * * @param Collector $Collector * @param BasketGuest $Basket */ public static function templateOrderProcessBasketEnd(Collector $Collector, $Basket) { if (!($Basket instanceof Basket) && !($Basket instanceof QUI\ERP\Order\Basket\BasketOrder) ) { return; } $Collector->append( '<div data-qui="package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput"></div>' ); } /** * event - on price factor init * * @param $Basket * @param QUI\ERP\Order\AbstractOrder $Order * @param QUI\ERP\Products\Product\ProductList $Products */ public static function onQuiqqerOrderBasketToOrder( $Basket, QUI\ERP\Order\AbstractOrder $Order, QUI\ERP\Products\Product\ProductList $Products ) { $coupons = $Order->getDataEntry('quiqqer-coupons'); if (!$coupons) { return; } if (!is_array($coupons)) { return; } $PriceFactors = $Products->getPriceFactors(); foreach ($coupons as $coupon) { /* @var $Coupon CouponCode */ try { $Coupon = Handler::getCouponCodeByCode($coupon); } catch (\Exception $Exception) { continue; } // coupon check if (!$Coupon->isRedeemable($Order->getCustomer())) { continue; } /* @var $Discount QUI\ERP\Discount\Discount */ $discounts = $Coupon->getDiscounts(); foreach ($discounts as $Discount) { $PriceFactor = $Discount->toPriceFactor(); $PriceFactor->setTitle( QUI::getLocale()->get('quiqqer/coupons', 'coupon.discount.title', [ 'code' => $Coupon->getCode() ]) ); if ($Discount->getAttribute('scope') === QUI\ERP\Discount\Handler::DISCOUNT_SCOPE_EVERY_PRODUCT || $Discount->getAttribute('scope') === QUI\ERP\Discount\Handler::DISCOUNT_SCOPE_UNIQUE ) { // add to the product foreach ($Products->getProducts() as $Product) { if ($Discount->canUsedWith($Product) === false) { continue; } if ($Product instanceof QUI\ERP\Products\Product\UniqueProduct) { $Product->getPriceFactors()->add($PriceFactor); } } continue; } $PriceFactors->addToEnd($PriceFactor); } } try { $Products->recalculation(); } catch (QUI\Exception $Exception) { QUI\System\Log::writeDebugException($Exception); } } /** * quiqqer/order: onQuiqqerOrderSuccessful * * Redeem coupons used in (completed) orders * * @param QUI\ERP\Order\Order|QUI\ERP\Order\OrderInProcess $Order * @return void */ public static function onQuiqqerOrderSuccessful($Order) { $coupons = $Order->getDataEntry('quiqqer-coupons'); if (empty($coupons)) { return; } foreach ($coupons as $couponCode) { try { $CouponCode = CouponsHandler::getCouponCodeByCode($couponCode); $CouponCode->redeem($Order->getCustomer(), $Order); } catch (\Exception $Exception) { QUI\System\Log::writeException($Exception); } } } }