More advanced promotion price calculations ("Buy 2 get the 3rd one free", etc). Also allow a customer to choose a free gift on checkout


More advanced promotion price calculations such as "Buy 2 get the 3rd one free"...

Actually we can achieve it ("Buy 2 get the 3rd one free") the following way:
  1. Let's say we have Product1, Product2, Product3.
  2. Create a new discount. Ensure that 'Discount type' type is set to 'Assigned to products'. Check 'Use percentage' and set 'Discount percentage' to '100%'. Then go 'requirements' tab and create 'Customer has all of these products in the cart' requirement with IDs of Product1 and Product2.
  3. Apply this discount to Product3 (on the product details page, discounts tab)
Issue 1: you have to manually add Product3 to the cart. So we need to find a way to notify a customer about this free product
Issue 2: it's applied to any quantities of Product 3. But we should control it (how many products are free)

This is not a very generic solution. Currently it does not work in many real cases such as:
  • Buy 1 (or 2 or 3 or 4 ...) of Product 1 and get 1 (or 2 or 3...) of Product 1 free (or with some discount).
  • Buy 2 (or 2 or 3 or 4 ...) of Product 1 and get 1 (or 2 or 3...) of Product 2 free (or with some discount).
  • Buy 1 (or 2 or 3 or 4 ...) of any Product 1 or Product 2and get cheapest one free (or with some discount).
We also should show a message on the product page i.e. "Buy one more and get a free gift" or "Buy product Y for a discount" etc

Forums source: http://www.nopcommerce.com/boards/t/14298/buy-2-get-the-3rd-one-free.aspx

[AM] It's already can be done using 'Customer has all of these products in the cart' and 'Customer has one of these products in the cart' discount requirement rules. But the only issue now is that the discount will be applied to any quantity of a discounted product.

Also allow customer to choose free gift on checkout. For example, a person who spends so much gets to choose a free gift on checkout.

also see work item 10103


filu wrote Jan 5, 2012 at 8:28 PM

The main idea is for the store owner to apply a FREE price to one (or maybe more) of the "cheapest" items in a shopping cart.

So if a user buyx XX items, 1 or more will be free.

Conceptually we need to select 2 values (1st value is the total number of items that need to be purchased in order to activate the FREE price, 2nd value is the number of products to be free - starting from the lowest price).

For example 5-2 means that IF a user buys 5 products, the 2 cheapest products will be free.
If we want to handle the current thread request, the values will be 3-1 where IF the user buys 3 items, the cheapest one will be free.

Ideally the store owner should be able to apply this to certain items (maybe if it's not to complicated), or to exempt certain items from the bundle ...or to exempt items that already discounted.

mickk80 wrote Jun 12, 2012 at 2:36 AM

Would be great to have an item like a Bike and then if you purchase you get a helmet and a bike bottle included within the checkout.

nopSolutions wrote Nov 29, 2012 at 5:53 PM

Hard to implement with the current price calculation engine

BrianARice wrote May 30, 2013 at 6:54 AM

It would be nice to be able to choose a category... and define buy n of these and get 1 free.

thomen wrote Jul 3, 2013 at 10:39 PM

The upsell could show messages on the product page i.e. "Buy one more and get a free gift" or "Buy product Y for a discount" etc

greenkrow wrote Aug 24, 2013 at 5:28 PM

I'm looking for something similar, specifically for a discount to be able to applied based on quantity purchased. If 10 are purchased there is a 1 per item discount, if 20 are purchased there is a 1.50 per item discount. This is to encourage bulk buying. So either a 1 discount or a percentage discount or both.

infinito62 wrote Aug 25, 2013 at 10:52 PM

Sure, still usefull is "Apply discount if cart is over X.XX".

charlesrobinson wrote Nov 13, 2013 at 2:36 PM

Hi there,

I see this work item lost its 3.2 status. Is this being moved to 3.3? This particular work item (imo) is a very strategic feature needed for this platform to compete against the competitors. If there is anyway to get this back onto the 3.2 roadmap please heavily consider it.
I wrote my own buy x get y off (based on $), but the problem with it is you have add it several times for higher quantity. ie, In my buy 2 get z $ discounted, I need to add discount rule for buy 4 get $x off, buy 6 get $y off, etc. Once the last defined quantity has been surprised the discount no longer gets applied to the later ones. (In my case its ok)
What I really want to do is replace the $ reduction with just a Free status and be able to target (lowest cost item in cart, etc). The challenge though for me is, given the current price calc architecture, it seems very hard to implement (as mentioned in an earlier comment).
So, if we can't get this back on the 3.2 roadmap, would you meet us developers half way, and give us enough architecture changes/hooks to accomplish some of this? You could write your official plugins in 3.3, but at least starting in 3.2 we could create our own.

TriarLogic wrote Nov 23, 2013 at 6:18 PM

Although this plugin doesn't hit several scenarios of buy 2 get 1 free that are requested in this thread, you can accomplish some with this plugin at a product level if you put the actual value of product rather than a percentage.
Buy X, Save Y

kaunuk wrote Feb 16 at 7:20 AM

To NopSolutions:
Hard to implement with the current price calculation engine
But that is how all the shops working.
I'll be happy if everyone will have discounts "buy 2 products for 4$ and get 3-rd product priced 14$ for free"
It's definitely have to be priced depend

cooperchen wrote Jun 16 at 8:42 AM

In my case, I wish discount from quantity. In original Schema just hvae DiscountPercentage and DiscountAmount, may be add a DiscountQuantity can solved all we need,