BasketController.php 7.45 KB
<?php

namespace frontend\controllers;


use common\models\Customer;
use common\models\OrdersProducts;
use Yii;
use yii\helpers\ArrayHelper;
use yii\web\Controller;
use common\modules\product\models\ProductVariant;
use common\models\Orders;
use common\widgets\Mailer;
//use app\models\User;
//use app\models\OrdersProducts;
use yii\web\HttpException;

class BasketController extends Controller
{

    public function actionIndex(){ 
            $modelMod = new ProductVariant;
            $modelOrder = new Orders;

            if(!empty($_GET['deleteID'])){
                $modelOrder->deleteBasketMod($_GET['deleteID']);
                return Yii::$app->response->redirect(['basket/index']);
            }

            if(isset($_POST['update']) && isset($_POST['ProductVariant'])){

                foreach ($_POST['ProductVariant'] as $index=>$row) {
                    $modelOrder->updateBasket($row);
                }
            }elseif(isset($_POST['ProductVariant'])){
//                die(print_r($_POST));
                $body = '';
                foreach ($_POST['ProductVariant'] as $index=>$row) {
                  $body .= $row['product_name'].' '.$row['name'].' Кол:'.$row['count'].' Цена:'.$row['sum_cost'];
                  $body .= "\n\r";
                }
                $body .= "\n\r";

                    if ($modelOrder->load(Yii::$app->request->post()) && $modelOrder->save()) {
                        $productV = $_POST['ProductVariant'];

                        foreach ($productV as $index=>$row) {
                            $modelOrdersProducts = new OrdersProducts();
                            $mod_id = $row['id'];

                            $data['OrdersProducts'] = $row;
                            $data['OrdersProducts']['mod_id'] = $mod_id;
                            $data['OrdersProducts']['order_id'] = $modelOrder->id;
                            $product = ProductVariant::findOne($mod_id);
                            /**
                             * Проверяем товар на наличие
                             */

                            if(!$product->stock > 0 || !$product->price > 0 ){

                                /**
                                 * Добавляем сообщение об ошибке
                                 */
                                \Yii::$app->getSession()->setFlash('error', 'К сожалению товара '.$product->name . ' нет в наличии');
                                /**
                                 * Удаляем заказ
                                 */
                                $modelOrder->delete();

                                $basket_mods = $modelOrder->getBasketMods();

                                return $this->render('index',[
                                    'modelMod'=>$modelMod,
                                    'basket_mods'=>$basket_mods,
                                    'modelOrder'=>$modelOrder,
                                ]);
                            }else {

                                /**
                                 * Удаляем товар с массива и сохраняем в заказ
                                 */
                                unset($row['id']);
                                $productV[$index]['img'] =  \common\components\artboximage\ArtboxImageHelper::getImageSrc($product->image->imageUrl, 'list');
                                $modelOrdersProducts->load($data);
                                $modelOrdersProducts->validate();
                                $modelOrdersProducts->save();
                            }

                        }

                        /**
                         * Сохраняем заказ
                         */



                        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(['basket/success',
                        ]);
                    }
                }

            $basket_mods = $modelOrder->getBasketMods();

            if(!empty(Yii::$app->user->id)){
                $user = Customer::findOne(Yii::$app->user->id);
                $modelOrder->email = $user->username;
                $modelOrder->phone = $user->phone;
                $modelOrder->name = $user->name;
            }



            return $this->render('index', [
                    'modelMod'=>$modelMod,
                    'basket_mods'=>$basket_mods,
                    'modelOrder'=>$modelOrder,
            ]);
    }

    public function actionItems(){
        $modelMod = new Orders;


        if(!empty($_GET['deleteID'])){
            $modelMod->deleteBasketMod($_GET['deleteID']);
        }

        if(isset($_POST['ProductVariant'])){
            foreach ($_POST['ProductVariant'] as $index=>$row) {
                $modelMod->updateBasket($row);
            }
        }
        $basket_mods = $modelMod->getBasketMods();
        return $this->renderAjax('ajax_items', [
            'modelMod'=>$modelMod,
            'basket_mods'=>$basket_mods,
        ]);
    }

    public function actionInfo()
    {
            $modelMod = new Orders();
            $info = $modelMod->rowBasket();
            return $this->renderAjax('ajax_info', [
                    'info'=>$info,
            ]);
    }

        public function actionAdd(){
		$modelOrders = new Orders();
                if(isset($_GET['mod_id'],$_GET['count']) && $_GET['mod_id']>0 && $_GET['count']>0){
                    $modelOrders->addBasket($_GET['mod_id'],$_GET['count']);
		}
                
                Yii::$app->end();
        }
        
        
        public function actionSuccess(){

            $orderData = Yii::$app->session->get('order_data');
            unset($_SESSION['order_data']);
            return $this->render('success',[

                'order' => $orderData['order'],
                'variants' => $orderData['variants'],
            ]);
        }
        
        
    
}