Question

I need to show custom coupon error messages on frontend based on conditions.Where does the validation of coupon occurs when customer applies a coupon on the checkout page?

As far as I know, Magento\Quote\Model\CouponManagement::set is called. In this function the following code applies the coupon code and recollects the quote totals:

$quote->setCouponCode($couponCode);
$this->quoteRepository->save($quote->collectTotals());

But after this I am not able to find where the validation occurs.

Edit: I am able to show custom error message for some validations by adding a plugin for Magento\Quote\Model\CouponManagement::set() method, but I need to show custom message to the customer for each cart condition also. For example, if the item does not belong to a certain category, or the subtotal of the cart is below the required amount, I need to show specific custom message to the customer.

Edit 2: I found that the validation of attributes is done in Magento\Rule\Model\Condition\AbstractCondition::validateAttribute(). This method is only returning true/false boolean value. I also need the attribute at which the coupon code fails and show it in the error message.

I need to get the attribute at which the coupon fails to apply and show it in a message to customer.

No correct solution

OTHER TIPS

If you look in Magento\SalesRule\Model\Utility which can be found at vendor/magento/module-sales-rule/Model/Utility.php. From what I can find canProcessRule() is where it starts. It will then mark the rule as invalid when certain conditions aren't met.

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top