<?php
class flow_finfybxClassModel extends flowModel
{
    public function flowcheckname($num)
    {

    }

    //提交时调用
    protected function flowsubmit($na, $sm){
        return "该借款单".$jk_num."已挂起";die;
        if($this->rs['dikouid']){

            $dikouid = $this->rs['dikouid'];
            if(strpos($dikouid,',') !== false){

                $jk_num=explode(",",$dikouid);


                foreach ($jk_num  as $key => $value ){
                    if($this->rs['money'] ==0 ){
                        break;
                    }

                    $jk_num=substr($value,0,strrpos($value,'金'));

                    $jksql=" jk_num ='$jk_num'  and status =0 ";
                    $deduct_detail = m('c_deduct_detail')->getone($jksql,'jk_num');//金额
                    if($deduct_detail['jk_num']){
                        return "该借款单".$jk_num."已挂起";die;
                    }
var_dump(12312321);die;
                    $sql = " docnum ='$jk_num'  ";
                    $fininfom_jk = m('c_fininfom_jk')->getone($sql,'balance');//金额


                    $docnum=$this->rs['docnum'];
                    if($this->rs['money'] >= $fininfom_jk['balance']){

                        $dk_amount=$fininfom_jk['balance'];

                    }else{

                        $dk_amount=$this->rs['money'];
                    }

                    $this->rs['money']=$this->rs['money']-$dk_amount;



                    $deduct_detail = array(
                        'jk_num' => $jk_num,
                        'bx_num' => $docnum,
                        'dk_amount' =>$dk_amount,
                        'status' =>0,
                        'create_time' => date("Y-m-d H:i:s"),
                    );
                    m('c_deduct_detail')->insert($deduct_detail);
                }

            }else{
                $jk_num=substr($dikouid,0,strrpos($dikouid,'金'));
                $jksql=" jk_num ='$jk_num'  and status =0 ";
                $deduct_detail = m('c_deduct_detail')->getone($jksql,'jk_num');//金额
                if($deduct_detail['jk_num']){
                    var_dump("该借款单".$jk_num."已挂起");
                }

                $sql = " docnum ='$jk_num'  ";
                $fininfom_jk = m('c_fininfom_jk')->getone($sql,'balance');//金额
                $docnum=$this->rs['docnum'];
                if($this->rs['money'] >= $fininfom_jk['balance']){
                    $dk_amount=$fininfom_jk['balance'];

                }else{

                    $dk_amount=$this->rs['money'];
                }


                $deduct_detail = array(
                    'jk_num' => $jk_num,
                    'bx_num' => $docnum,
                    'dk_amount' =>$dk_amount,
                    'status' =>0,
                    'create_time' => date("Y-m-d H:i:s"),
                );
                m('c_deduct_detail')->insert($deduct_detail);
            }
        }

    }

