Προσθήκη δυνατότητας συγχρονισμού μετά από αλλαγή στα στοχεία ενός ραντεβου.
This commit is contained in:
parent
82d458fe1d
commit
36718c87f9
5 changed files with 100 additions and 49 deletions
|
@ -112,18 +112,6 @@ class Backend extends CI_Controller {
|
||||||
if (isset($_POST['appointment_data'])) {
|
if (isset($_POST['appointment_data'])) {
|
||||||
$appointment_data = json_decode(stripcslashes($_POST['appointment_data']), true);
|
$appointment_data = json_decode(stripcslashes($_POST['appointment_data']), true);
|
||||||
$this->Appointments_Model->add($appointment_data);
|
$this->Appointments_Model->add($appointment_data);
|
||||||
|
|
||||||
if ($appointment_data['id_google_calendar'] != NULL) {
|
|
||||||
$this->load->model('Providers_Model');
|
|
||||||
$provider_settings = json_decode($this->Providers_Model
|
|
||||||
->get_setting('google_token', $appointment_data['id_users_provider']));
|
|
||||||
|
|
||||||
if ($provider_settings->google_sync == TRUE) {
|
|
||||||
$this->load->library('Google_Sync');
|
|
||||||
$this->google_sync->refresh_token($provider_settings->refresh_token);
|
|
||||||
$this->google_sync->update_appointment($appointment_data['id']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// :: SAVE CUSTOMER CHANGES TO DATABASE
|
// :: SAVE CUSTOMER CHANGES TO DATABASE
|
||||||
|
@ -132,35 +120,38 @@ class Backend extends CI_Controller {
|
||||||
$this->Customers_Model->add($customer_data);
|
$this->Customers_Model->add($customer_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$appointment_data = $this->Appointments_Model->get_row($appointment_data['id']);
|
||||||
|
$provider_data = $this->Providers_Model->get_row($appointment_data['id_users_provider']);
|
||||||
|
$customer_data = $this->Customers_Model->get_row($appointment_data['id_users_customer']);
|
||||||
|
$service_data = $this->Services_Model->get_row($appointment_data['id_services']);
|
||||||
|
$company_settings = array(
|
||||||
|
'company_name' => $this->Settings_Model->get_setting('company_name')
|
||||||
|
);
|
||||||
|
|
||||||
// :: SYNC APPOINTMENT CHANGES WITH GOOGLE CALENDAR
|
// :: SYNC APPOINTMENT CHANGES WITH GOOGLE CALENDAR
|
||||||
if ($appointment_data['id_google_calendar'] != NULL) {
|
if ($appointment_data['id_google_calendar'] != NULL) {
|
||||||
$google_sync = $this->Providers_Model
|
$google_sync = $this->Providers_Model
|
||||||
->get_setting('google_sync', $appointment_data['id_users_provider']);
|
->get_setting('google_sync', $appointment_data['id_users_provider']);
|
||||||
if ($google_sync == TRUE) {
|
if ($google_sync == TRUE) {
|
||||||
$google_token = $this->Providers_Model
|
$google_token = json_decode($this->Providers_Model
|
||||||
->get_setting('google_token', $appointment_data['id_users_provider']);
|
->get_setting('google_token', $appointment_data['id_users_provider']));
|
||||||
$this->load->library('Google_Sync');
|
$this->load->library('Google_Sync');
|
||||||
$this->google_sync->refresh_token($google_token->refresh_token);
|
$this->google_sync->refresh_token($google_token->refresh_token);
|
||||||
$this->google_sync->update_appointment($appointment_data, $provider_data,
|
$this->google_sync->update_appointment($appointment_data, $provider_data,
|
||||||
$service_data, $customer_data);
|
$service_data, $customer_data, $company_settings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// :: SEND EMAIL NOTIFICATIONS TO PROVIDER AND CUSTOMER
|
// :: SEND EMAIL NOTIFICATIONS TO PROVIDER AND CUSTOMER
|
||||||
$this->load->library('Notifications');
|
$this->load->library('Notifications');
|
||||||
try {
|
|
||||||
$customer_title = 'Appointment Changes Saved Successfully!';
|
|
||||||
$provider_title = 'Appointment Details Have Changed';
|
|
||||||
|
|
||||||
$this->notifications->send_book_success(
|
$customer_title = 'Appointment Changes Saved Successfully!';
|
||||||
$customer_data, $appointment_data, $customer_title);
|
$provider_title = 'Appointment Details Have Changed';
|
||||||
$this->notifications->send_new_appointment(
|
|
||||||
$customer_data, $appointment_data, $provider_title);
|
|
||||||
|
|
||||||
} catch(NotificationException $nt_exc) {
|
$this->notifications->send_book_success(
|
||||||
// @task Display message to the user that the notification messages could
|
$customer_data, $appointment_data, $customer_title);
|
||||||
// not be sent.
|
$this->notifications->send_new_appointment(
|
||||||
}
|
$customer_data, $appointment_data, $provider_title);
|
||||||
|
|
||||||
echo json_encode('SUCCESS');
|
echo json_encode('SUCCESS');
|
||||||
|
|
||||||
|
@ -207,23 +198,27 @@ class Backend extends CI_Controller {
|
||||||
// :: DELETE APPOINTMENT RECORD FROM DATABASE.
|
// :: DELETE APPOINTMENT RECORD FROM DATABASE.
|
||||||
$this->Appointments_Model->delete($_POST['appointment_id']);
|
$this->Appointments_Model->delete($_POST['appointment_id']);
|
||||||
|
|
||||||
// :: SYNC CHANGE TO GOOGLE CALENDAR
|
// :: SYNC DELETE WITH GOOGLE CALENDAR
|
||||||
$google_sync = $this->Providers_Model->get_setting('google_sync',
|
if ($appointment_data['id_google_calendar'] != NULL) {
|
||||||
$provider_data['id']);
|
$google_sync = $this->Providers_Model->get_setting('google_sync',
|
||||||
|
$provider_data['id']);
|
||||||
|
|
||||||
if ($google_sync == TRUE) {
|
if ($google_sync == TRUE) {
|
||||||
$google_token = json_decode($this->Providers_Model->get_setting('google_token',
|
$google_token = json_decode($this->Providers_Model->get_setting('google_token',
|
||||||
$provider_data['id']));
|
$provider_data['id']));
|
||||||
|
|
||||||
$this->load->library('Google_Sync');
|
$this->load->library('Google_Sync');
|
||||||
$this->google_sync->refresh_token($google_token->refresh_token);
|
$this->google_sync->refresh_token($google_token->refresh_token);
|
||||||
$this->google_sync->delete_appointment($appointment_data['id_google_calendar']);
|
$this->google_sync->delete_appointment($appointment_data['id_google_calendar']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// :: SEND NOTIFICATION EMAILS TO PROVIDER AND CUSTOMER.
|
// :: SEND NOTIFICATION EMAILS TO PROVIDER AND CUSTOMER.
|
||||||
$this->load->library('Notifications');
|
$this->load->library('Notifications');
|
||||||
$this->notification->send_remove_appointment($appointment_data, $provider_data,
|
$this->notifications->send_remove_appointment($appointment_data, $provider_data,
|
||||||
$service_data, $customer_data, $company_settings);
|
$service_data, $customer_data, $company_settings, $provider_data['email']);
|
||||||
|
$this->notifications->send_remove_appointment($appointment_data, $provider_data,
|
||||||
|
$service_data, $customer_data, $company_settings, $customer_data['email']);
|
||||||
|
|
||||||
echo json_encode('SUCCESS');
|
echo json_encode('SUCCESS');
|
||||||
|
|
||||||
|
|
|
@ -31,11 +31,14 @@ class Google_Sync {
|
||||||
|
|
||||||
// Initialize google client and calendar service.
|
// Initialize google client and calendar service.
|
||||||
$this->client = new Google_Client();
|
$this->client = new Google_Client();
|
||||||
|
$this->client->setUseObjects(true);
|
||||||
|
|
||||||
$this->client->setApplicationName(SystemConfiguration::$google_product_name);
|
$this->client->setApplicationName(SystemConfiguration::$google_product_name);
|
||||||
$this->client->setClientId(SystemConfiguration::$google_client_id);
|
$this->client->setClientId(SystemConfiguration::$google_client_id);
|
||||||
$this->client->setClientSecret(SystemConfiguration::$google_client_secret);
|
$this->client->setClientSecret(SystemConfiguration::$google_client_secret);
|
||||||
$this->client->setDeveloperKey(SystemConfiguration::$google_api_key);
|
$this->client->setDeveloperKey(SystemConfiguration::$google_api_key);
|
||||||
$this->client->setRedirectUri($this->CI->config->item('base_url') . 'google/oauth_callback');
|
$this->client->setRedirectUri($this->CI->config->item('base_url') . 'google/oauth_callback');
|
||||||
|
|
||||||
$this->service = new Google_CalendarService($this->client);
|
$this->service = new Google_CalendarService($this->client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,11 +168,49 @@ class Google_Sync {
|
||||||
* @param array $provider_data Contains the provider record data.
|
* @param array $provider_data Contains the provider record data.
|
||||||
* @param array $service_data Contains the service record data.
|
* @param array $service_data Contains the service record data.
|
||||||
* @param array $customer_data Contains the customer recod data.
|
* @param array $customer_data Contains the customer recod data.
|
||||||
|
* @parma array $company_settings Contains some company settings that are used
|
||||||
|
* by this method. By the time the following values must be in the array:
|
||||||
|
* 'company_name'.
|
||||||
|
*
|
||||||
|
* @return Google_Event Returns the Google_Event class object.
|
||||||
*/
|
*/
|
||||||
public function update_appointment($appointment_data, $provider_data,
|
public function update_appointment($appointment_data, $provider_data,
|
||||||
$service_data, $customer_data) {
|
$service_data, $customer_data, $company_settings) {
|
||||||
$this->CI->load->helper('general');
|
$this->CI->load->helper('general');
|
||||||
|
|
||||||
|
$event = $this->service->events->get('primary', $appointment_data['id_google_calendar']);
|
||||||
|
|
||||||
|
// Convert event to object
|
||||||
|
|
||||||
|
$event->setSummary($service_data['name']);
|
||||||
|
$event->setLocation($company_settings['company_name']);
|
||||||
|
|
||||||
|
$start = new Google_EventDateTime();
|
||||||
|
$start->setDateTime(date3339(strtotime($appointment_data['start_datetime'])));
|
||||||
|
$event->setStart($start);
|
||||||
|
|
||||||
|
$end = new Google_EventDateTime();
|
||||||
|
$end->setDateTime(date3339(strtotime($appointment_data['end_datetime'])));
|
||||||
|
$event->setEnd($end);
|
||||||
|
|
||||||
|
$event_provider = new Google_EventAttendee();
|
||||||
|
$event_provider->setDisplayName($provider_data['first_name'] . ' '
|
||||||
|
. $provider_data['last_name']);
|
||||||
|
$event_provider->setEmail($provider_data['email']);
|
||||||
|
|
||||||
|
$event_customer = new Google_EventAttendee();
|
||||||
|
$event_customer->setDisplayName($customer_data['first_name'] . ' '
|
||||||
|
. $customer_data['last_name']);
|
||||||
|
$event_customer->setEmail($customer_data['email']);
|
||||||
|
|
||||||
|
$event->attendees = array(
|
||||||
|
$event_provider,
|
||||||
|
$event_customer
|
||||||
|
);
|
||||||
|
|
||||||
|
$updated_event = $this->service->events->update('primary', $event->getId(), $event);
|
||||||
|
|
||||||
|
return $updated_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -183,18 +183,18 @@ class Notifications {
|
||||||
'$appointment_provider' => $provider_data['first_name'] . ' ' . $provider_data['last_name'],
|
'$appointment_provider' => $provider_data['first_name'] . ' ' . $provider_data['last_name'],
|
||||||
'$appointment_date' => date('d/m/Y H:i', strtotime($appointment_data['start_datetime'])),
|
'$appointment_date' => date('d/m/Y H:i', strtotime($appointment_data['start_datetime'])),
|
||||||
'$appointment_duration' => $service_data['duration'] . ' minutes',
|
'$appointment_duration' => $service_data['duration'] . ' minutes',
|
||||||
'$company_link' => $company_settings('company_link'),
|
'$company_link' => $company_settings['company_link'],
|
||||||
'$company_name' => $company_settings('company_name')
|
'$company_name' => $company_settings['company_name']
|
||||||
);
|
);
|
||||||
|
|
||||||
$email_html = file_get_contents(dirname(dirname(__FILE__))
|
$email_html = file_get_contents(dirname(dirname(__FILE__))
|
||||||
. '/views/emails/cancel_appointment.php');
|
. '/views/emails/remove_appointment.php');
|
||||||
$email_html = $this->replace_template_variables($replace_array, $email_html);
|
$email_html = $this->replace_template_variables($replace_array, $email_html);
|
||||||
|
|
||||||
// :: SETUP EMAIL OBJECT AND SEND NOTIFICATION
|
// :: SETUP EMAIL OBJECT AND SEND NOTIFICATION
|
||||||
$mail = new PHPMailer();
|
$mail = new PHPMailer();
|
||||||
$mail->From = $company_settings['company_email'];
|
$mail->From = $company_settings['company_email'];
|
||||||
$mail->FromName = $company_settings['$company_name'];
|
$mail->FromName = $company_settings['company_name'];
|
||||||
$mail->AddAddress($to_address); // "Name" argument crushes the phpmailer class.
|
$mail->AddAddress($to_address); // "Name" argument crushes the phpmailer class.
|
||||||
$mail->IsHTML(true);
|
$mail->IsHTML(true);
|
||||||
$mail->CharSet = 'UTF-8';
|
$mail->CharSet = 'UTF-8';
|
||||||
|
|
|
@ -42,6 +42,11 @@
|
||||||
<i class="icon-calendar"></i>
|
<i class="icon-calendar"></i>
|
||||||
<span>Enable Sync</span>
|
<span>Enable Sync</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<button id="reload-appointments" class="btn" title="Reload calendar appointments.">
|
||||||
|
<i class="icon-repeat"></i>
|
||||||
|
<span>Reload</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
|
|
|
@ -133,6 +133,16 @@ var BackendCalendar = {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event: Reload Button "Click"
|
||||||
|
*
|
||||||
|
* When the user clicks the reload button an the calendar items need to
|
||||||
|
* be refreshed.
|
||||||
|
*/
|
||||||
|
$('#reload-appointments').click(function() {
|
||||||
|
$('#select-filter-item').trigger('change');
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event: Popover Close Button "Click"
|
* Event: Popover Close Button "Click"
|
||||||
*
|
*
|
||||||
|
@ -513,8 +523,8 @@ var BackendCalendar = {
|
||||||
},
|
},
|
||||||
error : function(jqXHR, textStatus, errorThrown) {
|
error : function(jqXHR, textStatus, errorThrown) {
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
//console.log('Update Appointment Data Error:', jqXHR, textStatus,
|
console.log('Update Appointment Data Error:', jqXHR, textStatus,
|
||||||
// errorThrown);
|
errorThrown);
|
||||||
//////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
if (errorCallback !== undefined) {
|
if (errorCallback !== undefined) {
|
||||||
|
|
Loading…
Reference in a new issue