<?php

class flow_oafkClassModel extends flowModel

{
    public function flowrsreplace($rs)
    {
        if($rs['contractNumber']) $rs['contractNumber'] = $this->getContractByTag($rs['contractNumber']);
        return $rs;
    }

	//二级 或一级审批同意之后进行预扣款
	protected function flowcheckbefore($zt, $sm){
		$id=$this->rs['id'];
        $sql = " mid ='$id' and `table`='c_fininfom_oafk' ";
	    $flow_bill = m('flow_bill')->getone($sql,'allcheckid');
	    $allcheckid=explode(',',$flow_bill['allcheckid']);
        $option = m('option')->getall('pid = 1533 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 = 1533 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('c_fund_details_fk')->getall('mid='.$this->rs['id'], 'id,cbzx_code,charge_amount');
		      foreach ($data as $key => $vo) {
		      	 $cbzx_code=$vo['cbzx_code'];
		         $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['charge_amount']){
		      	 	 return "账户余额不足";die;
		      	 }
		      	}
				 $id=$cost['id'];

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

				//修改冻结余额
				 $freeze = array(
				  'freeze_amount' => $cost['freeze_amount'] + $vo['charge_amount'],
				);
			
				m('c_fund_account')->update($freeze, "`id`='$id'");
		      }
		    }
        }else{
        		if($flowid['nowcheckid']==$checkid){
		      $data = m('c_fund_details_fk')->getall('mid='.$this->rs['id'], 'id,cbzx_code,charge_amount');

		      foreach ($data as $key => $vo) {
		      	 $cbzx_code=$vo['cbzx_code'];
		         $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['charge_amount']){
		      	 	 return "账户余额不足";die;
		      	 }
		      	}
				 $id=$cost['id'];

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

				//修改冻结余额
				 $freeze = array(
				  'freeze_amount' => $cost['freeze_amount'] + $vo['charge_amount'],
				);
			
				m('c_fund_account')->update($freeze, "`id`='$id'");
		      }
		    }
          }
         }else{
                 $docnum=$this->rs['docnum'];
                 //将单据状态作废余额
                
		         $withhold_cost = m('c_withhold')->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')->update($status, "docnum='$docnum'");
         }
     }
    
   //流程全部完成后调用
	 protected function flowcheckfinsh($zt){

         
			$docnum=$this->rs['docnum'];
			$withhold_cost = m('c_withhold')->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['payee'],
			'trans_amount' =>$vo['amount'],
			'business_type' =>8,
			'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);

		 }

		  
	}

}