For a real-world online commerce site, your application pages will need to take care of some other tasks. This book doesn't cover these tasks explicitly, but they should be well within your reach now that you have been introduced to the basic concepts and have walked through the construction of the main shopping experience for your users.
Most users who place orders online will expect some mechanism to allow them to check the status of their orders, usually online. Depending on what your site sells, simply making an email address available for status inquiries might be enough. However, some type of secure order-tracking page will satisfy more people and cut down on support costs.
The OrderHistory.cfm templates from Chapter 21 are a great start. You would just need to ensure that the user has a way to see the ShipDate as well as the OrderDate, and you might even add a button the user could use to cancel an order.
This chapter hasn't even touched on actually fulfilling an order after it has been placed. How this works will depend entirely on the company for which you are building your commerce application. For instance, you might provide an Order Queue page for employees in Orange Whip Studios' shipping department. This Order Queue page could be similar to the OrderHistory.cfm templates (see the previous section, "Order Tracking"), except that it would show all pending orders, not just the ones for a particular user.
Or you might decide that an email message should be sent to the shipping department using the <cfmail> tag. If your company's needs are simple, it might be sufficient to simply BCC the shipping department on the email message sent by the <cf_SendOrderConfirmation> Custom Tag from Chapter 27.
Cancellations, Returns, and Refunds
If you are taking money from your visitors, there is always the possibility that you will need to give some of it back at some point. You must ensure that your company has some means for dealing with returns and refunds, including the ability to credit back any charges made to the user's credit card.
You might build your own Web-based interface for refunds and cancellations, using the <cf_VerisignPayflowPro> tag (which does support items such as refunds), if that is the payment-processing mechanism you are using. Many payment-processing services provide their own Web-based systems, which your company's accounting or customer service departments can use to handle such special cases.
The examples in this chapter assume that all items in the Merchandise table are always available for sale. Orange Whip Studios might not need to be concerned about its merchandise ever selling out, but your company probably does. At a minimum, you should probably add an InStock Boolean field to the Merchandise table and ensure that users can't add items to their carts unless the InStock field is 1. More sophisticated applications might call for maintaining a NumberOnHand field for each item, which gets decremented each time an item is ordered and incremented each time new shipments come in from the supplier.
Once a company is doing business online, it will need to know how much business its online store is generating. You should supply your company's executives with some type of reporting functionality that shows purchase trends over time, which products are profitable, and so on. To build such reports, you could use Crystal Reports with the <cfreport> tag (see Appendix B, "ColdFusion Tag Reference") or build your own reporting templates, perhaps illustrating the data visually using ColdFusion's dynamic graphing and charting capabilities (see Chapter 16, "Graphing, Printing, and Reporting").