<?php
namespace app\admin\controller;

use app\common\model\MateGoodsLog;
use app\hander\HelpHander;
use think\App;
use think\Db;
use think\Exception;

class MateApplyUse extends Auth
{
    public function __construct(App $app = null) {
        parent::__construct($app);
        $this->table = 'mate_apply_use';
    }

    //领取记录
    public function get(){
        if(request()->isAjax()){
            //分页参数
            $length = input('rows',10,'intval');   //每页条数
            $page = input('page',1,'intval');      //第几页
            $start = ($page - 1) * $length;     //分页开始位置
            //排序
            $sortRow = input('sidx','sort','trim');      //排序列
            $sort = input('sord','asc','trim');        //排序方式
            $order = $sortRow.' '.$sort.' ,id desc';

            $title = input('title','','trim');
            if($title){
                $map[] = ['sn','like','%'.$title.'%'];
            }

//            $orgs = mate_user($this->userId);
//            if(!empty($orgs)){
//                $map[] = ['org_id','in',$orgs];
//            }else{
//                $map[] = ['org_id','=',$this->orgId];
//            }

            $map[] = ['type','=',1];
            $map[] = ['org_id','=',$this->orgId];
            $map= empty($map) ? true: $map;
            //数据查询
            $lists = Db::name('mate_apply_use')
                ->where($map)
                ->limit($start,$length)
                ->order($order)
                ->select();
            foreach ($lists as $k=>$v){
                $lists[$k]['userName'] = Db::name('user')
                    ->where('id',$v['user_id'])
                    ->value('real_name');
                $lists[$k]['approverName'] = Db::name('user')
                    ->where('id',$v['user_id'])
                    ->value('real_name');
            }
            //数据返回
            $totalCount = Db::name('mate_apply_use')->where($map)->count();
            $totalPage = ceil($totalCount/$length);
            $result['page'] = $page;
            $result['total'] = $totalPage;
            $result['records'] = $totalCount;
            $result['rows'] = $lists;
            return json($result);
        }else{
//            $isMateUser = is_mate_user($this->userId);
//            $this->assign('isMateUser',$isMateUser);
            $this->assign('meta_title','物品领取记录');
            return $this->fetch();
        }
    }

