'Custom' product bundles with price set by quantity in the bundle

I have a client who sells groups of 4 of their products. products are resource products. I’m using bundles to group them in predefined ways - all good! Now they’ve said they’d like to make subsets of those bundles available. And with pricing that scales based on how many products they add to the bundle (so, 1 - €3,95, 2 - €4.95, 3 - €6,95, 4 - €8,95). I’ve been looking at a few ways to do this.

  • A product that’s no longer quite a bundle, but where you choose the number of items then select the items you want from the range and those details become extra fields saved with the product
  • Variations - so a fixed price for what’s no longer a bundle but instead a product that represents a group. But for a group of 4 I’d need to have each of: 1 (combo of 4) + 3 (combos of 3) + 6 (combos of 2) + 4 (‘combos’ of 1) = 14 variations per bundle - there’s multiples of these so that’s going to add up quite fast. I’d also need a good way for the user to be able to choose which option they want from the 14 possible outcomes. I could just list them all out in a select box/radio buttons, but trawling through this list seems like a poor user experience compared to the user just being able to select 1-4 items from a group of checkboxes and having the system ‘just know’ the price
  • just add a bundle for every formula per the above - going to add up quite fast per the above
  • CombineProducts, but I don’t think you can set a price for the bundle can you? It just smooths out multiple additions of the same SKU…?
  • Item Options: but there’s no way to enforce the combo such that the €3,95 option is definitely picked as opposed to just picking two products as the +€1 add ons
  • ItemData, but I’d want to use JS to set the price field and other fields on the fly based on selecting of checkboxes and then ideally also have a server side check that runs to make sure no-one’s scamming it/the price is calculated correctly by the JS (though they tend to operate by invoice so may accept a manual check at their end). This is probably my favoured path at this stage. But does that work with bundles or only products?

Any options or methods I’m missing that might be a good fit here?

I’d probably go the route of a custom add to cart snippet for this.

Build the interface with checkboxes, submit the product ids (optionally with Ajax), do the math based on the business rules, and use that to add an order item with either item adjustments (like ItemOptions) or properties (like ItemData).