load->model('Settings_Model');
$view_data['company_name'] = $this->Settings_Model->get_setting('company_name');
// Get the available services and providers.
$this->load->model('Services_Model');
$view_data['available_services'] = $this->Services_Model->get_available_services();
$this->load->model('Providers_Model');
$view_data['available_providers'] = $this->Providers_Model->get_available_providers();
// Load the book appointment view.
$this->load->view('appointments/book', $view_data);
} else {
$post_data = json_decode($_POST['post_data'], true);
// Add customer
$this->load->model('Customers_Model');
$customer_id = $this->Customers_Model->add($post_data['customer']);
// Add appointment
$post_data['appointment']['id_users_customer'] = $customer_id;
$this->load->model('Appointments_Model');
$view_data['appointment_id'] = $this->Appointments_Model->add($post_data['appointment']);
// Send an email to the customer with the appointment info.
$this->load->library('Notifications');
try {
$this->notifications->send_book_success($post_data['customer'], $post_data['appointment']);
$this->notifications->send_new_appointment($post_data['customer'], $post_data['appointment']);
} catch (NotificationException $not_exc) {
$view_data['notification_error'] = '
An unexpected error occured while sending ' . 'you an email. Please backup the appointment details so that you can restore them ' . 'later.'; } // Load the book appointment view. $this->load->view('appointments/book_success', $view_data); } } /** * This method answers to an AJAX request. It calculates the * available hours for the given service, provider and date. * * @param array $_POST['post_data'] An associative array that * contains the user selected service, provider and date. */ public function ajax_get_available_hours() { /*** CHECK BUSINESS WORKING HOURS ***/ /*** CHECK PROVIDERS WORKING HOURS ***/ /*** CHECK ALREADY BOOKED APPOINTMENTS ***/ /*** RETURN AVAILABLE HOURS ***/ // ------------------------------------------------------------------ // For now we just need to return a sample array. Dynamic calculation // will be adding in future development. $start_time = strtotime($_POST['selected_date'] . ' 08:00') / 60; // Convert to minutes $end_time = strtotime($_POST['selected_date'] . ' 19:00') / 60; // Convert to minutes for ($i=0; ($start_time*60 + $i*60)<=($end_time*60); $i+=intval($_POST['service_duration'])) { $available_hours[] = date('H:i', $start_time * 60 + $i * 60); } // If the selected date is today, remove past hours. if (date('m/d/Y', strtotime($_POST['selected_date'])) == date('m/d/Y')) { foreach($available_hours as $index=>$value) { $available_hour = date('m/d/Y H:i', strtotime($value)); $current_hour = date('m/d/Y H:i'); if ($available_hour < $current_hour) { unset($available_hours[$index]); } } } $available_hours = array_values($available_hours); echo json_encode($available_hours); } /** * Synchronize appointment with its' providers google calendar. * * This method syncs the registered appointment with the * google calendar of the user. * * @task This method needs to be changed. Everytime a customer * books a new appointment the synchronization process must be * executed. */ public function google_sync($appointment_id) { try { $this->load->library('Google_Sync'); $this->google_sync->sync_appointment($appointment_id); $view_data['message'] = 'Your appointment has been successfully added to Google Calendar!'; $view_data['image'] = 'success.png'; } catch (Exception $exc) { $view_data['message'] = 'An unexpected error occured during the sync ' . 'operation:
Error:
' . $not_exc->getMessage() . '
' . $exc->getMessage() . ''; $view_data['image'] = 'error.png'; } $this->load->view('appointments/google_sync', $view_data); } } /* End of file appointments.php */ /* Location: ./application/controllers/appointments.php */
' . $exc->getTraceAsString() . '