/** * Process cron task * * @param Mage_Cron_Model_Schedule $schedule * @param $jobConfig * @param bool $isAlways * @return Mage_Cron_Model_Observer */ protected function _processJob($schedule, $jobConfig, $isAlways = false) { $runConfig = $jobConfig->run; if (!$isAlways) { $scheduleLifetime = Mage::getStoreConfig(self::XML_PATH_SCHEDULE_LIFETIME) * 60; $now = time(); $time = strtotime($schedule->getScheduledAt()); if ($time > $now) { return; } } $errorStatus = Mage_Cron_Model_Schedule::STATUS_ERROR; try { if (!$isAlways) { if ($time < $now - $scheduleLifetime) { $errorStatus = Mage_Cron_Model_Schedule::STATUS_MISSED; Mage::throwException(Mage::helper('cron')->__('Too late for the schedule.')); } } if ($runConfig->model) { if (!preg_match(self::REGEX_RUN_MODEL, (string) $runConfig->model, $run)) { Mage::throwException(Mage::helper('cron')->__('Invalid model/method definition, expecting "model/class::method".')); } if (!($model = Mage::getModel($run[1])) || !method_exists($model, $run[2])) { Mage::throwException(Mage::helper('cron')->__('Invalid callback: %s::%s does not exist', $run[1], $run[2])); } $callback = array($model, $run[2]); $arguments = array($schedule); } if (empty($callback)) { Mage::throwException(Mage::helper('cron')->__('No callbacks found')); } if (!$isAlways) { if (!$schedule->tryLockJob()) { // another cron started this job intermittently, so skip it return; } /** though running status is set in tryLockJob we must set it here because the object was loaded with a pending status and will set it back to pending if we don't set it here */ //$schedule->setStatus(Mage_Cron_Model_Schedule::STATUS_RUNNING); } $schedule->setExecutedAt(strftime('%Y-%m-%d %H:%M:%S', time()))->save(); call_user_func_array($callback, $arguments); $schedule->setStatus(Mage_Cron_Model_Schedule::STATUS_SUCCESS)->setFinishedAt(strftime('%Y-%m-%d %H:%M:%S', time())); } catch (Exception $e) { $schedule->setStatus($errorStatus)->setMessages($e->__toString()); } $schedule->save(); return $this; }
/** * Run an import through a cron job * @param Aoe_Scheduler_Model_Schedule|Mage_Cron_Model_Schedule $cron */ public function process(Mage_Cron_Model_Schedule $cron) { //initialize the translations so that we are able to translate things. Mage::app()->loadAreaPart(Mage_Core_Model_App_Area::AREA_ADMINHTML, Mage_Core_Model_App_Area::PART_TRANSLATE); $cronName = $cron->getJobCode(); $profile = str_replace('ho_import_', '', $cronName); $logHelper = Mage::helper('ho_import/log'); try { /** @var Ho_Import_Model_Import $import */ $import = Mage::getModel('ho_import/import'); $import->setProfile($profile); $import->process(); } catch (Exception $e) { $logHelper->log($logHelper->getExceptionTraceAsString($e), Zend_Log::CRIT); $cron->setStatus($cron::STATUS_ERROR); } $logHelper->done(); }
/** * Process cron task * * @param Mage_Cron_Model_Schedule $schedule * @param $jobConfig * @param bool $isAlways * @return Mage_Cron_Model_Observer */ protected function _processJob($schedule, $jobConfig, $isAlways = false) { $runConfig = $jobConfig->run; if (!$isAlways) { $scheduleLifetime = Mage::getStoreConfig(self::XML_PATH_SCHEDULE_LIFETIME) * 60; $now = time(); $time = strtotime($schedule->getScheduledAt()); if ($time > $now) { return; } } $errorStatus = Mage_Cron_Model_Schedule::STATUS_ERROR; try { if (!$isAlways) { if ($time < $now - $scheduleLifetime) { $errorStatus = Mage_Cron_Model_Schedule::STATUS_MISSED; Mage::throwException(Mage::helper('cron')->__('Too late for the schedule.')); } } // Aoe_Scheduler: stuff from the original method was removed and refactored into the schedule module /* @var $schedule Aoe_Scheduler_Model_Schedule */ $schedule->runNow(!$isAlways); } catch (Exception $e) { $schedule->setStatus($errorStatus)->setMessages($e->__toString()); // Aoe_Scheduler: additional handling: Mage::dispatchEvent('cron_' . $schedule->getJobCode() . '_exception', array('schedule' => $schedule, 'exception' => $e)); Mage::dispatchEvent('cron_exception', array('schedule' => $schedule, 'exception' => $e)); Mage::helper('aoe_scheduler')->sendErrorMail($schedule, $e->__toString()); } $schedule->save(); return $this; }
public function registerCreditmemos(Mage_Cron_Model_Schedule $schedule) { $helper = $this->getHelper(); $result = array('registered' => array(), 'errors' => array()); foreach (Mage::app()->getStores() as $store) { /** @var Mage_Core_Model_Store $store */ if (!$helper->isActive($store)) { continue; } $api = $helper->getApi($store); $limit = max(intval($helper->getConfig('register_creditmemos_batch', $store)), 25); /** @var Mage_Sales_Model_Resource_Order_Creditmemo_Collection $creditmemos */ $creditmemos = Mage::getSingleton('sales/order_creditmemo')->getCollection(); $creditmemos->addFieldToFilter('store_id', $store->getId()); $creditmemos->addFieldToFilter('avatax_document', array('null' => true)); $creditmemos->addOrder('updated_at', 'ASC'); if ($limit) { $creditmemos->setPageSize($limit); } foreach ($creditmemos as $creditmemo) { /** @var Mage_Sales_Model_Order_Creditmemo $creditmemo */ try { $helper->registerCreditmemo($api, $creditmemo); $result['registered'][] = $creditmemo->getIncrementId(); } catch (Exception $e) { $result['errors'][] = $e->getMessage(); if ($e instanceof Aoe_AvaTax_Exception && count($e->getAvaTaxMessages())) { foreach ($e->getAvaTaxMessages() as $message) { $result['errors'][] = $message; } } try { $creditmemo->setDataChanges(true); $creditmemo->addComment('Failed to register creditmemo with AvaTax: ' . $e->getMessage()); $creditmemo->save(); $creditmemo->getOrder()->addStatusHistoryComment('Failed to register creditmemo with AvaTax: ' . $e->getMessage()); $creditmemo->getOrder()->save(); } catch (Exception $e2) { $result['errors'][] = $e2->getMessage(); Mage::logException($e2); } Mage::logException($e); } } } if (count($result['errors'])) { $schedule->setStatus(Mage_Cron_Model_Schedule::STATUS_ERROR); } elseif (!count($result['registered'])) { $schedule->setStatus('nothing'); } return $result; }