Magento catalog price rule disappears at night

Mehak picture Mehak · Aug 13, 2014 · Viewed 11.6k times · Source

I have developed the online store on magento platform. Everything works fine except the Catalog price rule for sale. I have created the simple rule that applies 15% discount on all products. When I save and apply the rule, it works fine the whole day. But after 12 at night, the sale is no more visible. I tried to apply the rules from the admin panel by clicking on apply rules, but at night it does not even allow me to apply rules manually. I can apply the rule next day in the morning and the it works fine but again till 12 am.

I have tried the following. I have removed the special prices that were defined separately on products, so the sale is implemented only by price rule. I have set the cron job but it also does not work at night. I have check the date and timings for the rules.

I found that it could be because of time settings. I am using GMT+5. Is there anything that can be done to keep the rule working for day and night.

Thanks

Answer

Alexei Yerofeyev picture Alexei Yerofeyev · Aug 13, 2014

Yes, this is a bug in Magento (or some logic beyond my understanding). When Magento displays products on frontend, it checks if there are catalog rules for this date. And the date used for this check is your local, so in your case GMT+5. However, when catalog rules are being applied, it uses GMT date. So that means that you aren't able to apply rules until 5 AM.

The problem is in Mage_CatalogRule_Model_Action_Index_Refresh::execute() method. You will have to rewrite this function/class either in your extension, or via the local version of the file.

File location: app/code/core/Mage/CatalogRule/Model/Action/Index/Refresh.php

You have to replace line 121:

$timestamp = $coreDate->gmtTimestamp('Today');

with this line:

$timestamp = Mage::app()->getLocale()->date(null, null, null, true)->get(Zend_Date::TIMESTAMP);

After that you should be able to apply the rules.