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