<?php
namespace App\View\Components;
use App\Country;
use App\Models\Language;
use App\User;
use Illuminate\View\Component;
use Modules\Appointment\Entities\AppointmentSettings;
use Modules\Appointment\Entities\InstructorTeachingCategory;
use Modules\Appointment\Entities\InstructorTeachingLanguage;
use Modules\Appointment\Entities\Schedule;
use Modules\CourseSetting\Entities\Category;
use Modules\CourseSetting\Entities\CourseLevel;
class AppointmentInstructorPageSection extends Component
{
public $request;
public function __construct($request)
{
$this->request = $request;
}
public function render()
{
$category = $this->request['category'] ?? null;
$search = $this->request['search'] ?? null;
$level = $this->request['level'] ?? null;
$day = $this->request['days'] ?? null;
$price = $this->request['price_range'] ?? null;
$age = $this->request['age_range'] ?? null;
$country = $this->request['country'] ?? null;
$gender = $this->request['gender'] ?? null;
$data['request'] = $this->request;
$categories_ids = $category ? explode(',', $category) : [];
$level_ids = $level ? explode(',', $level) : [];
$days = $day ? explode(',', $day) : [];
$gender_ids = $day ? explode(',', $gender) : [];
$price_range = $price ? explode(';', $price) : null;
$age_range = $age ? explode(';', $age) : null;
$type = $this->request['type'] ?? null;
$instructor_ids = [];
if ($day) {
$instructor_ids = Schedule::whereIn('day', $days)->pluck('user_id')->toArray();
}
$userIds = [];
if ($search) {
$searchCategoryIds = Category::where('name', 'LIKE', '%' . $search . '%')->get()->pluck('id')->toArray();
$categoryUserIds = InstructorTeachingCategory::whereIn('category_id', $searchCategoryIds)->get()
->pluck('instructor_id')->toArray();
$searchLanguageIds = Language::where('name', 'LIKE', '%' . $search . '%')->get()
->pluck('id')->toArray();
$langUserIds = InstructorTeachingLanguage::whereIn('language_id', $searchLanguageIds)->get()
->pluck('instructor_id')->toArray();
$userIds = array_merge($categoryUserIds, $langUserIds);
}
$data['instructors'] = User::with('userCountry:id,iso2', 'teachingLanguages', 'teachingCategories')
->withCount('instructorReviews')->where('status', 1)
->where('role_id', 2)
->whereHas('teachingCategories', function ($query) use ($categories_ids, $level_ids) {
$query->when($categories_ids, function ($subQuery) use ($categories_ids) {
$subQuery->whereIn('category_id', $categories_ids);
});
$query->when($level_ids, function ($subQuery) use ($level_ids) {
$subQuery->where('level_id', $level_ids);
});
})
->when($gender_ids, function ($query) use ($gender_ids) {
$query->whereIn('gender', $gender_ids);
})
->when($price_range, function ($query) use ($price_range) {
$query->whereBetween('hour_rate', $price_range);
})
->when($age_range, function ($query) use ($age_range) {
$query->whereBetween('age', $age_range);
})
->when($country, function ($query) use ($country) {
$query->where('country', $country);
})
->when($day, function ($query) use ($instructor_ids) {
$query->whereIn('id', $instructor_ids);
})
->when($search, function ($query) use ($search, $userIds) {
$query->where('name', 'LIKE', '%' . $search . '%')->whereIn('id', $userIds);
})->get();
$data['categories'] = Category::with('activeSubcategories')
->withCount('activeSubcategories')
->where('status', 1)
->get();
$data['levels'] = CourseLevel::where('status', 1)->get(['id', 'title']);
$data['countries'] = Country::get(['name']);
$data['weekDays'] = ['Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
$data['genders'] = ['Male', 'Female', 'Others'];
$data['settings'] = AppointmentSettings::first();
$data['priceRange'] = $price_range;
$data['ageRange'] = $age_range;
$data['categoriesIds'] = $categories_ids;
$data['levelIds'] = $level_ids;
$data['days'] = $days;
$data['country'] = $country;
$data['genderIds'] = $gender_ids;
$data['type'] = $type;
return view(theme('components.appointment-instructor-page-section'), $data);
}
}