Appointments and Reservations
One of the projects that will be heating up in my queue is the need for a system to drive appointments and reservations in Drupal. This is a functionality I have built for our current intranet, which will need to be replicated if I am to move the supported groups over to the new system.
After spending some time looking at potential solutions, I have yet to find something that seems at all promising. The best recommendation I’ve seen has been to build my own content type via CCK, Date, and the Event modules. However, this seems a bit unwieldy for what I need to build.
What I’m after, specifically, is a system to allow students to sign up for half hour time slots on a repeating schedule. Every week the student advisors in our school offer a set number of half hour appointments, which students can sign up for up to a week in advance. Because this schedule rarely changes, I built the original code in essentially two layers:
- The first layer, for the advisor, presents a grid of all possible appointments, from 8 AM to 5 PM, Monday through Friday. The advisor checks a box next to each half-hour block to indicate they are available during this time.
- The second layer, for the student, shows only those appointment slots which the advisor has activated. Students check the slot they want to reserve. Slots which have already been reserved appear in the grid as having been taken, allowing the student to know what schedule is available for future weeks.
There is a bit more to the system, including a screen which allows the advisor to manage schedule exceptions, and a blind-scheduling routine which presents students with a list of available appointments without knowing the advisor with whom they will be meeting (students are routed to an advisor based on their class rank and their honors status, preventing them from self-selecting into the more senior advisors every time). However, this is the basic gist of what I’ve built already.
There are half a dozen advisors at any given time, although their specific identity changes over time. Likewise, advisor schedules shift each quarter, although they have yet to vary outside the 8-5, M-F timeframe.
I feel that the logic I used to build the first system still holds true – which means that the application will need a repetitive range of 30-minute windows. From what I can tell, the Date Repeat module in Drupal does not allow for this type of repetition pattern.
Another option might be to set up a taxonomy of possible appointment times, and give the students permission to create an appointment content type with a required taxonomy term of one timeslot. I’m not sure how exceptions would be handled in this scenario, nor how anonymity might be preserved, but this might be worth exploring a bit more.