Order::applyCoupons PHP Method

applyCoupons() public method

public applyCoupons ( array $coupons ) : boolean
$coupons array
return boolean
    public function applyCoupons(array $coupons)
    {
        if (!$this->isCouponsAvailable()) {
            return true;
        }
        $coupons = $this->getValidCoupons($coupons);
        $transaction = Yii::app()->getDb()->beginTransaction();
        try {
            foreach ($coupons as $coupon) {
                $model = new OrderCoupon();
                $model->setAttributes(['order_id' => $this->id, 'coupon_id' => $coupon->id, 'create_time' => new CDbExpression('NOW()')]);
                $model->save();
                $coupon->decreaseQuantity();
            }
            $this->coupon_discount = $this->getCouponDiscount($coupons);
            $this->delivery_price = $this->getDeliveryCost();
            $this->update(['coupon_discount', 'delivery_price']);
            $transaction->commit();
            return true;
        } catch (Exception $e) {
            $transaction->rollback();
            return false;
        }
    }

Usage Example

Beispiel #1
0
 /**
  *
  */
 public function actionCreate()
 {
     $model = new Order(Order::SCENARIO_USER);
     if (Yii::app()->getRequest()->getIsPostRequest() && Yii::app()->getRequest()->getPost('Order')) {
         $order = Yii::app()->getRequest()->getPost('Order');
         $products = Yii::app()->getRequest()->getPost('OrderProduct');
         $coupons = isset($order['couponCodes']) ? $order['couponCodes'] : [];
         if ($model->store($order, $products, Yii::app()->getUser()->getId(), (int) Yii::app()->getModule('order')->defaultStatus)) {
             if (!empty($coupons)) {
                 $model->applyCoupons($coupons);
             }
             Yii::app()->getUser()->setFlash(yupe\widgets\YFlashMessages::SUCCESS_MESSAGE, Yii::t('OrderModule.order', 'The order created'));
             if (Yii::app()->hasModule('cart')) {
                 Yii::app()->getModule('cart')->clearCart();
             }
             //отправить уведомления
             Yii::app()->orderNotifyService->sendOrderCreatedAdminNotify($model);
             Yii::app()->orderNotifyService->sendOrderCreatedUserNotify($model);
             if (Yii::app()->getModule('order')->showOrder) {
                 $this->redirect(['/order/order/view', 'url' => $model->url]);
             }
             $this->redirect(['/store/product/index']);
         } else {
             Yii::app()->getUser()->setFlash(yupe\widgets\YFlashMessages::ERROR_MESSAGE, CHtml::errorSummary($model));
         }
     }
     $this->redirect(Yii::app()->getUser()->getReturnUrl($_SERVER['HTTP_REFERER']));
 }