public function beforeAction($action)
 {
     if (false === parent::beforeAction($action)) {
         return false;
     }
     EventSubscribingHelper::specialEventCallback(OrderCalculateEvent::className(), function (OrderCalculateEvent $event) {
         if (OrderCalculateEvent::AFTER_CALCULATE !== $event->state) {
             return null;
         }
         /** @var OrderTransaction $transaction */
         $transaction = OrderTransaction::findLastByOrder($event->order, null, false, false, [OrderTransaction::TRANSACTION_START]);
         if (!empty($transaction)) {
             $transaction->total_sum = $event->order->total_price;
             $transaction->save();
         }
     });
     return true;
 }
 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]);
 }