danielecook
8/2/2014 - 7:55 PM

Google App Script Calendar Reservations

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);

    }
    }
    }
    }
  
}