Working with Commerce 8 here.
When an order level discount is applied this is then distrabuted/divvied up across the line items, this means on the lineitem you end up having a lineitemorderleveldiscount, this is fine and works as expected.
The issue/problem I am facing is that I have a product in my catalog which I don't want to ever be given a discount. At a catalog entry level this is fine, our CMS users can do this out of the box.
When it comes to the order level discount there is no way to stop the distrabtion of discount happening to this particular product.
Is there a simple way in which we can code in some change that it will always ignore this product, without having to go down the custom promotion development route?
This is a special request, so I think there is no way but to custom the Workflow to handle that exception.
One place which you might look into is CalculateDiscountsActivity activity, check AddDiscountToLineItem and CalculateDiscounts method. You can check if the item being calculated is your special product or not and exclude it from being getting the discount.
Note that if it's the only lineitem in the cart then there is no way to avoid that.
(I know this is how it works), but I remeber is past I have seen an issue also that it leads to few times wrong calculations (a penny difference) also (e.g. item with price 22.57) and back in many reporting systems this is considered as wrong behavior, specially while working with diffrent sellers.
What is defination of order level dicount, business translates it differently. I am wondering Is it something EPiServer is changing in new promotions regarding the way Engine calculates order level discount. PREFERABLY, Developers should have an option how they want to apply order level discount, Do they want to spread between line items OR they want to apply on order as a kind of shipping discount (that applies on order level without touching the lineitems). (I am on Commerce 9.3)
It used to be stored in the OrderForm the discount for order levels, but this was changed in Mediachase days to handle returns so you know how much to refund back for the line item. It is something we can look into the future when we start focusing on improving the order system, but for now it will need to be stored one the line item. This means you need to make sure the total amount is correct which leads to one item receiving a penny more than the others in some situations.. I have not seen effect reporting as discounts are usually reported seperately.