<?php
namespace app\em\model;
class EmInvoice extends Base
{
    protected $table = 'em_invoice';

    /**
     * 首页列表
     * @param int $page
     * @return \think\Paginator
     * @throws \think\exception\DbException
     */
    public function getList($page = 0){
        $config = !empty($config) ?: [
            'list_rows'=>30,
            'page'=> $page,
            'type'     => '\app\extend\PageLayUi',
            'var_page' => 'page'
        ];
        $data = self::alias('inv')
            ->field('inv.*')
            ->field('station.station_name')
            ->field('em.em_numb')
            ->leftJoin(['em_invoice_useage'=>'eiu'],'eiu.invoice_id=inv.invoice_id')
            ->leftJoin(['em_useage'=>'eu'],'eu.useage_id = eiu.useage_id')
            ->leftJoin(['em'],'em.id=eu.em_id')
            ->leftJoin(['station_info'=>'station'],'station.station_id=em.station_id')
            ->paginate($config);
        return $data;
    }
    //账单查询+search
    public function getInvoiceList($map,$Nowpage,$limits){
        $data = self::alias('inv')
                ->field('inv.*')
                ->field('station.station_name,station.proj_number,em.em_numb,em.em_type_id')
                ->field('eu.last_sum_numb,eu.current_sum_numb,eu.current_date,FROM_UNIXTIME(eu.current_date,"%Y-%m-%d %H:%i:%S") as now_date,eu.em_id,eu.price')
                ->leftJoin(['em_invoice_useage'=>'eiu'],'eiu.invoice_id = inv.invoice_id')
                ->leftJoin(['em_useage'=>'eu'],'eu.useage_id = eiu.useage_id')
                ->leftJoin(['em'],'em.id=inv.em_id')
                ->leftJoin(['station_info'=>'station'],'station.station_id=em.station_id')
                ->where($map)
                ->page($Nowpage, $limits)
                ->order('inv.id desc')
                ->select()
                ->toArray();
          

        $step = 100000;

        foreach ($data as &$item){
            if($item['payment_balance'] == 0){
                $item['paid_amount'] = $item['payment_amount'] ;
            } else {
                if(!is_numeric($item['payment_amount']) || !is_numeric($item['payment_balance'])){
                    $item['payment_amount'] =  (float)$item['payment_amount'];
                    $item['payment_balance'] =  (float)$item['payment_balance'];
                }
                $item['paid_amount'] = round($item['payment_amount'] - $item['payment_balance'],3);
            }

            if($item['settle_balance'] == 0){
                $item['sett_amount'] = $item['settle_amount'] ;
            } else {
                $item['sett_amount'] = round($item['settle_amount'] - $item['settle_balance'],3);
            }
            $item['projUrl'] = getProjUrl($item['proj_number']);

            $item['repo_numb'] = ($item['current_sum_numb'] * $step - $item['last_sum_numb'] * $step ) * $item['rate'] / $step;
        }
        return $data;
    }
    public function getInvoiceCount($map){
        $data = self::alias('inv')
                ->field('inv.*')
                ->field('station.station_name,em.em_numb')
                ->field('eu.last_sum_numb,eu.current_sum_numb,eu.current_date')
                ->join(['em_account'=>'ea'],'ea.account_id = inv.account_id')
                ->join(['em'],'em.id=ea.em_id')
                ->join(['em_invoice_useage'=>'eiu'],'eiu.invoice_id = inv.invoice_id')
                ->join(['em_useage'=>'eu'],'eu.useage_id = eiu.useage_id')
                ->join(['station_info'=>'station'],'station.station_id=em.station_id')
                ->where($map)
                ->count();
        return $data;
    }
    //通过invoice_id查询列表数据
    public function getListByInvIds($ids){
        $data = self::alias('inv')
            ->field('inv.*')
            ->field('station.station_name')
            ->field('em.em_numb,em.em_type_id')
            ->join(['em_account'=>'ea'],'ea.account_id = inv.account_id')
            ->join(['em'],'em.id=ea.em_id')
            ->join(['station_info'=>'station'],'station.station_id=em.station_id')
            ->where(['inv.invoice_id'=>$ids])
            ->whereNotIn('em.em_type_id','2,4')
            ->where('inv.payment_balance','neq',0)
            ->select();
        return $data;
    }

    //账单详情
    public function getInvoiceDetail($id){

        //当前账单对象
        $where = null;
        if(strstr($id,'ZD')) $where = ['invoice_id'=>$id];
        else  $where = $id;
        $inv = self::alias('in')
            ->field('in.*,r.src')
            ->leftJoin(['receipt'=>'r'],'r.id = in.cert_id')
            ->get($where);

        $eiu = EmInvoiceUseage::where(['invoice_id'=>$inv->invoice_id])->find();

        //查询对应抄表单
        $uModel = Useage::get(['useage_id'=>$eiu->useage_id]);

        $photo_id = $inv->cert_id ?: $uModel->photo_id;

        //如果存在附件ID 则找到附件信息
        if($photo_id) {
            $receipt = Receipt::get($photo_id) ;
            $inv->receipt = $receipt;
        }

        //获取电表信息
        $em = Em::with('rule')->field('id,station_id,em_numb,em_type_id,rate')->where(['id'=>$inv->em_id])->find();

        $emr = EmRule::field('charge_type,pay_price,settle_price')->where(['em_id'=>$em->id])->order('id desc,create_time desc')->find();
        //电表类型
        $emt = EmType::field('name as typeName')->where(['id'=>$em->em_type_id])->find();

        $em->typeName = $emt['typeName'];
        if($emr->charge_type == 1){
            $em->chargeType = '读表';
        } else if($emr->charge_type == 2){
            $em->chargeType = '包月';
        } else if($emr->charge_type == 3){
            $em->chargeType = '包年';
        }
        //获取基站信息
        $station = Station::field('station_name,station_sp_code')->where(['station_id'=>$em->station_id])->find();
        //组合
        $inv->em = $em;
        $inv->em->emr = $emr;
        $inv->station = $station;
        $inv->useage = $uModel;

        $inv->payStatus = getInvoicesStatusName($inv->status,0);
        $inv->settleStatus = getInvoicesStatusName($inv->status,1);

        if($inv->payment_balance == 0){
            $inv->paid_amount = $inv->payment_amount;
        } else {
            $inv->paid_amount = $inv->payment_amount - $inv->payment_balance;
        }

        if($inv->settle_balance == 0){
            $inv->sett_amount = $inv->settle_amount;
        } else {
            $inv->sett_amount = $inv->settle_amount - $inv->settle_balance;
        }

        return $inv;
    }

    public function photo(){
        return $this->belongsTo('Receipt','cert_id');
    }
}