/**
  * @return string|Response
  * @throws NotFoundHttpException
  */
 public function actionStage()
 {
     $order = $this->loadOrder(false, false);
     if (empty($order) || $order->getImmutability(Order::IMMUTABLE_USER)) {
         return $this->redirect(Url::to(['index']));
     }
     /** @var OrderStage $orderStage */
     $orderStage = $order->stage;
     $eventData = ['order' => $order];
     if (0 === intval($orderStage->is_in_cart)) {
         Yii::$app->session->remove('orderId');
         $order->in_cart = 0;
         $order->save();
         Order::clearStaticOrder();
     }
     if (1 === intval($orderStage->become_non_temporary)) {
         $order->temporary = 0;
         $order->save();
     }
     //        if (null !== Yii::$app->session->get('OrderStageReach')) {
     /** @var Events $eventClass */
     $eventClass = Events::findByName($orderStage->event_name);
     if (!empty($eventClass) && is_subclass_of($eventClass->event_class_name, OrderStageEvent::className())) {
         /** @var OrderStageEvent $event */
         $event = new $eventClass->event_class_name();
         $event->setEventData($eventData);
         EventTriggeringHelper::triggerSpecialEvent($event);
         $eventData = $event->eventData();
         if (!empty($eventData['__redirect'])) {
             return $this->redirect($eventData['__redirect']);
         }
     }
     Yii::$app->session->remove('OrderStageReach');
     //        }
     return $this->render('stage', ['stage' => $orderStage, 'eventData' => $eventData]);
 }
 public static function handleStagePaymentPay(OrderStageEvent $event)
 {
     /** @var Order $order */
     $order = $event->eventData()['order'];
     $paymentType = !empty($order->paymentType) ? $order->paymentType : null;
     /** @var OrderTransaction $orderTransaction */
     $orderTransaction = !empty(OrderTransaction::findLastByOrder($order)) ? OrderTransaction::findLastByOrder($order) : OrderTransaction::createForOrder($order);
     $hasSuccess = OrderTransaction::find()->where(['order_id' => $order->id])->andWhere(['!=', 'status', OrderTransaction::TRANSACTION_START])->one();
     if (null !== $hasSuccess) {
         $event->addEventData(['__redirect' => Url::toRoute(['/shop/cart/index'])]);
     }
     $event->addEventData(['orderTransaction' => $orderTransaction, 'paymentType' => $paymentType]);
 }