EmployersController.php 10.5 KB
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\FlotRequest;
use App\Models\Ad_employer;
use App\Models\Answer;
use App\Models\CategoryEmp;
use App\Models\Employer;
use App\Models\Flot;
use App\Models\Static_ad;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;

class EmployersController extends Controller
{
    public function index(Request $request) {
        if ($request->ajax()) {
            $user = User::find($request->id);
            $request->offsetUnset('id');
            $user->update($request->all());
        }

        $users = User::with('employers')->select(['users.*','users.id as usr_id', 'emp.id as emp_id',
                'emp.code as code_id', 'emp.logo as emp_logo', 'emp.name_company as name_company', 'emp.*'
            ])
            ->join('employers as emp','emp.user_id','users.id')
            ->where('users.is_worker', '0')
            ->orderByDesc('emp.id')
            ->Realuser();
        $all_employer = Employer::all()->count();

        $all_public = Employer::where('status_hidden', '=', '0')->
                                count();

        $all_status = Employer::where(function($query) {
                                    $query->Where('category', '=', 'Не оплачен')
                                        ->orWhere('category', '=', 'Не определен')
                                        ->orWhere('category', '=', 'Согласование');
                                })->count();

        $find_cat = "";
        if (isset($request->category)) {
            if ($request->category != 'Все категории') {
                $users = $users->where('category', '=', $request->category);
                $find_cat = $request->category;
            }
        }
        $find_key = "";

        if (isset($request->find)) {
            $find_key = $request->find;
            $users = $users->where(function($query) use($find_key) {
                $query->where('users.name', 'LIKE', "%$find_key%")
                    ->orWhere('emp.email', 'LIKE', "%$find_key%")
                    ->orWhere('emp.telephone', 'LIKE', "%$find_key%")
                    ->orWhere('emp.name_company', 'LIKE', "%$find_key%")
                ;
            });
        }

        $all_current = $users->count();
        $users = $users->paginate(15);

        $select_category = CategoryEmp::query()->active()->get();

        if ($request->ajax()) {
            return view('admin.employer.index_ajax', compact('users'));
        } else {
            return view('admin.employer.index', compact('users', 'find_key', 'find_cat', 'all_employer',
                'all_public', 'all_status', 'all_current', 'select_category'
            ));
        }
    }

    public function comment_read(Employer $employer) {
        return view('admin.employer.comment', compact('employer'));
    }

    // Форма обновления
    public function form_update_employer(Employer $employer) {
        // данные

        $select_category = CategoryEmp::query()->active()->get();
        $flots = Flot::query()->where('employer_id', '=', $employer->id)->get();
        return view('admin.employer.edit', compact('employer', 'select_category', 'flots'));
    }

    public function edit_flot(Flot $flot, Employer $employer) {
        return view('admin.flot.edit', compact('flot', 'employer'));
    }

    public function add_flot(Employer $employer) {
        return view('admin.flot.add', compact('employer'));
    }

    public function save_add_flot(FlotRequest $request) {
        $params = $request->all();
        $params['image'] = $request->file('image')->store("flot", 'public');
        Flot::create($params);
        return redirect()->route('admin.employer-profile', ['employer' => $params['employer_id']])
            ->with('success', 'Данные были успешно сохранены');
    }

    public function delete_flot(Flot $flot, $employer_id) {
        $flot->delete();
        return redirect()->route('admin.employer-profile', ['employer' => $employer_id])
            ->with('success', 'Данные были успешно сохранены');
    }


   public function edit_save_flot(Flot $flot, FlotRequest $request) {
        $params = $request->all();

        if ($request->has('image')) {
            if (!empty($flot->image)) {
                Storage::delete($flot->image);
            }
            $params['image'] = $request->file('image')->store("flot", 'public');
        } else {
            if (!empty($flot->image)) $params['image'] = $flot->image;
        }

        $flot->update($params);

        return redirect()->route('admin.employer-profile', ['employer' => $params['employer_id']])
                ->with('success', 'Данные были успешно сохранены');

    }

