========== Overview ========== Here we'll give the high-level view of what Sideshow is/does. Intended Use Case ----------------- Sideshow is designed with "brick and mortar" retailers in mind. They normally sell product "in person" using POS software. Some retailers allow customers to "place an order" for product which is not currently in stock. The retailer will then place an order with their vendor, and ultimately the customer will pay for and receive the product. Depending on the retailer's business rules, customer may need to pay for the product up-front, or else at time of pickup. They may also receive a discount when ordering by the case etc. Sideshow provides a common system to track such "case / special orders" - which are just called "orders" in Sideshow. It runs as a web app, (normally) on the internal network, where staff can access it from any machine. Workflow -------- Staff must first create the :term:`order` in Sideshow. They identify the customer / contact info, and add item(s) with desired quantity. Depending on config, staff may be able to create orders for customer and/or products which do not yet exist in the system. From there, dedicated workflow pages may be used for various steps: * Placement - staff indicates item(s) are on order from vendor * Receiving - staff indicates item(s) arrived from vendor * Contact - staff indicates customer has been notified * Delivery - staff indicates customer has picked up item(s) Each :term:`order item` has a status indicating where it is in the workflow. Staff can manually override the status if needed, when unexpected situations arise. Customer + Product Data ----------------------- By default, Sideshow stores "local" :term:`customers ` and :term:`products ` in its :term:`app database`. Whenever an order is created for new/unknown customer and/or product, records are added to the local customer/product tables as needed. From then on those records are available for lookup when creating new orders. However in many cases it's better to query the POS DB for customer/product data. That way the lookup "just works" from the staff perspective, and there is no need to store those in Sideshow. The latter case is referred to as "external" :term:`customers ` and :term:`products `. Some POS systems are already supported for this: * CORE-POS via `Sideshow-COREPOS `_ * ECRS Catapult via `Sideshow-Catapult `_ (nb. access restricted) * LOC SMS via `Sideshow-LOCSMS `_ (nb. access restricted)