Removed unnecessary methods from anavailabilities API controller.

This commit is contained in:
Alex Tselegidis 2016-07-19 09:54:48 +02:00
parent 6e40c50fd4
commit 62ce5605ec

View file

@ -55,10 +55,10 @@ class Availabilities extends API_V1_Controller {
$service = $this->services_model->get_row($serviceId->get()); $service = $this->services_model->get_row($serviceId->get());
$emptyPeriods = $this->_get_provider_available_time_periods($providerId->get(), $emptyPeriods = $this->_getProviderAvailableTimePeriods($providerId->get(),
$date->format('Y-m-d'), []); $date->format('Y-m-d'), []);
$availableHours = $this->_calculate_available_hours($emptyPeriods, $availableHours = $this->_calculateAvailableHours($emptyPeriods,
$date->format('Y-m-d'), $service['duration'], false); $date->format('Y-m-d'), $service['duration'], false);
$this->output $this->output
@ -70,59 +70,6 @@ class Availabilities extends API_V1_Controller {
} }
} }
/**
* Check whether the provider is still available in the selected appointment date.
*
* It might be times where two or more customers select the same appointment date and time.
* This shouldn't be allowed to happen, so one of the two customers will eventually get the
* prefered date and the other one will have to choose for another date. Use this method
* just before the customer confirms the appointment details. If the selected date was taken
* in the mean time, the customer must be prompted to select another time for his appointment.
*
* @return bool Returns whether the selected datetime is still available.
*/
protected function _check_datetime_availability() {
$this->load->model('services_model');
$appointment = $_POST['post_data']['appointment'];
$service_duration = $this->services_model->get_value('duration', $appointment['id_services']);
$exclude_appointments = (isset($appointment['id'])) ? array($appointment['id']) : array();
if ($appointment['id_users_provider'] === ANY_PROVIDER) {
$appointment['id_users_provider'] = $this->_search_any_provider($appointment['id_services'],
date('Y-m-d', strtotime($appointment['start_datetime'])));
$_POST['post_data']['appointment']['id_users_provider'] = $appointment['id_users_provider'];
return TRUE; // The selected provider is always available.
}
$available_periods = $this->_get_provider_available_time_periods(
$appointment['id_users_provider'], date('Y-m-d', strtotime($appointment['start_datetime'])),
$exclude_appointments);
$is_still_available = FALSE;
foreach($available_periods as $period) {
$appt_start = new DateTime($appointment['start_datetime']);
$appt_start = $appt_start->format('H:i');
$appt_end = new DateTime($appointment['start_datetime']);
$appt_end->add(new DateInterval('PT' . $service_duration . 'M'));
$appt_end = $appt_end->format('H:i');
$period_start = date('H:i', strtotime($period['start']));
$period_end = date('H:i', strtotime($period['end']));
if ($period_start <= $appt_start && $period_end >= $appt_end) {
$is_still_available = TRUE;
break;
}
}
return $is_still_available;
}
/** /**
* Get an array containing the free time periods (start - end) of a selected date. * Get an array containing the free time periods (start - end) of a selected date.
* *
@ -138,7 +85,7 @@ class Availabilities extends API_V1_Controller {
* *
* @return array Returns an array with the available time periods of the provider. * @return array Returns an array with the available time periods of the provider.
*/ */
protected function _get_provider_available_time_periods($provider_id, $selected_date, protected function _getProviderAvailableTimePeriods($provider_id, $selected_date,
$exclude_appointments = array()) { $exclude_appointments = array()) {
$this->load->model('appointments_model'); $this->load->model('appointments_model');
$this->load->model('providers_model'); $this->load->model('providers_model');
@ -272,40 +219,6 @@ class Availabilities extends API_V1_Controller {
return array_values($available_periods_with_appointments); return array_values($available_periods_with_appointments);
} }
/**
* Search for any provider that can handle the requested service.
*
* This method will return the database ID of the provider with the most available periods.
*
* @param numeric $service_id The requested service ID.
* @param string $selected_date The date to be searched.
*
* @return int Returns the ID of the provider that can provide the service at the selected date.
*/
protected function _search_any_provider($service_id, $selected_date) {
$this->load->model('providers_model');
$this->load->model('services_model');
$available_providers = $this->providers_model->get_available_providers();
$service = $this->services_model->get_row($service_id);
$provider_id = NULL;
$max_hours_count = 0;
foreach($available_providers as $provider) {
foreach($provider['services'] as $provider_service_id) {
if ($provider_service_id == $service_id) { // Check if the provider is available for the requested date.
$empty_periods = $this->_get_provider_available_time_periods($provider['id'], $selected_date);
$available_hours = $this->_calculate_available_hours($empty_periods, $selected_date, $service['duration']);
if (count($available_hours) > $max_hours_count) {
$provider_id = $provider['id'];
$max_hours_count = count($available_hours);
}
}
}
}
return $provider_id;
}
/** /**
* Calculate the avaialble appointment hours. * Calculate the avaialble appointment hours.
* *
@ -314,14 +227,14 @@ class Availabilities extends API_V1_Controller {
* available hour is added to the "$available_hours" array. * available hour is added to the "$available_hours" array.
* *
* @param array $empty_periods Contains the empty periods as generated by the * @param array $empty_periods Contains the empty periods as generated by the
* "_get_provider_available_time_periods" method. * "_getProviderAvailableTimePeriods" method.
* @param string $selected_date The selected date to be search (format ) * @param string $selected_date The selected date to be search (format )
* @param numeric $service_duration The service duration is required for the hour calculation. * @param numeric $service_duration The service duration is required for the hour calculation.
* @param bool $manage_mode (optional) Whether we are currently on manage mode (editing an existing appointment). * @param bool $manage_mode (optional) Whether we are currently on manage mode (editing an existing appointment).
* *
* @return array Returns an array with the available hours for the appointment. * @return array Returns an array with the available hours for the appointment.
*/ */
protected function _calculate_available_hours(array $empty_periods, $selected_date, $service_duration, protected function _calculateAvailableHours(array $empty_periods, $selected_date, $service_duration,
$manage_mode = FALSE) { $manage_mode = FALSE) {
$this->load->model('settings_model'); $this->load->model('settings_model');