Fixes #19 - Customers can add appointments to 'any provider'.
This commit is contained in:
parent
b94d0dc0f3
commit
38187a208f
3 changed files with 50 additions and 5 deletions
|
@ -72,5 +72,6 @@ define('PRIV_SYSTEM_SETTINGS', 'system_settings');
|
|||
define('PRIV_USER_SETTINGS', 'user_settings');
|
||||
|
||||
define('MIN_PASSWORD_LENGTH', 7);
|
||||
define('ANY_PROVIDER', 'any-provider');
|
||||
/* End of file constants.php */
|
||||
/* Location: ./application/config/constants.php */
|
||||
/* Location: ./application/config/constants.php */
|
||||
|
|
|
@ -283,6 +283,16 @@ class Appointments extends CI_Controller {
|
|||
? array($_POST['appointment_id'])
|
||||
: array();
|
||||
|
||||
// If the user has selected the "any-provider" option then we will need to search
|
||||
// for an available provider that provides the requested service.
|
||||
if ($_POST['provider_id'] === ANY_PROVIDER) {
|
||||
$_POST['provider_id'] = $this->search_any_provider($_POST['service_id'], $_POST['selected_date']);
|
||||
if ($_POST['provider_id'] === NULL) {
|
||||
echo json_encode(array());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$empty_periods = $this->get_provider_available_time_periods($_POST['provider_id'],
|
||||
$_POST['selected_date'], $exclude_appointments);
|
||||
|
||||
|
@ -373,8 +383,8 @@ class Appointments extends CI_Controller {
|
|||
throw new Exception($this->lang->line('requested_hour_is_unavailable'));
|
||||
}
|
||||
|
||||
$appointment = $post_data['appointment'];
|
||||
$customer = $post_data['customer'];
|
||||
$appointment = $_POST['post_data']['appointment'];
|
||||
$customer = $_POST['post_data']['customer'];
|
||||
|
||||
$this->load->model('appointments_model');
|
||||
$this->load->model('providers_model');
|
||||
|
@ -383,7 +393,7 @@ class Appointments extends CI_Controller {
|
|||
$this->load->model('settings_model');
|
||||
|
||||
if ($this->customers_model->exists($customer))
|
||||
$customer['id'] = $this->customers_model->find_record_id($customer);
|
||||
$customer['id'] = $this->customers_model->find_record_id($customer);
|
||||
|
||||
$customer_id = $this->customers_model->add($customer);
|
||||
$appointment['id_users_customer'] = $customer_id;
|
||||
|
@ -512,6 +522,12 @@ class Appointments extends CI_Controller {
|
|||
|
||||
$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'];
|
||||
}
|
||||
|
||||
$available_periods = $this->get_provider_available_time_periods(
|
||||
$appointment['id_users_provider'], date('Y-m-d', strtotime($appointment['start_datetime'])),
|
||||
$exclude_appointments);
|
||||
|
@ -682,6 +698,34 @@ class Appointments extends CI_Controller {
|
|||
|
||||
return array_values($available_periods_with_appointments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for any provider that can handle the requested service.
|
||||
*
|
||||
* @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.
|
||||
*/
|
||||
private function search_any_provider($service_id, $selected_date) {
|
||||
$this->load->model('providers_model');
|
||||
$available_providers = $this->providers_model->get_available_providers();
|
||||
$provider_id = NULL;
|
||||
|
||||
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.
|
||||
$available_periods = $this->get_provider_available_time_periods($provider['id'], $selected_date);
|
||||
if (count($available_periods) > 0) {
|
||||
$provider_id = $provider['id'];
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $provider_id;
|
||||
}
|
||||
}
|
||||
|
||||
/* End of file appointments.php */
|
||||
|
|
|
@ -140,7 +140,7 @@ var FrontendBook = {
|
|||
});
|
||||
|
||||
// Add the "Any Provider" entry.
|
||||
if ($('#select-provider option').length > 1) {
|
||||
if ($('#select-provider option').length >= 1) {
|
||||
$('#select-provider').append(new Option(EALang['any_provider'] + ' *', 'any-provider'));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue