diff --git a/src/Service/HubSelector.php b/src/Service/HubSelector.php index a6bf9442..c4db7a4f 100644 --- a/src/Service/HubSelector.php +++ b/src/Service/HubSelector.php @@ -73,6 +73,8 @@ class HubSelector $filtered_hubs = $hubs_payment_method; // filter hubs by rider availability + $hubs_rider_availability = $this->filterHubsByRiderAvailability($filtered_hubs); + $filtered_hubs = $hubs_rider_availability; // inventory filter $hubs_inventory = $this->filterHubsByInventory($filtered_hubs, $flag_inventory_check, @@ -201,6 +203,39 @@ class HubSelector return $results; } + protected function filterHubsByRiderAvailability($hubs) + { + if (empty($hubs)) + return $hubs; + + $results = []; + foreach ($hubs as $hub_data) + { + $hub = $hub_data['hub']; + + // get hub's riders + $riders = $hub->getRiders(); + $avail_rider_count = 0; + foreach ($riders as $rider) + { + if ($rider->isAvailable()) + $avail_rider_count = $avail_rider_count +1; + } + + if ($avail_rider_count > 0) + $results[] = [ + 'hub' => $hub, + 'db_distance' => $hub_data['db_distance'], + 'distance' => $hub_data['distance'], + 'duration' => $hub_data['duration'], + ]; + else + $this->hub_filter_logger->logFilteredHub($hub, 'no_available_rider'); + } + + return $results; + } + protected function filterHubsByDateAndTime($hubs, $date_time) { if (empty($hubs))