    //二级 或一级审批同意之后进行预扣款
    protected function flowcheckbefore($zt, $sm)
    {
        $id = $this->rs['id'];
        $sql = " mid ='$id' and `table`='fininfom' ";
        $flow_bill = m('flow_bill')->getone($sql, 'allcheckid');


        $allcheckid = explode(',', $flow_bill['allcheckid']);
        $option = m('option')->getall('pid = 1567 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 = 1567 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'];
                    $explain = $value['explain'];
                    break;
                }
            }
        }

        //zt 1代表同意
        if ($zt == 1) {

            $flowid = $this->getflow();
            if ($explain) {

                if ($flowid['nowcheckid'] == $checkid && $flowid['nowcourseid'] == $explain) {
                    $data = m('fininfom')->getall('id=' . $this->rs['id'], 'id,cbxmid,money');
                    foreach ($data as $key => $vo) {
                        $cbzx_code = $vo['cbxmid'];
                        $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');//查询账户表成本中心
                        if ($cost['type'] == '1') {
                            if (($cost['account_balance'] - $cost['freeze_amount']) < $vo['money']) {
                                return "账户余额不足";
                                die;
                            }
                        }
                        $id = $cost['id'];

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

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

                        m('c_fund_account')->update($freeze, "`id`='$id'");
                    }
                }
            } else {
                if ($flowid['nowcheckid'] == $checkid) {
                    $data = m('fininfom')->getall('id=' . $this->rs['id'], 'id,cbxmid,money');
                    foreach ($data as $key => $vo) {
                        $cbzx_code = $vo['cbxmid'];
                        $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');//查询账户表成本中心

                        if ($cost['type'] == '1') {
                            if (($cost['account_balance'] - $cost['freeze_amount']) < $vo['money']) {
                                return "账户余额不足";
                                die;
                            }
                        }
                        $id = $cost['id'];

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

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

                        m('c_fund_account')->update($freeze, "`id`='$id'");
                    }
                }
            }
        } else {
            $docnum = $this->rs['docnum'];
            //将单据状态作废余额

            $withhold_cost = m('c_withhold_fininform')->getall("docnum='$docnum' and status =1", 'id,cost_id,amount');

            foreach ($withhold_cost as $key => $vo) {
                //减去冻结金额
                $cost_id = $vo['cost_id'];
                $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' => 0,
            );
            m('c_withhold_fininform')->update($status, "docnum='$docnum'");
        }

    }

    

        //流程全部完成后调用
    protected function flowcheckfinsh($zt){

            $docnum=$this->rs['docnum'];
            $withhold_cost = m('c_withhold_fininform')->getall("docnum='$docnum' and status =1", 'id,cost_id,amount');
       
            foreach ($withhold_cost as $key => $vo) {
           // 扣除账户余额 c_fund_account account_balance
           
            $cbzxid= $vo['cost_id'];
            $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);

             // 业务付款8业务预付款10费用报销11 oa_c_fund_detail


          $fund_detail=array(
            'trans_numb' =>$this->rs['docnum'],
            'account' =>  $data['name'],
            'toaccount' =>$this->rs['applicant'],
            'trans_amount' =>$vo['amount'],
            'business_type' =>11,
            '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);
         }
        if($this->rs['dikouid']){
            $dikouid = $this->rs['dikouid'];
            if(strpos($dikouid,',') !== false){
                $jk_num=explode(",",$dikouid);
                foreach ($jk_num  as $key => $value ){
                    if($this->rs['money'] ==0 ){
                        break;
                    }
                    $jk_num=substr($value,0,strrpos($value,'金'));


                    $sql = " docnum ='$jk_num'  ";
                    $fininfom_jk = m('c_fininfom_jk')->getone($sql,'balance');//金额


                    $docnum=$this->rs['docnum'];
                    if($this->rs['money'] >= $fininfom_jk['balance']){
                        $jkbalance = array(
                            'balance' => 0,
                        );

                    }else{
                        $jkbalance = array(
                            'balance' =>   $fininfom_jk['balance']-$this->rs['money'],
                        );

                    }
                    $this->rs['money']=$this->rs['money']-$fininfom_jk['balance'];
                    m('c_fininfom_jk')->update($jkbalance, "`docnum`='$jk_num'");
                    $deduct_status = array(
                        'status' =>   1,
                    );
                    m('c_deduct_detail')->update($deduct_status, "`bx_num`='$docnum' and status=0");
                }

            }else{
                $docnum=$this->rs['docnum'];
                $jk_num=substr($dikouid,0,strrpos($dikouid,'金'));
                $sql = " docnum ='$jk_num'  ";
                $fininfom_jk = m('c_fininfom_jk')->getone($sql,'balance');//金额


                $docnum=$this->rs['docnum'];
                if($this->rs['money'] >= $fininfom_jk['balance']){
                    $jkbalance = array(
                        'balance' => 0,
                    );
                }else{
                    $jkbalance = array(
                        'balance' =>   $fininfom_jk['balance']-$this->rs['money'],
                    );
                }


                m('c_fininfom_jk')->update($jkbalance, "`docnum`='$jk_num'");
                $deduct_status = array(
                    'status' =>   1,
                    'update_time' =>date("Y-m-d H:i:s"),
                );
                m('c_deduct_detail')->update($deduct_status, "`bx_num`='$docnum' and status=0");


            }
        }
    }





}