diff --git a/common/models/Basket.php b/common/models/Basket.php index 510d57e..b54b0a1 100755 --- a/common/models/Basket.php +++ b/common/models/Basket.php @@ -117,5 +117,9 @@ ->all(); } - + public function clear() + { + $this->setData([]); + } + } \ No newline at end of file diff --git a/frontend/controllers/OrderController.php b/frontend/controllers/OrderController.php index a2e2068..ec33e10 100755 --- a/frontend/controllers/OrderController.php +++ b/frontend/controllers/OrderController.php @@ -1,169 +1,220 @@ basket; - $data = $basket->getData(); - $models = $basket->findModels(array_keys($data)); - return $this->render('index', [ - 'models' => $models, - 'basket' => $basket, - ]); - } - - - /** - * - * @return string - */ - public function actionSave() + + namespace frontend\controllers; + + use common\models\Customer; + use common\models\OrdersProducts; + use common\widgets\Mailer; + use Yii; + use yii\base\InvalidConfigException; + use yii\base\InvalidParamException; + use yii\helpers\ArrayHelper; + use yii\web\Controller; + use common\models\Basket; + use common\modules\product\models\ProductVariant; + use common\models\Orders; + + class OrderController extends Controller { - $modelOrder = new Orders; + + public function actionIndex() + { + $basket = \Yii::$app->basket; + $data = $basket->getData(); + $models = $basket->findModels(array_keys($data)); + return $this->render('index', [ + 'models' => $models, + 'basket' => $basket, + ]); + } + /** - * @var $basket Basket + * @return string */ - $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 { + 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); /** - * Удаляем товар с массива и сохраняем в заказ + * Проверяем товар на наличие */ - $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); - $productV[$index]['img'] = \common\components\artboximage\ArtboxImageHelper::getImageSrc($product->image->imageUrl, 'list'); + 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); + $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, + /** + * Сохраняем заказ + */ + 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']); + //$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, + ]); } - $data = $basket->getData(); - $models = $basket->findModels(array_keys($data)); - return $this->render('index', [ - 'models' => $models, - 'basket' => $basket - ]); - } - - public function actionSuccess(){ - return $this->render('success'); - } - - 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)) { + + public function actionSuccess() + { + return $this->render('success'); + } + + 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 actionQuickBasket() + { + $response = \Yii::$app->response; + $request = \Yii::$app->request; + $response->format = $response::FORMAT_JSON; /** - * @var ProductVariant $product_variant + * @var array $data */ - $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.' нет в наличии', - ]; + $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 { - $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(); + 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' => 'Спасибо за заказ! Наши менеджеры свяжутся с Вами в ближайшее время.' + 'result' => 'Спасибо за заказ! Наши менеджеры свяжутся с Вами в ближайшее время.', ]; + } else { + throw new InvalidConfigException('Товар не найден или не удалось загрузить данные о покупателе.'); } - } else { - throw new InvalidConfigException('Товар не найден или не удалось загрузить данные о покупателе.'); } - } - -} diff --git a/frontend/views/basket/modal_items.php b/frontend/views/basket/modal_items.php index 34ee48b..4749bd0 100755 --- a/frontend/views/basket/modal_items.php +++ b/frontend/views/basket/modal_items.php @@ -1,9 +1,12 @@ getSum(); ?> - -
getImageUrl()); + echo Html::img($model->getImageUrl()); ?> |
- getFullname();?>
+ getFullname(); ?>
-
+
=
getItem($model->product_variant_id);
- echo $item['count'] * $item['price'];
+ echo $item[ 'count' ] * $item[ 'price' ];
?>
@@ -64,8 +64,8 @@ use yii\web\View;
?>
- = Html::a('Оформить заказ',Url::to('/order'),['class'=>'btn'])?>
-
+ = Html::a('Оформить заказ', Url::to('/order'), [ 'class' => 'btn' ]) ?>
+
|
|
@@ -77,18 +77,39 @@ use yii\web\View;
|