Skip to content
Code-Schnipsel Gruppen Projekte
Events.php 3,16 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?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;
            }
    
    
            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()
                        ])
    
                    );
    
                    $PriceFactors->addToEnd($PriceFactor);
                }
            }
    
    
            try {
                $Products->recalculation();
            } catch (QUI\Exception $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');
    
    
            foreach ($coupons as $couponCode) {
                try {
                    $CouponCode = CouponsHandler::getCouponCodeByCode($couponCode);
                    $CouponCode->redeem($Order->getCustomer(), $Order);
                } catch (\Exception $Exception) {
                    QUI\System\Log::writeException($Exception);
                }
            }
        }