Google App Script Calendar Reservations
/**
* Get a user's name, by accessing contacts.
*
* @returns {String} FullName, or UserID
* if record not found in contacts.
*/
function getUserName(email){
var user = ContactsApp.getContact(email);
// If user in contacts, return their name
if (user) {
// Get full name
var name = user.getFullName();
}
if (!name) {
// If not in Contacts, return the bald userID.
name = email.split('@')[0];
}
return name;
}
function delete_reservations() {
var antiquity = new Date("June 10, 1900 11:13:00");
var eternity = new Date("June 10, 3900 11:13:00");
var events = CalendarApp.getCalendarsByName("Reservations")[0].getEvents(antiquity, eternity);
var d = new Date();
var n = d.getTime();
for (x in events) {
var e_date = events[x].getDateCreated();
var email_reminder = new Date(e_date.getTime() + 60*44*60000);
var expire = new Date(e_date.getTime() + 60*48*60000);
var delete_time = new Date(e_date.getTime() + 60*72*60000);
var creator = events[x].getCreators()[0];
var today = new Date();
if (events[x].getTitle().toLowerCase().indexOf("booked") && events[x].getDescription().toLowerCase().indexOf("booked")) {
// Expiration Notice
if (events[x].getDescription().indexOf(expire) == -1) {
events[x].setDescription("Expires on " + expire);
Logger.log("Description Set");
}
// Reminder Email
if (events[x].getDescription().indexOf("<reminder_email_sent>") == -1 & n > email_reminder) {
events[x].setDescription(events[x].getDescription() + " <reminder_email_sent>");
GmailApp.sendEmail(creator, 'Reminder - Reservation will Expire', "Your reservation, " + events[x].getTitle() + " Will expire on " + expire);
Logger.log("Email Reminder Sent");
}
// Set Title and Hours remaining
if (n < expire) {
events[x].setTitle(getUserName(creator) + "; " + parseFloat((expire.getTime() - today.getTime())/3600000).toFixed(2) + " hour(s) remain");
}
// Set to Expired
if (n >= expire) {
events[x].setTitle(getUserName(creator) + " [Expired]");
Logger.log("expired %s", x);
}
// Delete
if (n > delete_time) {
events[x].deleteEvent();
Logger.log("deleted %s", x);
}
} else {
events[x].setDescription("<b>" + events[x].getDescription().replace("Expires on ","").replace(expire,"").replace(" <reminder_email_sent>","") + "</b>");
}
}
// Delete competing events on the same day!
for (x in events) {
for (y in events) {
var x_date = Utilities.formatDate(events[x].getStartTime(), "CST", "yyyy-MM-dd");
var y_date = Utilities.formatDate(events[y].getStartTime(), "CST", "yyyy-MM-dd");
if (x_date == y_date && events[x] != events[y]) {
Logger.log(x_date + " | " + y_date);
Logger.log(events[x].getTitle() + " conflicts " + events[y].getTitle());
if ( events[x].getDateCreated() < events[y].getDateCreated() ) {
events[y].deleteEvent();
var creator = events[y].getCreators()[0];
GmailApp.sendEmail(creator, 'Conflicting Event', "A reservation you placed on the google scheduling calendar conflicted \
with an earlier reservation and was removed automatically. Please wait for the other reservation to expire. It will expire on " + expire);
}
}
}
}
}