This project was for Ruby Tuesday, and features things that are not public domain, so I do not have any source code on it.

In this project we tested the viability of one of the more popular table top ordering devices.  My role was integrating it with our system, which is a custom implementation of Micros RES 3700. This required working with 2 other 3rd parties (the maker of the device, and the company that provides our kitchen display software), as well as a fair bit of SQL work, and a bit spoonful of QA work (which was a bit hard to swallow).

In this project, there were two major challenges: getting the table top ordering agent working with our POS software, and getting orders from it to out kitchen system.

Making the Agent Do Things

The basic installation of the agent was pretty straightforward, and we already had the API they needed installed (our online ordering system uses it). What made this difficult is that the company behind this couldn’t tell us exactly what sort of database access they needed; they expected full access. It also had to be implemented with a password stored in either the ODBC connection or a plain text configuration file… We were not cool with either of those conditions. In the end, we had to create a new ODBC connection, and a new database user, which was restricted from all of the tables we considered sensitive (like employee and credit card information).

Compounding this was the way that the agent expected some parts of the database to be formatted. For instance, our table management system offers a database column for the table’s name, and another for the table’s object number. We use the table name to display them. The ordering device wanted the object number. This left the devices reading one way and the POS system another. We ended up having to update the entire column to match the object numbers and table names where possible (some of the special tables, like bar tables or patio table are alpha-numeric, but we didn’t want them included in the table top system anyway).

Another example of this was that the agent required credit card preambles to store the length of the card. We don’t store this because it makes the system more flexible; if Discover suddenly rolls out a 17 digit card number, our system is already set up for it. So, I had to research the credit card formats we wanted to support, and add them to our database accordingly.

With a few other small changes, we were able to get the device sending orders to our POS. Getting them to then route to the kitchen system was another story…

How Do We Cook This Stuff?

We use a QSR Automations solution for our kitchen display. It uses a separate library present on our workstations to translate orders from the POS and send them to the kitchen server. The orders from the table top device were not coming from the workstations though, and did not get included in the Micros specific solution we were running. After working with QSR on this, the only solution we could come up with was to include another layer between the current one, which would take orders from the workstations and the table top device, and pass them to the kitchen server. This was essentially a different version of what we already had, and it had the same functionality in many ways. These overlapping features proved a little challenging, as they tended to overwrite each other.

The actual install of this new middleware wasn’t difficult. I was really just a matter of changing ports so that the new piece captured data from the current one, and passed it to the current kitchen server’s port. From there, it was a matter of installing that executable as a service and making it start automatically.

Wrapping Up

For me, this was the first taste of how these pieces communicated with each other. In addition to the usual trial and error at the database level (because Micros’ documentation is terrible), this project had me using port monitoring tools to determine where my orders were going. In the process, I learned how to use the same process in a support role, and gained a new troubleshooting tool when dealing with our kitchen system.

 

Leave a comment