<?php
/**
 * Created by PhpStorm.
 * User: wuzhenke
 * Date: 2019/1/24
 * Time: 17:26
 */

namespace App\Repositories\Jobfair;


use App\Models\Jobfair\Jobfair;
use Prettus\Repository\Eloquent\BaseRepository;

class JobfairRepository extends BaseRepository
{

    public function model()
    {
        return Jobfair::class;
    }

    public function firstJobfair($where)
    {
        return $this->model->when(get_subsite_id()>0,function($query){
            $query->whereHas('subsite', function ($query) {
                $query->where('subsite_id', get_subsite_id());
            });
        })->where($where)->where(function ($query) {
            $query->where('showendtime', 0)->orWhere('showendtime', '>=', time());
        })->orderBy('predetermined_status', 'asc')->orderBy('ordid', 'desc')->orderBy('predetermined_end', 'desc')->first();
    }

    public function findJobfair($where)
    {
        return $this->model->with(['floorPlan'=>function ($query) {
            $query->orderBy('order_list', 'desc');
        }])->where($where)->where(function ($query) use ($where) {
            $query->where('showendtime', '>=', time())->orWhere('showendtime', 0);
        })->first();
    }
    public function allJobfair($where, $page, $pageCount,$search_type,$key)
    {
        return $this->model->when(get_subsite_id()>0,function($query){
            $query->whereHas('subsite', function ($query) {
                $query->where('subsite_id', get_subsite_id());
            });
        })->when($search_type == 'jobs',function($query) use ($key){
            $query->whereHas('putJobs',function($query) use ($key){
                $query->whereHas('jobs',function($query) use ($key){
                    $query->where('jobs_name','like', '%'.$key.'%')->where('audit',1)->where('display',1);
                })->whereHas('jobfair_company',function ($query){
                    $query->where('audit',1);
                });
            });
        })->when($search_type == 'company',function($query) use ($key){
            $query->whereHas('jobfairCompany',function($query) use ($key){
                $query->whereHas('companys',function($query) use ($key){
                    $query->where('companyname','like', '%'.$key.'%');
                });
            });
        })
            ->where($where)->Where(function ($query) use ($where) {
            $query->where('showendtime', 0)->orWhere('showendtime', '>=', time());
        })->orderBy('predetermined_status', 'asc')->orderBy('ordid', 'desc')->orderBy('predetermined_end', 'desc')->offset($page*$pageCount)->limit($pageCount)->get();
    }

    public function Aioalljobfair($page)
    {
        return $this->model->when(get_subsite_id()>0,function($query){
            $query->whereHas('subsite', function ($query) {
                $query->where('subsite_id', get_subsite_id());
            });
        })->Where(function ($query) {
            $query->where('showendtime', 0)->orWhere('showendtime', '>=', time());
        })->orderBy('predetermined_status', 'asc')->orderBy('ordid', 'desc')->orderBy('predetermined_end', 'desc')->paginate($page);
    }

    public function findOne($where)
    {
        return $this->model->with('jobfairCompany')->where($where)->where(function ($query) use ($where) {
            $query->where('showendtime', '>=', time())->orWhere('showendtime', 0);
        })->first();
    }

    public function getJobfairList($com_id)
    {
        return $this->model->with(['jobfairCompany'=>function ($query) use ($com_id){
            $query->where('company_id',$com_id);
        }])->where(function ($query) {
            $query->where('showendtime', '>=', time())->orWhere('showendtime', 0);
        })->where(['display'=>1])->orderBy('predetermined_status', 'asc')->orderBy('ordid', 'desc')
            ->orderBy('predetermined_end', 'desc')->paginate(10);
    }

    public function getBlacklistCompany()
    {
        return $this->model->whereHas('jobfairCom',function ($query) {
            $query->where('type', 0)->where('black_status', 0)->where('audit', 1)->where('created_at', '>', date('Y-m-d H:i:s', strtotime('-30 days')));
        })->where('holddate_end', '<', time())->get();
    }

    //允许预定的招聘会
    public function getJobfairOpen()
    {
        return $this->model->where('predetermined_status', 1)->get();
    }

    //正在开启的招聘会
    public function getOpenJobfair($where = [])
    {
        return $this->model->where($where)->get();
    }

    //正在开启的招聘会
    public function getOneOpenJobfair($where = [])
    {
        return $this->model->where($where)->first();
    }

    //企业预定开启的招聘会
    public function getCompanyOpenJobfair($where = [],$company_where)
    {
        return $this->model->whereHas('jobfairCompany',function ($query) use ($company_where) {
            $query->where($company_where);
        })->where($where)->get();
    }

    //正在开启的招聘会
    public function getOneCompanyOpenJobfair($where = [],$company_where)
    {
        return $this->model->whereHas('jobfairCompany',function ($query) use ($company_where) {
            $query->where($company_where);
        })->where($where)->first();
    }

    public function getJobfairs($where = array(), $order = array(), $limit = '')
    {
        $rst = $this->model->when(get_subsite_id()>0,function($query){
            $query->whereHas('subsite', function ($query) {
                $query->where('subsite_id', get_subsite_id());
            });
        })->where($where)->where(function ($query) {
            $query->where('showendtime', 0)->orWhere('showendtime', '>=', time());
        });
        if ($order) {
            if (is_array($order)) {
                foreach ($order as $k => $v) {
                    $rst->orderBy($k, $v);
                }
            } else {
                $rst->orderbyRaw($order);
            }

        }
        if ($limit) {
            $rst->limit($limit);
        }
        return $rst->get();
    }

    public function getJobfairNum($where)
    {
        return $this->model->where($where)->count();
    }
    public function getStatisticsJobfairs($where)
    {
        return $this->model->withTrashed()->where($where)->get();
    }
}