Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
0
 /**
  * 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();
 }
Ejemplo n.º 3
0
 /**
  * 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;
 }
Ejemplo n.º 4
0
 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;
 }