Orders.php 4.57 KB
<?php
namespace common\models;

use Yii;
use yii\web\Session;
use common\modules\product\models\ProductVariant;

class Orders extends \yii\db\ActiveRecord
{
 private $data;
    public static function tableName()
    {
        return 'orders';
    }

    public function rules()
    {
        return [
            [['name', 'phone'], 'required','whenClient' => true],
            [['total','body','email','phone2','delivery','payment','adress','city'], 'safe'],
            [['email'],'email'],
        ];
    }

    public function attributeLabels()
    {
        return [
            'name' => 'Ф.И.О',
            'phone'=>'Телефон',
            'phone2'=>'Доп. Тел.',
            'body'=>'Сообщение',
            'adress'=>'Адрес',
            'city'=>'Город',
            'email'=>'E-mail',
            'date_time'=>'Дата',
            'total'=>'Сума',
            'status'=>'Статус',
            'delivery'=>'Вариант доставки',
            'payment'=>'Способы оплаты',
        ];
    }

    public function beforeSave($insert) {
        $this->user_id = Yii::$app->user->id;
        $this->date_time = new \yii\db\Expression('NOW()');
        return parent::beforeSave($insert);
    }

    public function beforeDelete() {
        return parent::beforeDelete();
    }


    public function addBasket ($mod_id, $count)
    {
        $session = new Session;
        $session->open ();
        $data = $session['basket'];
        $i = 0;
        if (isset($session['basket']))
        {
            foreach ($session['basket'] as $key => $basket)
            {
                if ($mod_id == $basket['id'])
                {
                    $data[$key]['count'] += $count;
                    $session['basket'] = $data;
                    $i++;
                }
            }
        }
        if ($i == 0)
        {
            $data[] = ['id' => $mod_id, 'count' => $count];
            $session['basket'] = $data;
        }
    }


    public function rowBasket ()
    {
        $session = new Session;
        $session->open ();
        $cost = 0;
        $count = 0;
        if (isset($session['basket']) && count ($session['basket']))
        {
            foreach ($session['basket'] as $product)
            {
                $count += $product['count'];
            }
        }

        return (object)['cost' => $cost, 'count' => $count];
    }


    public function deleteBasketMod ($id)
    {
        $session = new Session;
        $session->open ();
        $basket = $session['basket'];
        foreach ($basket as $key => $product)
        {
            if ($id == $product['id']) unset($basket[$key]);
        }
        $session['basket'] = $basket;
    }

    public function updateBasket ($row)
    {
        $session = new Session;
        $session->open ();
        //$data = array();
        if ($row['count'] > 0) $this->data[] = ['id' => $row['id'], 'count' => $row['count']];
        $session['basket'] = $this->data;
    }


    public function getBasketMods ()
    {
        $session = new Session;
        $session->open ();
        $products = [];
        if (empty($session['basket'])) return [];
        foreach ($session['basket'] as $product)
        {
            $row = ProductVariant::find ()->select (['product_variant.*', 'product.name as product_name', 'product.alias'])
                ->where (['product_variant.product_variant_id' => $product['id']])
                ->leftJoin ('product', 'product.product_id = product_variant.product_id')
                ->one ();
            $row->count = $product['count'];
            $row->sum_cost = $product['count'] * $row->price;
            $products[] = $row;
        }

        return $products;
    }

    public function getSumCost ()
    {
        $session = new Session;
        $session->open ();
        $cost = 0;
        if (empty($session['basket'])) return false;
        foreach ($session['basket'] as $product)
        {
            $cost += ($this->getModCost ($product['id']) * $product['count']);
        }

        return $cost;
    }

    private function getModCost ($mod_id)
    {
        $mod = ProductVariant::find ()->where (['product_variant_id' => $mod_id])->one ();

        return $mod->price;
    }
    public function clearBasket ()
    {
        $session = new Session;
        $session->open ();
        $session['basket'] = null;
    }
    public function getUser()
    {
        return $this->hasOne(User::className(), ['id' => 'user_id']);
    }

    public function getProducts()
    {
        return $this->hasMany(OrdersProducts::className(), ['order_id' => 'id']);
    }
}