Emre, Thanks for the speedy update. I downloaded the source and started playing around with it last night. As you expected, I have a few questions. I'll fill you in on some background for cc processing in restaurants in the US first.
Compared to Europe and Asia, we're still old school when it comes to processing credit cards. Here's how it works in most restaurants in the US.
[AUTH]First we run what's called a pre-auth, which basically asks the credit card company if the card holder has enough credit for the amount + a 20% gratuity. We do this because the customer will manually write in the tip amount later.
[SIGN]Second, a receipt is printed that contains the tendered amount with a blank space for a tip and of course a signature.
[FORCE]This receipt is then returned to the cashier, who enters the tip information and runs the actual charge, called a Force.
[CLOSE]This ticket is completed, the cashier can re-purpose the table if in ala-carte mode.
Q1. Given the above, I need temporarily persist some credit card information, along with the state of the transaction. I think it makes sense to attach this information to the ticket model. How would you recommend I do that?
Q2. The TIP that the customer gives should also be attached to the ticket. I can just create a non-taxable item called Tip and add it to the ticket, but it seems like a bit of a hack. Is there a good way to add the tip to the ticket?
Q3. We'll likely need an additional management screen to perform voids of transactions. This probably shouldn't be done through a ticket, as the ticket may have been closed by the time a mistake is discovered. Also, it's a theft risk if cashiers can just void charges. Where/How do you recommend I add that?