Fixing “Catalog Price Rules” cart issue in Magento 1.4.1.0
After recently upgrading one of my stores running Magento Commerce I found out the the latest version (at this time 1.4.1.0) had a major bug. Don’t want to sound too harsh, but unfortunately Magento’s support was again awful – there have been one thread on the forum and one issue in their bug tracking system for a while now (almost two weeks if not more) and still no update, although as I said the bug has quite an impact – even tweet’ed the problem to @magento and haven’t gotten any reply (again it’s not the first time). Yes, the product is free, yes it’s open source, but I think a bit of transparency and better communication could come to their advantage.
Bug details/behavior
So, updated from 1.4.0.1 to 1.4.1.0, everything looks fine, catalog price rules are being applied in the catalog (categories and product pages), but when adding the product to the cart the quote item price was the regular price not the special one.
Solution/Fix
After a few hours playing with the rules, observer and other core elements I found the problem. A big “thank you” goes to “myself” who posted the second comment for the issue mentioned above. The problem was within the CatalogRule Observer, when fetching the ID of the Customer Group. Here’s how to fix it:
1 – create the following folders in your Magento distro: app/code/local/Mage/CatalogRule/Model
2 – copy app/code/core/Mage/CatalogRule/Model/Observer.php to app/code/local/Mage/CatalogRule/Model
3 – open the new/copied file and go to line 105. Change this code:
if ($observer->hasCustomerGroupId()) {
$gId = $observer->getEvent()->getCustomerGroupId();
} elseif ($product->hasCustomerGroupId()) {
$gId = $product->hasCustomerGroupId();
} else {
$gId = Mage::getSingleton('customer/session')->getCustomerGroupId();
}
to:
if ($observer->hasCustomerGroupId()) {
$gId = $observer->getEvent()->getCustomerGroupId();
} elseif ($product->hasCustomerGroupId()) {
$gId = $product->getCustomerGroupId();
} else {
$gId = Mage::getSingleton('customer/session')->getCustomerGroupId();
}
To be more precise, you have to change hasCustomerGroupId to getCustomerGroupId on line 105.
You can now enjoy your store again!


