Ad_EmployersController.php 7.47 KB
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Ad_employer;
use App\Models\Ad_jobs;
use App\Models\Category;
use App\Models\Employer;
use App\Models\Job_title;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;

class Ad_EmployersController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $title = 'Админка - Вакансии работодателей';
        if ($request->ajax()) {
           $params = $request->all();
           foreach ($params['data'] as $item) {
               $emp = Ad_employer::find($item);
               $emp->updated_at = Carbon::now();
               $emp->save();
           }
        }

        $select_job = Job_title::query()->active()->get();
        $all_ad = Ad_employer::with('employer')->with('jobs')
            ->where('is_remove', '0')->get()->count();

        $ad_employers = Ad_employer::where('is_remove', '0');

        $find_job = "";
        if (isset($request->category_job)) {
            if ($request->category_job != 'Все вакансии') {
                $find_job = $request->category_job;
                $ad_employers = $ad_employers->WhereHas('jobs', function($query) use ($find_job){
                     return $query->where('name', 'LIKE', '%'.$find_job.'%');
                });
            }
        } else {
            $ad_employers = $ad_employers->with('jobs');
        }

        $find_key = "";
        if (isset($request->find)) {
            $find_key = $request->find;
            $ad_employers = $ad_employers->whereHas('employer', function($query) use($find_key) {
                $query->Where('name_company', 'LIKE', "%$find_key%");
                $query->orWhere('name', 'LIKE', "%$find_key%");
            });

        } else {
            $ad_employers = $ad_employers->with('employer');
        }

        $ad_employers = $ad_employers->OrderBy('updated_at', 'desc')->paginate(15);

        if ($request->ajax()) {
            return view('admin.ad_employers.index_ajax', compact('ad_employers', 'params'));
        } else {
            // конец
            return view('admin.ad_employers.index', compact('ad_employers',
                                                                'title',
                                                                          'all_ad',
                                                                          'find_job',
                                                                          'find_key',
                                                                          'select_job'));
        }
    }

    public function create()
    {
        $job_titles = Job_title::query()->active()->Notbdif()->get();
        $categories = Category::query()->get();
        return view('admin.ad_employers.add', compact('job_titles', 'categories'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $params = $request->all();
        unset($params->position_work);
        $rules = [
            'name' => 'required|min:3',
        ];
        $messages = [
            'required' => 'Укажите обязательное поле',
        ];
        $validator = Validator::make($params, $rules, $messages);

        if ($validator->fails()) {
            return redirect()->route('admin.add-ad-employers')
                ->withErrors($validator);
        } else {
            $ad_employer = new Ad_employer();
            $params['employer_id'] = 1;
            $data_ad = $ad_employer->create($params);
            $data_ad->jobs()->sync($request->position_work);
            //$ad_employer->jobs()->sync($request->position_work);


            return redirect()->route('admin.ad-employers')
                ->with('success', 'Данные были успешно сохранены');
        }
        return redirect()->route('admin.ad-employers');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Ad_employer  $ad_employer
     * @return \Illuminate\Http\Response
     */
    public function show(Ad_employer $ad_employer)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Ad_employer  $ad_employer
     * @return \Illuminate\Http\Response
     */
    public function edit(Ad_employer $ad_employer)
    {
        $sel = Array();
        $job_titles = Job_title::active()->Notbdif()->get();
        $categories = Category::query()->get();
        foreach ($ad_employer->jobs as $j) {
            $sel[] = $j->id;
        }

        return view('admin.ad_employers.edit', compact('ad_employer', 'categories', 'job_titles', 'sel'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Ad_employer  $ad_employer
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Ad_employer $ad_employer)
    {
        $params = $request->all();
        unset($params->position_work);
        $rules = [
            'name' => 'required|min:3',
        ];
        $messages = [
            'required' => 'Укажите обязательное поле',
        ];
        $validator = Validator::make($params, $rules, $messages);

        if ($validator->fails()) {
            return redirect()->route('admin.edit-ad-employers', ['ad_employer' => $ad_employer->id])
                ->withErrors($validator);
        } else {
            $ad_employer->update($params);
            $ad_employer->jobs()->sync($request->position_work);

            return redirect()->route('admin.ad-employers')
                ->with('success', 'Данные были успешно сохранены');
        }

        return redirect()->route('admin.ad-employers');
    }

    public function destroy(Ad_employer $ad_employer)
    {
        $ad_employer->is_remove = 1;
        $ad_employer->save();

        return redirect()->route('admin.ad-employers');
    }


    public function update_ad_jobs(Ad_jobs $ad_jobs, Request $request) {
        $params = $request->all();

        $rules = [
            'min_salary' => 'required|integer|min:0|max:99999999',
            'max_salary' => 'required|integer|min:0|max:99999999',

        ];
        $messages = [
            'required' => 'Укажите обязательное поле',
            'min' => 'Минимальное значение 0',
            'max' => 'Превышено максимальное значение',
            'integer' => 'Это должно быть числом'
        ];

        $validator = Validator::make($params, $rules, $messages);

        if ($validator->fails()) {
            return redirect()->route('admin.edit_jobs', ['ad_jobs' => $ad_jobs->id])
                ->withErrors($validator);
        } else {
            $ad_jobs->update($params);
            return redirect()->route('admin.ad-employers')
                ->with('success', 'Данные были успешно сохранены');
        }

        return redirect()->route('admin.ad-employers');
    }

    public function edit_jobs(Ad_jobs $ad_jobs) {
        return view('admin.ad_jobs.edit', compact('ad_jobs'));
    }
}