<?php

class flow_emfkClassModel extends flowModel
{
    const PAYMENT_STATUS = [
        0 => '待审核',
        1 => '未提交',
        2 => '审核中',
        3 => '已付款',
        4 => '已付款 缺发票',
        5 => '已付款 发票已上传',
        7 => '被驳回',
        8 => '已确收',
        9 => '审核失败',
    ];



    /**
     * 审核时触发
     * @param $zt 1同意 2拒绝
     * @param $sm
     */
    protected function flowcheckafter($zt, $sm){
        if($zt == 2){
           $this->updatestatus(5);
            $this->sendMess(0,9);
        }
    }
    /**
     * @param int $messType 动作
     * @param int $status 状态
     */
    private function sendMess($messType = 0,$status = 3){
        m('log')->addlog('电费付款','接口动作:'.$messType.'状态:'.$status);

        $url = getconfig('base_url'). 'v2/payment?key=';
        $key = substr(md5(getconfig('openkey').date('Y-m-d')),0,12);
        $url = $url.$key.'&action='.$messType; //接口地址
        $url .= '&numb='.$this->rs['docnum'];
        $url .= '&status='.$status;
        $url .= '&mes='.'';
        m('log')->addlog('电费付款','接口返回信息: url '.$url);

        $res = curlGet($url);
        m('log')->addlog('电费付款','接口返回信息:' .$res);

    }
  public static function dept($data)
    {
        $sql="  id= '$data'";
        $cbzxid = m('tmp_department')->getone($sql, 'id,cost');//查询账户表成本中心id
        return $cbzxid['cost'];
    }


   public static function project($project_code){

        $url = getconfig('base_url'). 'v2/project/list?key=';
        $key = substr(md5(getconfig('openkey').date('Y-m-d')),0,12);
        $url = $url.$key;
        $url .= '&project_code='.$project_code;
        $res = json_decode(curlGet($url),true);
        return $res;
    }

    //二级 或一级审批同意之后进行预扣款
    protected function flowcheckbefore($zt, $sm){
        $id=$this->rs['id'];
        $sql = " mid ='$id' and `table`='c_emfk' ";
        $flow_bill = m('flow_bill')->getone($sql,'allcheckid');
        $allcheckid=explode(',',$flow_bill['allcheckid']);
        $optionid = m('option')->getone("num = 'em_manager' ",'id');
        $optionid=$optionid['id'];
        $option = m('option')->getall("pid = '$optionid' and num =1 order by sort desc",'num,name,value,sort');
        foreach ($option as $key => $value) {
            if(in_array($value['value'], $allcheckid)){
                $checkid= $value['value'];
                break;
            }
        }

        if(empty($checkid)){
            $option = m('option')->getall("pid ='$optionid'  and num =2 order by sort desc",'num,name,value,sort,`explain`');
            foreach ($option as $key => $value) {
                if(in_array($value['value'], $allcheckid)){
                    $checkid= $value['value'];
                    break;
                }
            }
        }


        //zt 1代表同意
        if($zt==1){
            $flowid=$this->getflow();

                if($flowid['nowcheckid']==$checkid){
                    $data = m('c_emfk_details')->getall('mid='.$this->rs['id'], 'id,cbzxid,amount');

                    foreach ($data as $key => $vo) {

                        $project=self::project($vo['cbzxid']);


                        $cbzx_code= self::dept($project['data'][0]['jz_cur_dept']);

                        $sql = " cost_id='$cbzx_code' and status = 1 and  is_default=1";
                        $cost = m('c_fund_account')->getone($sql, 'id,type,freeze_amount,account_balance');//查询账户表成本中心id
                        if($cost['type']=='1'){
                            if(($cost['account_balance']-$cost['freeze_amount'])<$vo['amount']){
                                return "账户余额不足";die;
                            }
                        }
                        $id=$cost['id'];

                        $c_withhold = array(
                            'fund_account_id' => $id,
                            'docnum' => $this->rs['docnum'],
                            'cost_id' => $vo['cbzxid'],
                            'amount' =>  $vo['amount'],
                            'status' => 1,
                            'create_time' => date("Y-m-d H:i:s"),
                            'uid' => $this->rs['uid'],
                        );
                        m('c_withhold_emfk')->insert($c_withhold);

                        //修改冻结余额
                        $freeze = array(
                            'freeze_amount' => $cost['freeze_amount'] + $vo['amount'],
                        );

                        m('c_fund_account')->update($freeze, "`id`='$id'");
                    }
                }

        }else{
            $docnum=$this->rs['docnum'];
            //将单据状态作废余额
            $withhold_cost = m('c_withhold_emfk')->getall("docnum='$docnum' and status =1", 'id,cost_id,amount');

            foreach ($withhold_cost as $key => $vo) {
                //减去冻结金额
                $project=self::project($vo['cost_id']);

                $cost_id= self::dept($project['data'][0]['jz_cur_dept']);

                $sql = " cost_id='$cost_id' and status = 1 and  is_default=1";
                $fund_account_cost = m('c_fund_account')->getone($sql, 'id,freeze_amount');

                $id=$fund_account_cost['id'];
                $freeze = array(
                    'freeze_amount' => $fund_account_cost['freeze_amount'] - $vo['amount'],
                );


                m('c_fund_account')->update($freeze, "`id`='$id'");

            }
            $status = array(
                'status' => 9,
            );
            m('c_withhold_emfk')->update($status, "docnum='$docnum'");
        }
    }