Thanks for your fix. I came across the same issue.
There’s a little problem with your fix. Price rules for the group “NOT LOGGED IN” are not working. If you change line 105 to the following, everything works as it should be:
$gId = Mage::getSingleton(‘customer/session’)->getCustomerGroupId();
You can also comment out the second elseif part:
if ($observer->hasCustomerGroupId()) {
$gId = $observer->getEvent()->getCustomerGroupId();
//} elseif ($product->hasCustomerGroupId()) {
// $gId = $product->getCustomerGroupId();
} else {
$gId = Mage::getSingleton(‘customer/session’)->getCustomerGroupId();
}
If this works you’re realy da MAAAAAN
Thanks alot! ! you save my life~
Hi,
I have tried it but guess what… I am still using Magento 1.4.0.1 and there is no such exact code in Observer.php so I can’t change it
My problerm remains. I guess the file has been rewritten in version 1.4.1.
To bad because I’m to affraid to upgrade
Yes, 1.4.0.1 is different and everything should work fine on that version. Could you describe your problem? Is it the same as this one? Maybe your cron doesn’t work and rules aren’t applied, maybe you have another rule overwriting this rule, maybe some custom code… I do have other 1.4.0.1 (and 1.3.x.x) stores and they seem to be working fine.
Thank you very much for your research and the fix.
T H A N K Y O U ! ! ! ! !
My site is B2B with loads of discount rules and this has saved the day!
i would like to reproduce this error.
I would like to use “special Price” as “Per Month” price and but have magento add the “regular price” to the cart.
however, i’m using magento 1.3.2.4 and in the file there is only this;
“if ($observer->hasCustomerGroupId()) {
$gId = $observer->getEvent()->getCustomerGroupId();
} else {
$gId = Mage::getSingleton(‘customer/session’)->getCustomerGroupId();
}”
how can i reproduce this error, i tried cutting and pasting the original code you mention but it did not work.
thank you
@Cristi
Hi chris, thanks 4 the reply and sorry mine is late.
My problem is this:
When I create a bundle product, fi:
product A = $ 10
product B = $ 20
Together I give bundle discount of 10%.
So a little math tells us: 10 + 20 = 30 – 10% (3) = 27.
This GOOD price will show up in the detailed page but when a customer adds the bundled product to his cart Magento will charge the normal 30 instead of the discounted bundle price
Hope you get my point.
OK, I see what you mean. Have you tried to replicate the same problem to simple products (or any other type of products)? If this problem only applies to bundles, it might be a problem with that type of products, not with catalog rules.
Another way to test it would be to open Observer.php and see what
print_rshows for$productand$product->getSpecialPrice(). Everything related to catalog rules happens in that file – if the corresponding method is not triggered, there’s a problem with attaching the observer to the correct event or the event is not triggered at all.Another problem I found on the forums was with member groups – sometimes catalog price rules were not applied to “Not logged in” customers, but I wasn’t able to replicate it on my 1.4.0.1 installation.
Hope this helps…
Let me get into both ‘might be’ solutions
Otherwise I seriously have to think about upgrading to 1.4.1 or even better, a fresh install of the newest version.
I’ll get back to you
t.4.y.r.
@Cristi
Hello Cristi, I have this problem too in 1.4.0.1.
I created some catalogue price rules, and they are showing fine in the catalogue. But then suddenly (and this is not daily) when adding such a discounted product to the shopping cart, it is showing the old price…
When I go back and re-apply my price rules, it works fine again.
I noticed this by examining google analytics and searching for products that were added to shopping cart but not bought…
I’m losing customers with this problem – very annoying.
Can you help me out?
I don’t understand why the prices are showing correctly in the catalogue, but not in the shopping cart. Ant today I noticed that (apparently sometimes) the correct price is showing in the catalogue, but not in the product view and the shopping cart…
After applying the rules again, everything is working fine…
I don’t think this is a cron problem, is it?
Ilse, your problem might actually consist of several issues. Make sure you check the following:
- cron is scheduled and running correctly
- re-index everything
- refresh all cache
- if you are using 1.4.1.0 use the patch described in this post.
I had no problems with 1.4.0.1, so you should also check to see if you have any extensions that modify catalog rules or shopping cart rules – if you do, disable them for the moment, and test the store again. If there are no extensions, try a clean install on a staging environment and try to replicate the issue (adding minimal data to the store).
Good luck!
Thanks for the fix! Just started offering fixed discounts to some of my clients and found this error. Everything’s back on track now.
This works in 1.4.1.1 also. Thanks!
I am having problems with Shopping Cart Price Rules, specifically using conditions. I am trying to apply a simple conditional rule and it doesn’t seem to pick up. I tested a coupon code and that actually worked. However, using only conditionals didn’t work at all. I am using 1.4.1.1 and any help would be much appreciated. Thanks!
My first thought is that your conditions are wrong. Try a simple rule like if sku equals some sku of your product, offer 10% discount. save it, go to the frontend, add that product in the cart and check to see if it’s applied. It should be, but if it’s not, make sure you don’t have any extensions overwriting Shopping Cart rules.
Thank you so much.
Great work!
Best Regards
Hi, I can only say TTHHHAAANNNKKK YOU
Thanks, this solution works perfect…. But we i use catalogue pricerules, these rules Will be applied for à sort thime. When applied à rule everything is Oké, but after à few days cart is not showing correct prices anymore. When we noticed this, and apply THE rule again everything is fine ….. For à short time…. Does anyone have à solution for this?
Have you properly setup a cronjob for magento?
Great work. The fix works fine for me!
Wow..Cristi and Simon Lagendijk….thanks for you’re comments and great fix! I send you nothing but good vibes and good things to come for you guys! Made my day!
Hello
i use Magento ver. 1.3.2.3 and i have a problem with a shopping cart price rule.
1.i make a rule name for single client with discount 10% off with some coupon code.
2.in a first step in checkout page everything is look good (the prices and the discount)
3. In the last step of checkout page (payment page) the discount is not there
4. When i’m going to admin area i see this rule name is inactive…..
Any idea?
Hello Cristi, I almost forgot to answer (shame on me…)
Thanks for the help! In the end it was a cron problem. The reset to former prices happened at 12pm, the recalculation was set at 1am as default, but 1am was in my system 2 hours earlier – so at 11pm.
I noticed it by the datestamp in the database for the cronjobs. I have it running every hour now, and it is working fine…
@Ilse
Exact same thing with me. A couple of days fine, then it breaks. I hide the original price so they are really confused!
How I can check that shopping cart price rules are influenced by CRON ?
Today I got the same ‘it works yesterday, but stopped working today’ error. So I read that I need to configurate CRON job for my magento. I did it. But I don’t see any shopping price rules connected tasks in my cron_schedule table.
The only thing I see there is something about mails.
So how I can be sure that it would help me? Or maybe I need to do some additional steps to put this thing on the CRON?
Cron jobs are required if you want your store to work properly. It sends newsletters, generates sitemaps, indexes stuff, reapplies catalog rules and probably more that I’m missing now. Indeed there’s no indication of
catalogrule_apply_allin the crons tables. However, you can see it in Mage/CatalogRule/etc/config.xml:<jobs>
<catalogrule_apply_all>
<schedule><cron_expr>0 1 * * *</cron_expr></schedule>
<run><model>catalogrule/observer::dailyCatalogUpdate</model></run>
</catalogrule_apply_all>
</jobs>
Thanks so much, you rock Cristi
problem still exists:
For Magento 1.4.1.1, cart price rule like “10% off on payment method XY”. It works for logged in users, but not for “NOT LOGGED IN” users…
Applied the described fix, nothing changed.
Correction:
Has nothing to do with “NOT LOGGED IN” users. It only happens if I select more than one usergroup! Seems to have to do with payment method selecting in the rule…
Anyway. I could “solve” it temporarily by creating one cart rule for every user group.
Definitly annoying though…
this fix has nothing to do with logged in customers or multiple groups or anything else. it’s just about a typo in the code, preventing the rule to be applied in the cart. make sure to read the details/behavior section of the post.
for not logged in users, there might be something wrong with the condition, as not logged in user id is null (i think). i remember checking this one too, as I saw the bug several times on the forums, but I couldn’t find anything in the code – and also I haven’t run into it. yet.
David:
I’m having a similar issue to the one you posted. For some reason, I don’t seem to be able to add Payment Method as a rule in the shopping cart rules. It just freezes and sends me back to the main dashboard, without so much as an error log.
Cart rules are working otherwise fine on my 1.4.1.1 installation. If you run into any solution for this issue, let me know!
Thank you! Was having same issue on 1.4.1.1 – problem now solved with your fix
Thanks man, you saved me a heap of time and stress here.
Hi ,
This works for me also. Thank you very much for this solution. You saved me at key point.
Anyone else having any issue with Catalog price rules when applied to a category not working? Im on 1.4.1.1.
If I try to add a 50% discount it doesn’t do it at all. I’ve experience setting up other rules on other sites.
You are the man, my friend.
not work in 1.4.1.1.
THANK YOU VERY MUCH !!!!!!!!!!
I use 1.4.1.1. and your method fixed the problem !
I was beaking my balls on this one. Thank you so much.
Best regards
Thank you so much, this was driving me crazy. I have clients running magento 1.3 still just because each release that is “stable” is so fricken inconsitent and untested it is very frustrating.
You saved me hours of work messing with it. Thank you!!!
I did as instructed and it worked. However now it is not working again. Any ideas?
I bet there’s something in this comments thread that might come in handy so check it out
Thank you for this fix! I’ve been trying to fix this for a week and finally found your instructions. No more hate mail from my customers thinking we are trying to scam them!!! Thank you, Thank you, Thank you!!!!
I have the same problem as Sarah…
“I did as instructed and it worked. However now it is not working again.” Any ideas?
A cronjob is running every 5 minutes accessing cron.php… But no luck so far…
Hello Cristi, I googled to your thread since I am facing a strange problem. I am running a book-store on Magento 1.4.1.1 and faced the usual problems with the catalog price rules (including what you described) but after lot of digging through the forums, and setting up the cron and modifying the config.xml, the rules are working properly i.e they do not disappear after 2/3 days, quote price=special price in the cart etc. BUT the issue, I face now, is that when a customer buys a product, strangely the front catalog price starts showing the REGULAR price again !! when i check the price in the cart, it displays the discounted price (10% off) !! I have to manually save&apply the rule again to get back front price to special price. sorry for such a long one…just thought to share this and hoping for a fix.
Cheers, Santanu
Hey Santanu, what you described sounds very weird and I don’t have a fix since I can’t replicate it. So here what I would do:
* try disabling the cache and see if it’s not actually a caching problem
* same thing if you use flat catalog
* disable all custom & community extensions, ideally one by one, and see if this bug isn’t caused by that
if none of the above helps, try following the getPrice thread – check the code and see why the special price is not being applied. good luck!
I’m also having a nightmare with this, but my requirement is even simpler:
I want 10% discount on a few products when a customer is logged in. When I set it in the admin to ‘Logged In’ it doesn’t work. Then if I select ‘General’ and ‘Logged In’ the discount works, but it also works for those not logged in.
I think there’s probably an issue somewhere in the code which isn’t checking for logged in customers properly.
I’ve also noticed inconsistencies between the catalog prices and the shopping cart prices on the frontend. Any ideas?