<?php
/**
 * Created by PhpStorm.
 * User: liuyingjie
 * Date: 2017/8/30
 * Time: 11:20
 */

namespace frontend\controllers;

use common\libs\MyLib;
use common\models\FixCarBeautify;
use common\models\FixCarJidian;
use common\models\FixCarMetal;
use common\models\FixCarPrice;
use common\models\FixCarProject;
use common\models\FixMetalLevel;
use common\models\Message;
use Yii;
use common\models\FixCarCategory;
use common\models\FixCarGroup;
use yii\data\Pagination;
use yii\db\Exception;
use yii\helpers\ArrayHelper;
use yii\web\Response;

class FixCarProjectController extends BaseController
{
    public function actionIndex()
    {
        $request = Yii::$app->request;
        $session = Yii::$app->session;

        $render['page'] = $page = $request->get('page', 0);
        $render['name'] = $name = $request->get('name', '');
        $render['car_price'] = $car_price = $request->get('car_price', 0);
        $render['type'] = $type = $request->get('type', 0);
        $render['groups'] = FixCarGroup::find()->all();
        $query = FixCarProject::find();

        if('' !== $name) $query = $query->andWhere(['like','name',$name]);
        if($type > 0) $query = $query->andWhere('type='.$type);
        $sql = $query->createCommand()->rawSql;
        $session->remove('fix-car-project-index');
        $session->set('fix-car-project-index', $sql);
        $total = $query->count();

        $pagination = new Pagination(['totalCount' => $total, 'pageSize' => 20]);
        $pagination->setPage($page - 1);

        $query = $query->offset($pagination->offset)->limit($pagination->limit);
        $render['lists'] = $project = $query->all();

        $render['page_info'] = MyLib::getPageInfo($pagination);

        return $this->render('index', $render);
    }

    public function actionInfo()
    {
        $request = Yii::$app->request;
        //保存、编辑
        if ($request->isAjax) {
            Yii::$app->response->format = Response::FORMAT_JSON;
           try{
               $id = intval($request->post('id',0));
               $type = intval($request->post('type',0));
               $price = $request->post('price',[]);

               $fix_car_project = $id > 0 ? FixCarProject::findOne($id) : new FixCarProject();
               $fix_car_project->scenario = 'default';
               $fix_car_project->attributes = $request->post();
               if(!$fix_car_project->validate()){
                    $errors = array_values($fix_car_project->errors);
                    return Message::getMessage(false,$errors[0]);
               }
               $fix_car_project->save();
               $project_id = $id >0 ? $id :Yii::$app->db->getLastInsertID();
                //机电、喷漆
               if(!in_array($type,[12,7])){
                   unset($data);
                   if($id > 0) FixCarJidian::deleteAll(['project_id'=>$id]);
                   foreach($price as $key=>$val){
                       $data[] = [
                           'id' => $key.$project_id,
                           'price'=> $val,
                           'project_id'=>$project_id,
                           'car_price_id'=>$key
                       ];
                   }
                   if(!Yii::$app->db->createCommand()->batchInsert(FixCarJidian::tableName(),['id','price','project_id','car_price_id'],$data)->execute()) throw new Exception('操作失败a!');
                   //钣金
               }elseif(7 === $type){
                   unset($data);
                   if($id > 0) FixCarMetal::deleteAll(['project_id'=>$id]);
                   foreach($price as $key=>$val){
                       $data[] = [
                           'id' => $key.$project_id,
                           'price'=> $val,
                           'project_id'=>$project_id,
                           'level_id'=>$key
                       ];
                   }
                   if(!Yii::$app->db->createCommand()->batchInsert(FixCarMetal::tableName(),['id','price','project_id','level_id'],$data)->execute()) throw new Exception('操作失败b!');
                   //美容
               }elseif(12 === $type){
                   $beautify = $id > 0 ? FixCarBeautify::findOne($id) : new FixCarBeautify();
                   $beautify->price = $price;
                   $beautify->project_id = $project_id;
                   if(!$beautify->save()) throw new Exception('操作失败c!');
               }
               return Message::getMessage(true,'操作成功!');
           }catch(Exception $e){
               return Message::getMessage(false,$e->getMessage());
           }
        }

        //分组
        $render['groups'] = FixCarGroup::find()->all();
        $render['levels'] = FixMetalLevel::find()->all();
        $render['car_prices'] = array_chunk(FixCarPrice::find()->asArray()->all(),10);

        //详情
        $id = $request->get('id', 0);
        if ($id > 0) {
            $render['info'] = $info = FixCarProject::findOne($id);
        }
        return $this->render('info', $render);
    }
}