 //流程全部完成后调用
        protected function flowcheckfinsh($zt){
            $this->sendMess(1,3);
            $docnum=$this->rs['docnum'];
            $withhold_cost = m('c_withhold_emfk')->getall("docnum='$docnum' and status =1", 'id,cost_id,amount');

            foreach ($withhold_cost as $key => $vo) {
                // 扣除账户余额 c_fund_account account_balance
                $project=self::project($vo['cost_id']);
                $cbzxid= self::dept($project['data'][0]['jz_cur_dept']);

                $model = 'c_fund_account';
                $sql = " cost_id ='$cbzxid' and status = 1 and  is_default=1";
                $data = m($model)->getone($sql,'id,name,account_balance,freeze_amount');

                $zfarr = array(
                    'account_balance'        =>$data['account_balance']-$vo['amount'],
                );
                $id=$data['id'];
                m('c_fund_account')->update($zfarr,"`id`='$id'");

                $freeze = array(
                    'freeze_amount' => $data['freeze_amount'] - $vo['amount'],
                );

                m('c_fund_account')->update($freeze, "`id`='$id'");

                // 成本中心 amount 变更
                $cbzx = substr($cbzxid,0,strrpos($cbzxid,"（"));
                $cbzxsql = " code ='$cbzx' and status = 1";

                $cbzxdata = m('c_cbzx')->getone($cbzxsql,'id,amount');
                $cbarr = array(
                    'amount'        =>$cbzxdata['amount']+$vo['amount'],
                );
                m('c_cbzx')->update($cbarr,"`code`='$cbzx'");
                //账户明细 c_account_detail
                $account_detail=array(
                    'account' => $data['name'],
                    'opt_type' => 2,
                    'amount' =>$vo['amount'],
                    'trans_numb' => $this->rs['docnum'],
                    'account_balance' => $data['account_balance']-$vo['amount'],
                    'create_time'  =>date("Y-m-d H:i:s"),
                    'uid'  =>$this->rs['uid'],
                );

                m('c_account_detail')->insert($account_detail);

                // 电费12


                $fund_detail=array(
                    'trans_numb' =>$this->rs['docnum'],
                    'account' =>  $data['name'],
                    'toaccount' =>$this->rs['applicant'],
                    'trans_amount' =>$vo['amount'],
                    'business_type' =>12,
                    'opt_type' =>2,
                    'account_balance'=>$data['account_balance']-$vo['amount'],
                    'create_time'  =>date("Y-m-d H:i:s"),
                    'uid'  =>$this->rs['uid'],
                );
                m('c_fund_detail')->insert($fund_detail);
            }

        }


    }