May 29, 2011

Ticket to Ride

I do not often bring my work life over to my blog, but thought I'd blow my own horn this morning.

One of my clients is the Essex Steam Train & Riverboat. I've been web-wenching for them since 2001; I'm not really a graphics person so their in house person comes up with the "look" and I write the code. They recently had someone in trying to upsell them on social media and webwork, and were told "your website looks and works great, no need to do anything different" which is nice to hear.

Anyway, this year, we've been implementing a new web based ticketing system. They found a shopping cart kind of company that they wanted to work with, messed around with it for a year, and finally turned it over to me. It's up and running now, and two weekends into the season, is working great.

It's been a big, complicated project. It's not simply selling tickets - each ride consists of several segments, each of which needs to be inventory controlled. So an 11:00 am Steam Train ride consists of a northbound ride on the train, and a southbound ride on the same train. But an 11:00 am Steam Train & Riverboat ride consists of the 11:00 am Northbound, a Riverboat ride, and a southbound trip on the next (12:30 pm) train. Each of those segments has a fixed number of seats, and if any one segment sells out, the top level ticket cannot be sold.

In addition, there are seat upgrades - a First Class car, an Open car, a Caboose - each with limited seating. There is a special package including a hike to Gillette Castle (limited by the number of passengers who can disembark at a small platform). It's all quite complex.

I've put together this ticketing system from square one - from setting up useful and meaningful product ID codes and names, creating the linked segments to force top level tickets to sell out when individual segements are gone, setting up a menu of categories to help find tickets, and implementing some novel workarounds to make a standard shopping cart system work for ticketing. For instance:

a) Set up a fake "warehouse" system so that each day of the year has a spearate "warehouse" - this makes sorting tickets (for customer use as well as client use) easier.

b) Forcing products to become hidden at the end of each operating day, as well as when the ticket becomes sold out.

c) Creating special option trees to manage passenger types (child / adult / infant / senior, each with a different price) and also to permit double senior discounts on Mondays.

It's been a fun project, with a liberal use of advanced spreadsheets (filters, text functions, macros) to automatically propogate data - it would be impossible to build and maintain a 10,000+ item inventory control system by hand. Now that the seaon is underway and ticketing is going smoothly, I'm working on spreadsheets and processes to export data (daily ordering information, dinner train passenger manifests, etc.).

I'm not really a programmer or IT person; I'm mostly just an advanced user. But I guess I've got those genes (Dad worked in IT back in the data processing / Univac / punch card days)

No comments: