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