    //审核
    public function check($id=0){
        if(request()->isAjax()){
            $data = request()->post();
            $info = Db::name('mate_apply_use')->where('id',$id)->find();
            if(!$info){
                $this->error('记录不存在');
            }
            if($info['status'] != 0){
                $this->error('记录已处理');
            }

            $goods = Db::name('mate_apply_use_goods')->where('apply_id',$id)->select();

            if($data['status'] == 1){
                Db::startTrans();
                try{
                    $data = [
                        'status'=>1,
                        'approver_user_id'=>$this->userId,
                        'approver_time'=>date('Y-m-d H:i:s')
                    ];
                    // 更改记录状态
                    $cc = Db::name('mate_apply_use')->where('id',$info['id'])->update($data);
                    if(!$cc){
                        \exception('操作失败');
                    }
                    // 更新物品信息
                    if($info['type'] == 1){ // 领取
                        foreach ($goods as $k=>$v){
                            $ginfo = Db::name('mate_apply_use')
                                ->where('id',$v['goods_id'])
                                ->where('org_id',cur_org_id())
                                ->find();
                            if($ginfo['consume'] == 2 && $ginfo['type'] == 2){ // 出库消耗
                                $gs = [[
                                    'goodsId' => $v['goods_id'],
                                    'nums' => $v['nums'],
                                    'price' => $v['price']
                                ]];
                                $ret = model('MateGoodsUse')->save1(3,$v['id'],$info['user_id'],cur_org_id(),$gs);
                                if(!$ret){
                                    \exception('操作失败');
                                }
                            }else{ //出库到小包
                                $uginfo = Db::name('mate_user_goods')
                                    ->where('user_id',$info['user_id'])
                                    ->where('org_id',$info['org_id'])
                                    ->where('goods_id',$v['goods_id'])
                                    ->find();
                                if($uginfo){
                                    Db::name('mate_user_goods')
                                        ->where('id',$uginfo['id'])
                                        ->update([
                                            'nums'=>$uginfo['nums'] + $v['nums'],
                                            'price' => round(($v['nums']*$v['price'] + $uginfo['nums']*$uginfo['price'])/($uginfo['nums'] + $v['nums']),2)
                                        ]);
                                }else{
                                    $dd =  Db::name('mate_user_goods')
                                        ->insert([
                                            'org_id'=>cur_org_id(),
                                            'user_id'=>$info['user_id'],
                                            'goods_id'=>$v['goods_id'],
                                            'nums'=>$v['nums'],
                                            'price'=>$v['price'],
                                        ]);
                                    if(!$dd){
                                        \exception('操作失败');
                                    }
                                }

                            }
                        }
                    }else{ //归还
                        foreach ($goods as $k=>$v){
                            $ginfo = Db::name('mate_goods')
                                ->where('id',$v['goods_id'])
                                ->where('org_id',cur_org_id())
                                ->find();

                            $cc =  Db::name('mate_goods')
                                ->where('id',$ginfo['id'])
                                ->update([
                                    'nums'=>$ginfo['nums'] + $v['nums'],
                                    'price' => round(($v['nums']*$v['price'] + $ginfo['nums']*$ginfo['price'])/($ginfo['nums'] + $v['nums']),2)
                                ]);
                            if(!$cc){
                                \exception('操作失败');
                            }
                        }
                    }
                    Db::commit();
                }catch (\Exception $e){
                    $this->error($e->getMessage());
                    Db::rollback();
                }
                $this->success('操作成功');
            }elseif ($data['status'] == 2){
                Db::startTrans();
                try{
                    $aa = Db::name('mate_apply_use')
                        ->where('id',$info['id'])
                        ->update([
                            'status' =>2,
                            'approver_user_id'=>$this->userId,
                            'approver_time'=>date('Y-m-d H:i:s')
                        ]);
                    // 更改记录状态
                    if(!$aa){
                        \exception('操作失败');
                    }

                    // 更新物品信息
                    if($info['type'] == 1){ // 领取反库
                        foreach ($goods as $k=>$v){
                            $ginfo =  Db::name('mate_goods')
                                ->where('org_id',cur_org_id())
                                ->where('id',$v['goods_id'])
                                ->find();

                            $b =  Db::name('mate_goods')
                                ->where('id',$ginfo['id'])
                                ->update([
                                    'nums'=>$ginfo['nums'] + $v['nums'],
                                    'price'=>round(($v['nums'] * $v['price'] + $ginfo['nums'] * $ginfo['price'])/($ginfo['nums'] + $v['nums']),2),

                                ]);
                            if(!$b){
                                \exception('操作失败');
                            }
                        }
                    }else{ //归还小包

                        foreach ($goods as $k=>$v){
                            $uginfo = Db::name('mate_user_goods')
                                ->where('goods_id',$v['goods_id'])
                                ->where('org_id',cur_org_id())
                                ->where('user_id',$info['user_id'])
                                ->find();

                            $c =  Db::name('mate_user_goods')
                                ->where('id',$uginfo['id'])
                                ->update([
                                    'nums'=>$uginfo['nums'] + $v['nums'],
                                    'price' => round(($v['nums']*$v['price'] + $uginfo['nums']*$uginfo['price'])/($uginfo['nums'] + $v['nums']),2)
                                ]);
                            if(!$c){
                                \exception('操作失败');
                            }
                        }
                    }

                    Db::commit();
                }catch (Exception $e){
                    $this->error($e->getMessage());
                    Db::rollback();
                }
                $this->success('操作成功');
            }

        }else{

            $this->assign('id',$id);
            return $this->fetch();
        }

    }


    //归还
    public function back(){
        if(request()->isAjax()){
            //分页参数
            $length = input('rows',10,'intval');   //每页条数
            $page = input('page',1,'intval');      //第几页
            $start = ($page - 1) * $length;     //分页开始位置
            //排序
            $sortRow = input('sidx','sort','trim');      //排序列
            $sort = input('sord','asc','trim');        //排序方式
            $order = $sortRow.' '.$sort.' ,id desc';

            $title = input('title','','trim');
            if($title){
                $map[] = ['sn','like','%'.$title.'%'];
            }
            $map[] = ['type','=',2];

//            $orgs = mate_user($this->userId);
//            if(!empty($orgs)){
//                $map[] = ['org_id','in',$orgs];
//            }else{
//                $map[] = ['org_id','=',$this->orgId];
//            }
            $map[] = ['org_id','=',$this->orgId];
            $map= empty($map) ? true: $map;
            //数据查询
            $lists = Db::name('mate_apply_use')
                ->where($map)
                ->limit($start,$length)
                ->order($order)
                ->select();
            foreach ($lists as $k=>$v){
                $lists[$k]['userName'] = Db::name('user')
                    ->where('id',$v['user_id'])
                    ->value('real_name');
                $lists[$k]['approverName'] = Db::name('user')
                    ->where('id',$v['user_id'])
                    ->value('real_name');
            }
            //数据返回
            $totalCount = Db::name('mate_apply_use')->where($map)->count();
            $totalPage = ceil($totalCount/$length);
            $result['page'] = $page;
            $result['total'] = $totalPage;
            $result['records'] = $totalCount;
            $result['rows'] = $lists;
            return json($result);
        }else{
//            $isMateUser = is_mate_user($this->userId);
//            $this->assign('isMateUser',$isMateUser);
            $this->assign('meta_title','物品归还记录');
            return $this->fetch();
        }
    }


    public function detail($id){
        $info = (new \app\common\model\MateApplyUse())->info($id);
        if(!$info) $this->error('记录不存在');
        $this->assign('info',$info);
        return $this->fetch();
    }

}