diff --git a/application/controllers/Pages.php b/application/controllers/Pages.php index e8ebda3..1c524d6 100755 --- a/application/controllers/Pages.php +++ b/application/controllers/Pages.php @@ -753,8 +753,24 @@ class Pages extends CI_Controller { } $data['services'] = $this->Service_model->getAllServiceByServiceType($subpage, $lang); - $data['workers'] = $this->Service_model->getActiveWorkers($subpage); + + // Filter workers to those qualified for the booking's service category, + // so the guest can't switch to a worker who doesn't perform these services. + $categorySlug = ''; + if(isset($firstService) && $firstService){ + $category = $this->Service_model->getServiceCategoryById($firstService->service_category_id); + if($category){ + $categorySlug = $category->serv_cat_slug; + } + } + if($categorySlug !== ''){ + $data['workers'] = $this->Service_model->getWorkersByCategorySlug($categorySlug); + } else { + $data['workers'] = $this->Service_model->getActiveWorkers($subpage); + } + $data['selectedServiceIds'] = is_array($serviceIds) ? $serviceIds : array(); + $data['categorySlug'] = $categorySlug; $data['worker'] = $this->Service_model->getWorkerById($booking->worker_id); $this->load->view('pages/manage-booking', $data); @@ -806,6 +822,17 @@ class Pages extends CI_Controller { $lang = $_POST['lang']; $subpage = $_POST['subpage']; + // Category match: worker must perform the selected services' category. + $submittedWorker = $this->Service_model->getWorkerById($newWorkerId); + if(!empty($selectedServiceArray) && $submittedWorker){ + $firstSelectedService = $this->Service_model->getServiceById($selectedServiceArray[0]); + if($firstSelectedService && $firstSelectedService->service_category_id != $submittedWorker->service_category_id){ + $this->output->set_status_header(403)->set_content_type('application/json') + ->set_output(json_encode(['error' => 'Selected worker does not perform the chosen services.'])); + return; + } + } + // Schedule check $weekday = date('w', strtotime($newBookingDate)); $schedule = $this->Service_model->getWorkerScheduleByDay($newWorkerId, $weekday); diff --git a/application/views/pages/manage-booking.php b/application/views/pages/manage-booking.php index 6e7af53..470f214 100755 --- a/application/views/pages/manage-booking.php +++ b/application/views/pages/manage-booking.php @@ -338,6 +338,7 @@ service_id, $selectedServiceIds); + $isOtherCategory = ($categorySlug !== '' && $serviceItem->serv_cat_slug !== $categorySlug); ?>
@@ -362,7 +363,8 @@ id="service_id; ?>" name="service_service_id; ?>" value="1" - /> + + />