예제 #1
0
 /**
  * @param Bronto_Api_Order $orderObject
  * @param array            $orderCache
  * @param array            $result
  *
  * @return array
  * @access protected
  */
 protected function _flushOrders($orderObject, $orderCache, $result)
 {
     // Get delivery results from order object
     $flushResult = $orderObject->flush();
     $flushCount = count($flushResult);
     // Log Order import flush process starting
     $this->_helper->writeDebug("  Flush resulted in {$flushCount} orders processed");
     $this->_helper->writeVerboseDebug('===== FLUSH =====', 'bronto_order_api.log');
     $this->_helper->writeVerboseDebug(var_export($orderObject->getApi()->getLastRequest(), true), 'bronto_order_api.log');
     $this->_helper->writeVerboseDebug(var_export($orderObject->getApi()->getLastResponse(), true), 'bronto_order_api.log');
     // Cycle through flush results and handle any errors that were returned
     foreach ($flushResult as $i => $flushResultRow) {
         if ($flushResultRow->hasError()) {
             $hasError = true;
             $errorCode = $flushResultRow->getErrorCode();
             $errorMessage = $flushResultRow->getErrorMessage();
         } else {
             $hasError = false;
             $errorCode = false;
             $errorMessage = false;
         }
         if (isset($orderCache[$i])) {
             /** @var Mage_Sales_Model_Order $order */
             $order = Mage::getModel('sales/order')->load($orderCache[$i]['orderId']);
             /** @var Mage_Core_Model_Store $store */
             $store = Mage::getModel('core/store')->load($orderCache[$i]['storeId']);
             /** @var Mage_Core_Model_Website $website */
             $website = Mage::getModel('core/website')->load($store->getWebsiteId());
             $storeMessage = "For `{$website->getName()}`:`{$store->getName()}`: ";
             /** @var Bronto_Order_Model_Queue $orderRow */
             $orderRow = Mage::getModel('bronto_order/queue')->getOrderRow($order->getId(), $order->getQuoteId(), $order->getStoreId());
         } else {
             if ($hasError) {
                 Mage::helper('bronto_order')->writeError("[{$errorCode}] {$errorMessage}");
                 $result['error']++;
             }
             continue;
         }
         if ($hasError) {
             // If error code is 915, try to pull customer email address
             if (915 == $errorCode) {
                 if ($customerEmail = $order->getCustomerEmail()) {
                     $errorMessage = "Invalid Email Address: `{$customerEmail}`";
                 } else {
                     $errorMessage = "Email Address is empty for this order";
                 }
             }
             // Append order id to message to assist troubleshooting
             $errorMessage .= " (Order #: {$order->getIncrementId()})";
             // Log and Display error message
             $this->_helper->writeError("[{$errorCode}] {$storeMessage}{$errorMessage}");
             // Reset Bronto Import status
             $orderRow->setBrontoImported(null)->setBrontoSuppressed($errorMessage)->save();
             // Increment number of errors
             $result['error']++;
         } else {
             $orderRow->setBrontoImported(Mage::getSingleton('core/date')->gmtDate());
             $orderRow->save();
             // Increment number of successes
             $result['success']++;
         }
     }
     return $result;
 }