A bundle is, by design, an amalgamation of products that sometimes behaves like a single product and sometimes behaves like its component parts. We need to model the bundle differently at different stages of its life to adequately manage its configuration, purchase, and fulfillment.
A buyer needs to see the product, quantity, price of each individual product in the bundle (regardless of whether the product bundle is modeled as product options of a single order item or as multiple order items)
A buyer shouldn't be able to manage the products within the bundle, though, inside their order/cart. For example, they shouldn't be able to change out one part of the bundle for another part within the cart, as the bundle once it's in the cart should operate like a package.
A seller needs to be able to manage the pricing and inventory on a line-item-basis.
- In the catalog, a product is composed as a product with one or more options
- When a product bundle is in the buyer's hands, the product is converted into an order item and the option values are converted into child order items
- When the order is placed, it remains exploded as a parent order item with child order items
- When a product bundle is in the storefront, it is a product with one or more product options.
- When a product bundle is added to an order in the buyer's hands (Status is Open or In Progress), it is exploded out from a product with options to and order item with one or more child order items
- Once an order is placed, the product that was the product bundle is also a parent order item with child order items
- The product bundle line item can be deleted but will have no bearing on the products that were in the bundle
- LOE to implement a "ship separately" configuration on the product bundle level
- When set to TRUE, each product within a bundle is allowed to be shipped separate from the other items
- When set to FALSE, each product within a bundle must be shipped in the same shipment