I've recently been developing an online EPOS system for Shade Station to use on iPads and Macs in their new flagship store and came across a few problems that I initially thought would be pretty simple to solve as "plenty of people would have done it before" but when it came to searching to see what was out there I realised that there wasn't a lot of help so I thought I'd write a quick start guide to solving a few of the common issues that might help out someone else in my place.
To create an online EPOS system where employees can process a transaction either from an iPad from anywhere in the store or from one of the till points (strategically placed Macs)
Other than the iPads and the Macs the main thing you'll need is a till drawer and receipt printer connected to the Mac. I would recommend the Star Micronics TSP113 for a receipt printer and the Star Micronics CB2002 as the cash drawer. These were some of the only options I could find which came with Mac drivers and as they were both Star Micronics I knew the drawer would be able to be connected to the receipt printer without any hassle.
Controlling the till drawer from the web
The first issue I came across was how to get a till drawer to open after each transaction when the system processing the transactions was running in the web browser - fortunately the cash drawer is able to be connected directly to the receipt printer and the printer can be setup to fire off a pulse to open the cash drawer whenever a receipt is printed. The receipt printer isn't set up to do this by default but by going into the printer properties it can easily be configured to open the drawer after each print.
Removing the confirmation box
I then decided to look into how to get rid of the print dialog confirmation box so that the receipts would print automatically after a transaction is processed without having to get the user to press ok on the usual popup. As this was going to be running on dedicated machines I was able to choose which browser they would use and after a bit of research it was obvious that firefox seemed to be the best choice for this. (Chrome doesn't appear to have this feature at all and in IE it's possible using some VBScript to bypass it but I wanted to avoid IE if at all possible as we're running this on Macs and I didn't want to have it run from a virtual machine).
To remove the dialog box in Firefox you can type about:config into the address bar, right click and add a new boolean item called "print.always_print_silent" then set the value of the item to true. Finally I removed the headers and footers from any printouts using the firefox page setup screen so the receipts could look the same as any normal shop receipt.
Getting the iPad to recognise the receipt printer
The next difficulty was in getting the iPad to print to the receipt printer - the Star Micronics printers aren't AirPrint compatible however there's a great piece of software called Printopia which can be installed onto your Mac and will allow almost any printer to be shared as if it was AirPrint enabled. Once this was installed, the iPads could see the printer and after a transaction had been processed a print dialog would appear allowing a receipt to be printed on the nearest receipt printer (unfortunately I couldn't find any way to remove the print dialog from the iPad Safari version of the EPOS).
Default Settings in CUPS
I thought at this point I'd cracked it but when I actually printed from the iPad the till drawer wouldn't open. After playing around with this for a while it appeared that when printing through Printopia it wasn't using the saved defaults I had set up for the receipt printer so it wasn't firing the pulse for the drawer.
In order to get this working fully I had to go into the CUPS printer manager (http://127.0.0.1:631/) from a Mac which allowed me to overwrite the true default settings for the printer with new ones so that the till drawer pulse could be enabled for all devices printing to the receipt printer.
Finally once this change was made, the system was up and running in time for the store opening.