Before proceeding with this article, we suggest reading managing bundles in Katana.
In WooCommerce, product bundles can be created using a WooCommerce plugin for Product Bundles. If this plugin is enabled, you can select a Product Bundle as a Product Type for newly created products. This means that a bundle is a product on its own on WooCommerce.
For each bundle in WooCommerce, you can select whether to display the bundle as available for sale for your customers even if the bundle is out of stock or remove the bundle listing when the inventory level for the bundle is zero. This means that you can either pre-define the total number of bundles that are available for sales and remove them from your WooCommerce listing once they are sold out, or keep the bundles available at all times. In the latter case, you would need to make those bundles in Katana when the sales order comes in (read more about defining bundles in Katana from the link above).
We suggest keeping the bundle available at all times only if you are making the required products to order or, at least, have an opportunity to make more products when required. If you can only make a limited amount of product, you have a risk of overselling the product if it's available via bundles at all times.
If you are making bundles to stock and removing the listing once the bundles run out:
Some Katana users are looking to make bundles to stock to define the total number of bundles available. In this case, you should create a Manufacturing order (MO) for the bundle in Katana before the sales order for the bundle comes in to add bundles to your stock. When making bundles, you also might create Manufacturing orders for the products required by bundles to make more products for bundles.
However, when you have an open MO for the bundle in Katana, it will commit the required products to this MO. When you create additional Manufacturing orders for the required products in Katana, the Expected quantity in Katana for the products will increase.
When you have enabled the stock sync, the stock level synced to WooCommerce equals: In stock - Committed quantity in Katana. Read more here. This calculation does not take the Expected quantities for products into account, i.e. we only sync the stock of completed products that is available for sales.
This could potentially create a problem where the MO for the bundle (that immediately commits the required products) reduces the available stock for those individual products also in WooCommerce, but the Expected quantity for the required products does not add stock to WooCommerce.
For that reason, the Committed quantity used in calculating the synced stock level does not include products that, in Katana, are part of bundles, i.e. products that are committed as ingredients to other products. Otherwise, the individual products might be removed from your WooCommerce listing before the production of those products for the bundle is complete, and you might lose sales.
This means that only the quantity of the product that appears directly on a Sales order (SO) (i.e. not the quantity that is required by any bundles on any Sales orders) is taken into account in the stock sync calculation.
If you are making bundles to order and keeping bundles available at all times:
In this case, if a sales order is received for a bundle, the Sales items availability for the bundle is Not available as you are keeping zero bundles in stock in WooCommerce and in Katana. Therefore, the quantities of products required for this bundle are committed directly to the sales order in Katana as ingredients. However, these commitments are not taken into account when syncing stock levels for individual products from Katana to WooCommerce.
Click Make to order for making the bundle and complete the MO for the bundle to reduce the stock for related products. This reduction in stock for individual products is also synced to WooCommerce at the time of completing the MO. Now, you have the bundle in stock and can fulfill the SO. Once the SO is fulfilled, the stock for the bundle is reduced back to zero.