OrderController.php 4.62 KB
<?php

namespace frontend\controllers;


use common\models\Customer;
use common\models\OrdersProducts;
use common\widgets\Mailer;
use Yii;
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
{


    public function actionIndex()
    {
        $basket = \Yii::$app->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 . ' нет в наличии');
                    /**
                     * Удаляем заказ
                     */
                    $modelOrder->delete();

                }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,
                        '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 actionSuccess(){
        return $this->render('success', [

        ]);
    }

}