/**
  * @param null $hash
  * @return string
  * @throws NotFoundHttpException
  */
 public function actionShow($hash = null)
 {
     $order = Order::findOne(['hash' => $hash]);
     if (empty($order)) {
         throw new NotFoundHttpException();
     }
     Url::remember('', '__shopCabinetUpdateGuestReturnUrl');
     return $this->render('show', ['order' => $order]);
 }
Пример #2
0
 /**
  * @param string $hash
  * @return \yii\web\Response
  */
 public function actionUpdateOrder($hash = '')
 {
     $userId = \Yii::$app->user->isGuest ? 0 : \Yii::$app->user->id;
     /** @var Order $order */
     if (null === ($order = Order::findOne(['user_id' => $userId, 'hash' => $hash]))) {
         return $this->redirect(Url::previous('__shopCabinetUpdateGuestReturnUrl'));
     }
     $this->updateCustomer($order->customer);
     $this->updateContragent($order->contragent);
     return $this->redirect(Url::previous('__shopCabinetUpdateGuestReturnUrl'));
 }
Пример #3
0
 /**
  * Move orders/order params from guest to logged/signed user
  * @param UserEvent $event
  */
 public static function moveOrdersGuestToRegistered(UserEvent $event)
 {
     /** @var UserEvent $event */
     $orders = \Yii::$app->session->get('orders', []);
     foreach ($orders as $k => $id) {
         /** @var Order $order */
         $order = Order::findOne(['id' => $id]);
         if (null !== $order && 0 === intval($order->user_id)) {
             $order->user_id = $event->identity->id;
             $order->save();
         }
     }
 }
Пример #4
0
 /**
  * Обновление заказа
  * @param int $id идентификатор заказа
  * @return null|static
  * @throws BadRequestHttpException
  * @throws ForbiddenHttpException
  * @throws ServerErrorHttpException
  * @throws \yii\base\InvalidConfigException
  */
 public function actionUpdate($id)
 {
     $model = Order::findOne($id);
     if (!$model) {
         throw new BadRequestHttpException('Bad request');
     }
     $model->setScenario(ActiveRecord::SCENARIO_UPDATE);
     if (!Yii::$app->user->can('updateModel', array("model" => $model))) {
         throw new ForbiddenHttpException('Forbidden');
     }
     $model->load(Yii::$app->getRequest()->getBodyParams(), '');
     if (!Yii::$app->user->can('updateModel', array("model" => $model))) {
         throw new ForbiddenHttpException('Forbidden');
     }
     if ($model->save() === false && !$model->hasErrors()) {
         throw new ServerErrorHttpException('Failed to update the object for unknown reason.');
     }
     return $model;
 }
Пример #5
0
 public static function renderEcommerceCounters(Event $event)
 {
     $order = Order::findOne(['id' => $event->data['orderId']]);
     $config = Config::getModelByKey('ecommerceCounters');
     if (empty($event->data['orderId']) || empty($config) || empty($order)) {
         return;
     }
     $orderItems = OrderItem::findAll(['order_id' => $event->data['orderId']]);
     if (!empty($orderItems)) {
         $products = [];
         foreach ($orderItems as $item) {
             $product = Product::findById($item->product_id, null, null);
             if (empty($product)) {
                 continue;
             }
             $category = Category::findById($product->main_category_id);
             $category = empty($category) ? 'Магазин' : str_replace('\'', '', $category->name);
             $products[] = ['id' => $product->id, 'name' => str_replace('\'', '', $product->name), 'price' => number_format($product->price, 2, '.', ''), 'category' => $category, 'qnt' => $item->quantity];
         }
         $order = ['id' => $order->id, 'total' => number_format($order->total_price, 2, '.', '')];
         echo Yii::$app->view->renderFile(Yii::getAlias('@app/modules/seo/views/manage/_ecommerceCounters.php'), ['order' => $order, 'products' => $products, 'config' => Json::decode($config->value)]);
     }
 }
Пример #6
0
 /**
  * Add new message to OrderChat
  * @param $orderId
  * @return array<string,integer>
  * @throws BadRequestHttpException
  */
 public function actionSendToOrderChat($orderId)
 {
     Yii::$app->response->format = Response::FORMAT_JSON;
     /** @var Order $order */
     $order = Order::findOne($orderId);
     if (null === $order) {
         throw new BadRequestHttpException();
     }
     $message = new OrderChat();
     $message->loadDefaultValues();
     $message->message = Yii::$app->request->post('message');
     $message->order_id = $order->id;
     $message->user_id = Yii::$app->user->id;
     if ($message->save()) {
         if ($order->manager_id != Yii::$app->user->id) {
             Notification::addNotification($order->manager_id, Yii::t('app', 'Added a new comment to <a href="{orderUrl}" target="_blank">order #{orderId}</a>', ['orderUrl' => Url::toRoute(['/backend/order/view', 'id' => $order->id]), 'orderId' => $order->id]), 'Order', 'info');
         }
         $message->refresh();
         $user = $message->user;
         return ['status' => 1, 'message' => $message->message, 'user' => null !== $user ? $user->username : Yii::t('app', 'Unknown'), 'gravatar' => null !== $user ? $user->gravatar() : null, 'date' => $message->date];
     }
     return ['status' => 0];
 }
Пример #7
0
 /**
  * Bootstrap method to be called during application bootstrap stage.
  * @param Application $app the application currently running
  */
 public function bootstrap($app)
 {
     /**
      * Move orders/order params from guest to logged/signed user
      */
     Event::on(\yii\web\User::className(), \yii\web\User::EVENT_AFTER_LOGIN, function ($event) {
         /** @var UserEvent $event */
         $orders = \Yii::$app->session->get('orders', []);
         foreach ($orders as $k => $id) {
             /** @var app\modules\shop\models\Order $order */
             $order = app\modules\shop\models\Order::findOne(['id' => $id]);
             if (!empty($order) && 0 === intval($order->user_id)) {
                 $order->user_id = $event->identity->id;
                 $order->save();
             }
         }
     });
 }