Skip to main content

5.0 Building a Booking System With Google Apps

I think I have a booking system that is close to working. A big leap forward was made when someone on the Google Apps message boards shared a way of avoiding the painful timeouts and false error messages after creating a calendar entry.

You basically create an event, getting its ID and then get it again, using that ID rather than working with an object. Who'd have thought? Anyway, this is the code that works.


 var cal = CalendarApp.getCalendarById('YOUR_CALENDAR_ID@group.calendar.google.com');
   var eventID = cal.createEvent(title, startDate, startDate).getId(); // create/get event ID

   //recall the event for each element you want to add
   cal.getEventSeriesById(eventID).setDescription(eventDesc);
   cal.getEventSeriesById(eventID).setLocation(location)
   cal.getEventSeriesById(eventID).addGuest(email)
   cal.getEventSeriesById(eventID).addEmailReminder(30)

This workaround has meant that I could do away with the Task Queue sheet, which was becoming more complex than it needed to be. It looks pretty much looks the same and works quite well.



Caveats

I would say that I have a few concerns about how fast the interface works. Sometimes it feels like an age to open the "Booking dialog" above. And once you click the "Book this perch" button, there is a visible delay as the cells get filled in ( each cell needs to look up to see which row it is in, and which column, but this shouldn't be too arduous a task ).

I'm also a bit worried about the need for a GREAT BIG AUTHENTICATION dialog that scares the hell out of you with its a. size, b. big red border and c. ugly HTML. You only have to grant access to it once but still... after granting access to my script to add a calendar invite to your calendar, you then have to click "OK"... and THEN you can go back to where you were and do it all again ( this time with no big ugly dialog). It's awful. Look.



I have a few niggling doubts about permissions too. For example, in order for anyone to do anything useful ( adding data to the spreadsheet ) for example, I think you pretty much give them access to everything else. Of course in a utopian dreamworld, that means that anyone using the booking system can also speed up my code and improve things a bit. I look forward to that happening.

I have irksome niggles about how an why the onOpen() script sometimes works, installing the "Booking..." menu and sometimes doesn't.

In the process of making this I've also found a suspicious side-effect loophole of working with Google Groups. My intention was to be able to share this Booking System with a collection of students, adding them to a group "silently" email-wise... this doesn't work... more on this later.

I don't trust cats either.

I will make a copy available once I've tested it a bit more.







Comments

Post a Comment

Popular posts from this blog

Inserting A Google Doc link into a Google Spreadsheet

This article looks at using Apps Script to add new features to a Google Spreadsheet.

At the University of York, various people have been using Google spreadsheets to collect together various project related information. We've found that when collecting lots of different collaborative information from lots of different people that a spreadsheet can work much better than a regular Google Form.

Spreadsheets can be better than Forms for data collection because:

The spreadsheet data saves as you are editing.If you want to fill in half the data and come back later, your data will still be there.The data in a spreadsheet is versioned, so you can see who added what and when and undo it if necessaryThe commenting features are brilliant - especially the "Resolve" button in comments.
One feature we needed was to be able to "attach" Google Docs to certain cells in a spreadsheet. It's easy to just paste in a URL into a spreadsheet cell, but they can often all look too si…

Writing a Simple QR Code Stock Control Spreadsheet

At Theatre, Film & TV they have lots of equipment they loan to students, cameras, microphone, tripod etc. Keeping track of what goes out and what comes back is a difficult job. I have seen a few other departments struggling with the similar "equipment inventory" problems.

A solution I have prototyped uses QR codes, a Google Spreadsheet and a small web application written in Apps Script. The idea is, that each piece of equipment ( or maybe collection of items ) has a QR code on it. Using a standard and free smartphone application to read QR codes, the technician swipes the item and is shown a screen that lets them either check the item out or return it.

The QR app looks like this.



The spreadsheet contains a list of cameras. It has links to images and uses Google Visualisation tools to generate its QR codes. The spreadsheet looks like this.


The Web Application The web application, which only checks items in or out and should be used on a phone in conjunction with a QR cod…

Getting CSV data into Google Spreadsheets Automatically

Today I was attempting to get CSV data from Estates' Alarm System into Google Docs as a spreadsheet. There were two ways to try and achieve this...


Create an AppScript in Google that pulled a .CSV file from a web serverWrite a (python) script on the local machine that pushed the data into Google Spreadsheet by using the API. The Google AppScript Way As you know, my JavaScript ain't great, but it initially looked like it was going to work... Some code like this below and using the Array to CSV functions from here, looked promising.



function encode_utf8( s ){
//This is the code that "I think" turns the UTF16 LE into standard stuff....
return unescape( encodeURIComponent( s ));
}

function get_csv(){
var url ='http://www-users.york.ac.uk/~admn812/alarms.csv.Active BA Alarms.csv';// Change this to the URL of your file
var response = UrlFetchApp.fetch(url);
// If there's an error in the response code, maybe tell someone
//MailApp.sendEmail("s.brown@york.ac.uk&qu…