basket; $data = $basket->getData(); $models = $basket->findModels(array_keys($data)); return $this->render('index', [ 'models' => $models, 'basket' => $basket, ]); } /** * @return string */ public function actionSave() { $modelOrder = new Orders; /** * @var $basket Basket */ $basket = \Yii::$app->basket; $productV = $basket->getData(); if(!empty( $productV ) && $modelOrder->load(Yii::$app->request->post()) && $modelOrder->save()) { foreach($productV as $index => $row) { $modelOrdersProducts = new OrdersProducts(); $mod_id = $index; $product = ProductVariant::findOne($mod_id); /** * Проверяем товар на наличие */ if(!$product->stock > 0 || !$product->price > 0) { /** * Добавляем сообщение об ошибке */ \Yii::$app->getSession() ->setFlash('error', 'К сожалению товара ' . $product->name . ' нет в наличии'); $basket->delete($product->product_variant_id); unset( $productV[ $index ] ); } else { /** * Удаляем товар с массива и сохраняем в заказ */ $modelOrdersProducts->order_id = $modelOrder->id; $modelOrdersProducts->product_name = $product->product->name; $modelOrdersProducts->name = $product->name; $modelOrdersProducts->price = $productV[ $index ][ 'price' ]; $modelOrdersProducts->count = $productV[ $index ][ 'count' ]; $modelOrdersProducts->sum_cost = $productV[ $index ][ 'price' ] * $productV[ $index ][ 'count' ]; $modelOrdersProducts->mod_id = $mod_id; $modelOrdersProducts->sku = $product->sku; $modelOrdersProducts->validate(); $modelOrdersProducts->save(); $productV[ $index ] = ArrayHelper::toArray($modelOrdersProducts); if(isset($product->image)){ $productV[ $index ][ 'img' ] = \common\components\artboximage\ArtboxImageHelper::getImageSrc($product->image->imageUrl, 'list'); } } } /** * Сохраняем заказ */ if(!Yii::$app->user->id && !empty( $modelOrder->email )) { $modelUser = new Customer(); $modelUser->role = 'person'; $modelUser->username = $modelOrder->email; $modelUser->name = $modelOrder->name; $modelUser->phone = $modelOrder->phone; $modelUser->password = Yii::$app->getSecurity() ->generateRandomString(10); $modelUser->group_id = 2; $modelUser->save(); } $order = clone $modelOrder; /** * Чистим сессию корзины */ $modelOrder->clearBasket(); Mailer::widget([ 'type' => 'order', 'subject' => 'Спасибо за покупку', 'email' => $modelOrder->email, 'params' => [ 'order' => $order, 'variants' => $productV, ], ]); //$text = "# zakaz: ". $order->id .". V blijayshee vremya menedjer svyajetsya s Vami. (044) 303 90 15"; //Yii::$app->sms->send($order->phone, $text); Yii::$app->session[ 'order_data' ] = [ 'order' => $order, 'variants' => $productV, ]; return $this->redirect([ 'order/success' ]); } $data = $basket->getData(); $models = $basket->findModels(array_keys($data)); return $this->render('index', [ 'models' => $models, 'basket' => $basket, ]); } public function actionQuick() { $response = \Yii::$app->response; $request = \Yii::$app->request; $response->format = $response::FORMAT_JSON; $product_variant_id = (int) $request->post('product_variant_id'); $orders = new Orders([ 'scenario' => Orders::SCENARIO_QUICK, 'name' => 'Покупка в 1 клик', ]); if(!empty( $product_variant_id )) { /** * @var ProductVariant $product_variant */ $product_variant = ProductVariant::findOne($product_variant_id); } else { throw new InvalidParamException('Не указан товар'); } if(!empty( $product_variant ) && $orders->load($request->post()) && $orders->save()) { if($product_variant->stock <= 0 || $product_variant->price <= 0) { $orders->delete(); return [ 'error' => 'К сожалению товара ' . $product_variant->name . ' нет в наличии', ]; } else { $order_product = new OrdersProducts([ 'order_id' => $orders->id, 'product_name' => $product_variant->product->name, 'name' => $product_variant->name, 'price' => $product_variant->price, 'count' => 1, 'sum_cost' => $product_variant->price, 'mod_id' => $product_variant->product_variant_id, 'sku' => $product_variant->sku, ]); $order_product->save(); return [ 'result' => 'Спасибо за заказ! Наши менеджеры свяжутся с Вами в ближайшее время.', ]; } } else { throw new InvalidConfigException('Товар не найден или не удалось загрузить данные о покупателе.'); } } public function actionSuccess() { return $this->render('success'); } public function actionQuickBasket() { $response = \Yii::$app->response; $request = \Yii::$app->request; $response->format = $response::FORMAT_JSON; /** * @var array $data */ $data = \Yii::$app->basket->getData(); $orders = new Orders([ 'scenario' => Orders::SCENARIO_QUICK, 'name' => 'Покупка в 1 клик', ]); if(!empty( $data )) { /** * @var ProductVariant[] $product_variants * @var OrdersProducts[] $order_products */ $product_variants = []; $order_products = []; foreach($data as $product_variant_id => $item) { $product_variant = ProductVariant::findOne($product_variant_id); if(!empty($product_variant) && $product_variant->stock > 0 && $product_variant->price > 0) { $product_variants[$product_variant_id] = $product_variant; $order_products[$product_variant_id] = new OrdersProducts([ 'product_name' => $product_variant->product->name, 'name' => $product_variant->name, 'price' => $product_variant->price, 'count' => $item['count'], 'sum_cost' => $item['count'] * $product_variant->price, 'mod_id' => $product_variant->product_variant_id, 'sku' => $product_variant->sku, ]); } } } else { throw new InvalidParamException('Не указан товар'); } if(!empty( $order_products ) && $orders->load($request->post()) && $orders->save()) { foreach($order_products as $order_product) { $order_product->order_id = $orders->id; $order_product->save(); } \Yii::$app->basket->clear(); return [ 'result' => 'Спасибо за заказ! Наши менеджеры свяжутся с Вами в ближайшее время.', ]; } else { throw new InvalidConfigException('Товар не найден или не удалось загрузить данные о покупателе.'); } } }