    public function update_employer(Employer $employer, Request $request)
    {
        $params = $request->all();
        unset($params['logo']);
        unset($params['telephone']);
        unset($params['email']);
        unset($params['address']);
        unset($params['site']);
        unset($params['is_lookin']);
        unset($params['show_database']);
        unset($params['can_autolift']);
        unset($params['status_hidden']);
        unset($params['oficial_status']);
        unset($params['social_is']);
        unset($params['sending_is']);
        unset($params['category']);
        unset($params['comment_admin']);

        $rules = [
            'name' => 'required|string|max:255',
        ];

        $messages = [
            'required' => 'Укажите обязательное поле «:attribute»',
            'confirmed' => 'Пароли не совпадают',
            'email' => 'Введите корректный email',
            'min' => [
                'string' => 'Поле «:attribute» должно быть не меньше :min символов',
                'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт'
            ],
            'max' => [
                'string' => 'Поле «:attribute» должно быть не больше :max символов',
                'file' => 'Файл «:attribute» должен быть не больше :max Кбайт'
            ],
        ];

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

        if ($validator->fails()) {
            return back()->withErrors($validator)->withInput();                    //->route('admin.register')

        } else {

            //$user = User::find($employer->user_id);
            $user_id = $employer->user_id;
            $employer->name_company = $request->name;
            $employer->telephone = $request->telephone;
            $employer->telephone_2 = $request->telephone_2;
            $employer->email = $request->email;
            $employer->email_2 = $request->email_2;
            $employer->address = $request->address;
            $employer->site = $request->site;
            $employer->text = $request->text;
            $employer->status_hidden = $request->status_hidden;
            $employer->oficial_status = $request->oficial_status;
            $employer->social_is = $request->social_is;
            $employer->sending_is = $request->sending_is;
            $employer->category = $request->category;
            $employer->comment_admin = $request->comment_admin;

            if ($request->has('logo')) {
                if (!empty($employer->logo)) {
                    Storage::delete($employer->logo);
                }
                $employer->logo = $request->file('logo')->store("employer/$user_id", 'public');
            }
            $employer->save();

            $employer->users()->update([
                'is_lookin' => $request->is_lookin,
                'show_database' => $request->show_database,
                'can_autolift' => $request->can_autolift,
            ]);

            return redirect()->route('admin.employer-profile', ['employer' => $employer->id])
                ->with('success', 'Данные были успешно сохранены');
        }
    }

    // Удаление работодателя, вакансий и профиля юзера
    public function delete_employer(Employer $employer, User $user) {
        try {
            if (!empty($employer)) {
                if (!empty($employer->logo)) {
                    Storage::delete($employer->logo);
                }

                foreach($employer->ads as $ad) {
                    $ads = Ad_employer::find($ad->id);
                    $ads->employer_id = 2;
                    $ads->is_remove = 1;
                    $ads->save();
                }

                $employer->delete();
            }
        } finally {
            $user->delete();
        }

        return redirect()->route('admin.employers')->with('success', 'Данные были удалены о работодателе');
    }

    // кабинет - отзывы о работодателе для модерации
    public function answers(Request $request) {
        if ($request->ajax()) {
            $user = Answer::find($request->id);
            $request->offsetUnset('id');
            $user->update($request->all());
        }

        $answers = Answer::query()->orderByDesc('id')->paginate(15);

        if ($request->ajax()) {
            return view('admin.answers.index_ajax', compact('answers'));
        } else {
            return view('admin.answers.index', compact('answers'));
        }
    }

    // кабинет - статистика вакансий работодателя
    public function static_ads(Request $request) {
        $stat = Static_ad::with('ads');
        $ads = Ad_employer::query()->active()->OrderBy('id')->get();
        $periods = Static_ad::query()->distinct('year_month')->select('year_month')->get();
        if ($request->ajax()) {
            if (isset($request->ad_employer_id))
                if (!$request->ad_employer_id == "0")
                    $stat = $stat->Where('ad_employer_id', '=', $request->ad_employer_id);
            if (isset($request->year_month)) {
                if (!$request->year_month == "0")
                    $stat = $stat->Where('year_month', '=', $request->year_month);
            }
        }

        $stat = $stat->OrderByDesc('year_month');
        $stat = $stat->paginate(15);

        if ($request->ajax())
            return view('admin.static.index_ads_ajax', compact('stat'));
        else
            return view('admin.static.index_ads', compact('stat', 'ads', 'periods'));
    }
}