<?php
/**
 * 开票接口控制器
 */
namespace app\modules\shops\v1\controllers;
use app\modules\common\Helper;
use app\modules\common\Verify;
use app\modules\logic\services\UserService;
use app\modules\logic\model\BillingModel;
use app\modules\logic\model\OrderModel;
use app\modules\logic\model\PayLogModel;
use Yii;
use yii\web\Controller;

class BillController extends MiddleController {
	/**
	 * 返回
	 * @param $code
	 * @param string $info
	 * @param string $controller
	 * @param string $total
	 */
	protected function response($code, $info = '', $total = '', $controller = 'bill') {
		return parent::response($code, $info, $total, $controller);
	}
	 /**
     * [actionAdd 添加发票]
     * @apiDoc
     * @api     v1/bill/add
     * @group   bill
     * @name    提交发票
     * @desc    门店APP-提交发票
     * @method  POST
     * @param head string 发票抬头 req
     * @param tax_number string 税号 req
     * @param bank string 开户行 noreq
     * @param bank_account string 银行账号 noreq
     * @param money number 金额 req
     * @param email string 邮箱 req
     * @param order_ids string IDS【1,2,3】 req
     * @param type int 提交类型【1，订单。2，金币】 req
     * @author JOHN.W
     * @version [1.0]
     * @return  json
     {
		"code": "000000",
		"msg": "提交成功",
		"info": "1"
		}
     */
	public function actionAdd(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        $param = Helper::elements(['head','tax_number','bank','bank_account','money','email','order_ids'],$this->para,'');
        $param['user_id']=$this->user_id;
        $param['created']=time();
        $Billing = new BillingModel();
        $res = $Billing->saveUs($param);
        $ids = explode(',', $param['order_ids']);
        if(!empty($ids)){
            switch ($this->para['type']) {
                case '1':
                    $Order = new OrderModel();
                    $Order->updateAll(['bill_status' => 1], ['in', 'order_id', $ids]);
                    break;
                case '2':
                    $PayLog = new PayLogModel();
                    $PayLog->updateAll(['bill_status' => 1], ['in', 'id', $ids]);
                    break;
            }
        }
        if($res){
        	return $this->response('deal_succ', '提交成功',$res);
        }else{
        	return $this->response('deal_false', '提交失败');
        }
	}
	/**
     * [actionDetail 发票详情]
     * @apiDoc
     * @api     v1/bill/detail
     * @group   bill
     * @name    发票详情
     * @desc    门店APP-发票详情
     * @method  POST
     * @param id int 发票ID req
     * @author JOHN.W
     * @version [1.0]
     * @return  json
		{
		"code": "000000",
		"msg": "获取成功",
		"info": {
		"money": "549.00",
		"text": "技师劳动报酬",
		"bill_company": "四川省誉通科技服务有限公司"
		}
		}
     */
	public function actionDetail(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if(empty($this->para['id'])){
        	return $this->response('para_miss', 'ID不能为空');
        }
        $id = $this->para['id'];
        $Billing = new BillingModel();
        $row = $Billing->getWidgetRow(['cols'=>['money'],'id'=>$id]);
        if(!empty($row)){
        	$row['text'] = '技师劳动报酬';
        	$row['bill_company'] = '四川省誉通科技服务有限公司';
        }
        return $this->response('deal_succ','获取成功' ,$row);
	}
    /**
     * [actionList 开票列表]
     * @apiDoc
     * @api    v1/bill/list
     * @group  bill
     * @name   开票列表
     * @desc   门店APP-开票列表
     * @method POST
     * @param star_time string 开始时间【Y-m-d】 noreq
     * @param end_time string 结束时间【Y-m-d】 noreq
     * @param type int 类型【1,订单。2，金币】 req
     * @return josn
             {
            "code": "000000",
            "msg": "获取成功",
            "info": {
                "list": [
                    {
                        "order_id": "1",
                        "plate_no": "川A12356",
                        "type": "1",
                        "carmodel_id": "2",
                        "pro_extra": "1",
                        "price": "18.00",
                        "sp_time": "2019-09-13 23:34:26",
                        "fore_time": "1970-01-01 08:00:00",
                        "type_show": "实时单",
                        "pro_extra_show": {
                            "show_name": [
                                "美容-保养"
                            ],
                            "total": 1
                        },
                        "carmodel_id_show": "越野车"
                    },
                    {
                        "order_id": "2",
                        "plate_no": "川A12357",
                        "type": "2",
                        "carmodel_id": "2",
                        "pro_extra": "1",
                        "price": "18.00",
                        "sp_time": "2019-09-13 23:34:26",
                        "fore_time": "1970-01-01 08:00:00",
                        "type_show": "预约单",
                        "pro_extra_show": {
                            "show_name": [
                                "美容-保养"
                            ],
                            "total": 1
                        },
                        "carmodel_id_show": "越野车"
                    }
                ],
                "total": "2"
            }
        }
        {
            "code": "000000",
            "msg": "获取成功",
            "info": {
                "list": [
                    {
                        "pay_money": "50.00",
                        "created": "2019-10-15 15:14:37",
                        "nid": "BGD201910151514369910010198697"
                    }
                ],
                "total": "1"
            }
        }
     */
    public function actionList(){
        if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        if(empty($this->para['type']) || !in_array($this->para['type'], ['1','2']))
        {
            return $this->response('para_miss', '类型不正确');
        }
        $shop_user_id = UserService::getShopUserId($this->user_id);
        
        switch ($this->para['type']) {
            case '1':
                $Order = new OrderModel();
                $model = $Order->find()->select(['{{%order}}.order_id','plate_no','type','carmodel_id','pro_extra','carmodel_id','price','sp_time','fore_time'])->leftJoin("{{%order_info}}", '{{%order}}.`order_id` = {{%order_info}}.`order_id`')->where(['shop_user_id'=>$shop_user_id,'bill_status'=>0,'status'=>5]);
                if(isset($this->para['star_time']) && !empty($this->para['star_time'])){
                    $star_time = strtotime($this->para['star_time']);
                    $model->andWhere(['>=','sp_time',$star_time]);
                }
                if(isset($this->para['end_time']) && !empty($this->para['end_time'])){
                    $end_time = strtotime($this->para['end_time']);
                    $model->andWhere(['<=','sp_time',$end_time]);
                }
                $ret = [
                    'list'=>$model->asArray()->all(),
                    'total'=>$model->count()
                ];
                foreach ($ret['list'] as &$value) {
                    $value['type_show']= Helper::getOrderTypeNameApp($value['type']);
                    $value['pro_extra_show']= Helper::getProExtraNameById($value['pro_extra'],true);
                    $value['carmodel_id_show']= Helper::getCarModelName($value['carmodel_id']);
                    $value['sp_time'] = date("Y-m-d H:i:s",$value['sp_time']);
                    $value['fore_time'] = date("Y-m-d H:i:s",$value['fore_time']);
                }
                break;
            case '2':
                $PayLog = new PayLogModel();
                $model = $PayLog->find()->select(['id','pay_money','created','nid'])->where(['sp_user_id'=>$this->user_id,'order_type'=>2,'bill_status'=>0]);
                if(isset($this->para['star_time']) && !empty($this->para['star_time'])){
                    $star_time = strtotime($this->para['star_time']);
                    $model->andWhere(['>=','created',$star_time]);
                }
                if(isset($this->para['end_time']) && !empty($this->para['end_time'])){
                    $end_time = strtotime($this->para['end_time']);
                    $model->andWhere(['<=','created',$end_time]);
                }
                $ret = [
                    'list'=>$model->asArray()->all(),
                    'total'=>$model->count()
                ];
                foreach ($ret['list'] as &$value) {
                     $value['created'] = date("Y-m-d H:i:s",$value['created']);
                }
                break;
            default:
               $ret = [];
        }
       
        return $this->response('deal_succ','获取成功' ,$ret);
    }
}