# Order Use Cases

1. As a Customer I need to be able to place an order containing products from multiple platforms, whilst only interacting (e.g. placing a payment) with the platform I am buying from so that I can have a seamless customer experience.<br>
2. As a Trader I need any customer order data to be passed to other platforms in an anonymized, GDPR-Compliant, manner so that I can ensure my business remains legal.<br>
3. As a Trader I need to reserve stock against the Producers inventory (if available) as soon as my Customer completes checkout, so that I can ensure I have sufficient stock to fulfill my orders.<br>
4. As a Producer supplying a Trader (Hub) I need all Customer sales orders for my Products on this Trader to be consolidated into a single order for a sales session so that I can process orders simply.<br>
5. As a Trader I need an option for Producer orders to be consolidated into a single order per sales session per Producer so that I can send a single aggregate order to my supplier.<br>
6. As a Trader I need an option for Producer orders to be aggregated by weight to the total weight for a sales session per Product so that I can order a single bulk quantity from my supplier.<br>
7. As a Trader I need orders to complete if no inventory information is available so that orders can still be processed by platforms that have not yet implemented inventory management.\
   \ <br>
8. As a Producer I need any cancelled Customer orders to be reflected promptly (Order Lines removed/ Quantities reduced as appropriate) within the Traders Order so that stock can be available for other orders. \
   \
   An Order update (PUT) can be applied to ensure any amendments to Order Lines are reflected.<br>
9. As a trader I need to flexibly apply sales-based discounts to orders, so that I can give customers the best deal possible.\
   \
   These are discounts not based on a customer category so the Cust Cat/Offer/Price link isn't easy to traverse (e.g. a bulk discount of 5% if total order value exceeds 100 EUR)\
   \
   The `Order` class contains `discount` property (as a float), that can contain a total value of all discounts for an Order. Individual items can similarly be discounted using the `OrderLine` `discount` property (also a float value).
