예제 #1
0
파일: Config.php 프로젝트: buttasg/cowgirlk
 /**
  * @param int $storeId
  * @return Shopgate_Framework_Model_Config
  */
 public function getConfig($storeId = null)
 {
     if (!$this->_config) {
         $this->_config = Mage::getModel('shopgate/config');
         $this->_config->loadConfig($storeId);
     }
     return $this->_config;
 }
예제 #2
0
 /**
  * full cancel of the order at shopgate
  * $data["order"] should set with an object of Mage_Sales_Model_Order
  * called on event "order_cancel_after"
  * called from Mage_Sales_Model_Order::cancel()
  * Uses the cancle_order action in ShopgateMerchantApi
  *
  * @see http://wiki.shopgate.com/Merchant_API_cancel_order
  * @param Varien_Event_Observer $observer
  * @return bool
  */
 public function cancelOrder(Varien_Event_Observer $observer)
 {
     /* @var $order Mage_Sales_Model_Order */
     $order = $observer->getEvent()->getOrder();
     /* @var $shopgateOrder Shopgate_Framework_Model_Shopgate_Order */
     $shopgateOrder = Mage::getModel("shopgate/shopgate_order")->load($order->getId(), "order_id");
     if (!$shopgateOrder->getId()) {
         return true;
     }
     if ($order instanceof Mage_Sales_Model_Order) {
         try {
             $orderNumber = $shopgateOrder->getShopgateOrderNumber();
             $this->_initMerchantApi($order->getStoreId());
             // Do nothing if plugin is not active for this store
             if (!Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_ACTIVE, $this->_config->getStoreViewId())) {
                 return true;
             }
             if (!$this->_config->isValidConfig()) {
                 return true;
             }
             $cancellationItems = array();
             $qtyCancelled = 0;
             $rd = $shopgateOrder->getShopgateOrderObject();
             $orderItems = $order->getItemsCollection();
             $rdItem = false;
             foreach ($orderItems as $orderItem) {
                 /**  @var $orderItem Mage_Sales_Model_Order_Item */
                 if ($rd instanceof ShopgateOrder) {
                     $rdItem = $this->_findItemByProductId($rd->getItems(), $orderItem->getData('product_id'));
                 }
                 if ($orderItem->getProductType() != Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE && $orderItem->getQtyCanceled() + $orderItem->getQtyRefunded() > 0 && !$orderItem->getIsVirtual() && $rdItem) {
                     $cancellationItems[] = array("item_number" => $rdItem->getItemNumber(), "quantity" => intval($orderItem->getQtyCanceled()) + intval($orderItem->getQtyRefunded()));
                     $qtyCancelled += intval($orderItem->getQtyCanceled()) + intval($orderItem->getQtyRefunded());
                 }
             }
             if (count($orderItems) > 0 && empty($cancellationItems)) {
                 $order->addStatusHistoryComment('[SHOPGATE] Notice: Credit memo was not sent to Shopgate because no product quantity was affected.');
                 $order->save();
                 return true;
             }
             $fullCancellation = empty($cancellationItems);
             $fullCancellation = $fullCancellation || $qtyCancelled == $order->getTotalQtyOrdered();
             $cancelShippingCosts = !$shopgateOrder->hasShippedItems($order);
             /** @var Mage_Sales_Model_Order_Creditmemo $creditMemo */
             $creditMemo = $observer->getEvent()->getCreditMemo();
             if ($creditMemo) {
                 if ($creditMemo->getShippingAmount() == $order->getShippingAmount()) {
                     $cancelShippingCosts = true;
                 } else {
                     $cancelShippingCosts = false;
                 }
             }
             $this->_merchantApi->cancelOrder($shopgateOrder->getShopgateOrderNumber(), $fullCancellation, $cancellationItems, $cancelShippingCosts, "Order was cancelled in Shopsystem!");
             Mage::getSingleton('core/session')->addSuccess(Mage::helper("shopgate")->__("[SHOPGATE] Order successfully cancelled at Shopgate."));
             $shopgateOrder->setIsCancellationSentToShopgate(true);
             $shopgateOrder->save();
             if (!$shopgateOrder->getIsSentToShopgate() && !$this->_completeShipping($shopgateOrder, $order)) {
                 $this->_logShopgateError("! (#{$orderNumber})  not sent to shopgate and shipping not complete", ShopgateLogger::LOGTYPE_ERROR);
             }
         } catch (ShopgateMerchantApiException $e) {
             if ($e->getCode() == "222") {
                 // order already canceled in shopgate
                 $shopgateOrder->setIsCancellationSentToShopgate(true);
                 $shopgateOrder->save();
             } else {
                 // Received error from shopgate server
                 Mage::getSingleton('core/session')->addError(Mage::helper("shopgate")->__("[SHOPGATE] An error occured while trying to cancel the order at Shopgate.<br />Please contact Shopgate support."));
                 Mage::getSingleton('core/session')->addError("Error: {$e->getCode()} - {$e->getMessage()}");
                 $this->_logShopgateError("! (#{$orderNumber})  SMA-Error on cancel order! Message: {$e->getCode()} -\n                     {$e->getMessage()}", ShopgateLogger::LOGTYPE_ERROR);
                 $this->_logShopgateError("! (#{$orderNumber})  SMA-Error on cancel order! Message: {$e->getCode()} -\n                     {$e->getMessage()}", ShopgateLogger::LOGTYPE_DEBUG);
             }
         } catch (Exception $e) {
             Mage::getSingleton('core/session')->addError(Mage::helper("shopgate")->__("[SHOPGATE] An unknown error occured!<br />Please contact Shopgate support."));
             $this->_logShopgateError("! (#{$orderNumber})  SMA-Error on cancel order! Message: {$e->getCode()} -\n                     {$e->getMessage()}", ShopgateLogger::LOGTYPE_ERROR);
             $this->_logShopgateError("! (#{$orderNumber})  SMA-Error on cancel order! Message: {$e->getCode()} -\n                     {$e->getMessage()}", ShopgateLogger::LOGTYPE_DEBUG);
         }
     }
 }
예제 #3
0
 /**
  * Get cached header js for redirect or load and save to cache
  *
  * @param $type  string
  * @param $objId string|int
  * @param $automaticRedirect
  * @return mixed|string|void
  */
 protected function _getCachedJsHeaderByType($type, $objId, $automaticRedirect)
 {
     $storeViewId = $this->_config->getStoreViewId();
     switch ($type) {
         case self::CATEGORY:
             $cacheKey = $storeViewId . '_sg_mobile_category_' . $objId . '_redirect_type_' . intval($automaticRedirect);
             break;
         case self::PRODUCT:
             $cacheKey = $storeViewId . '_sg_mobile_item_' . $objId . '_redirect_type_' . intval($automaticRedirect);
             break;
         case self::PAGE:
             $cacheKey = $storeViewId . '_sg_mobile_page_' . $objId . '_redirect_type_' . intval($automaticRedirect);
             break;
         case self::SEARCH:
             $cacheKey = $storeViewId . '_sg_mobile_catalogsearch_' . md5($objId) . '_redirect_type_' . intval($automaticRedirect);
             break;
         case self::INDEX:
             $cacheKey = $storeViewId . '_sg_mobile_index_redirect_type_' . intval($automaticRedirect);
             break;
         default:
             $cacheKey = $storeViewId . '_sg_mobile_default_type_' . intval($automaticRedirect);
             break;
     }
     $cache = Mage::app()->getCacheInstance();
     $value = $cache->load($cacheKey);
     if ($value !== false) {
         $jsHeader = unserialize($value);
     } else {
         $builder = new ShopgateBuilder($this->_config);
         $shopgateRedirect = $builder->buildRedirect();
         if (!in_array(Mage::app()->getRequest()->getControllerName(), array(self::CATEGORY, self::PRODUCT, self::SEARCH, self::INDEX)) && !Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_ENABLE_DEFAULT_REDIRECT)) {
             $shopgateRedirect->suppressRedirect();
         }
         $disabledRoutes = explode(',', Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_DISABLE_REDIRECT_ROUTES));
         $route = Mage::app()->getRequest()->getRouteName();
         if (in_array($route, $disabledRoutes)) {
             $shopgateRedirect->suppressRedirect();
         }
         $disabledControllers = explode(',', Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_DISABLE_REDIRECT_CONTROLLERS));
         $controllerName = Mage::app()->getRequest()->getControllerName();
         if (in_array($controllerName, $disabledControllers)) {
             $shopgateRedirect->suppressRedirect();
         }
         if ($controllerName == 'product') {
             $productId = Mage::app()->getRequest()->getParam('id');
             $disabledProducts = explode(',', Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_DISABLE_REDIRECT_PRODUCTS));
             if (in_array($productId, $disabledProducts)) {
                 $shopgateRedirect->suppressRedirect();
             }
         }
         if ($controllerName == 'category') {
             $categoryId = Mage::app()->getRequest()->getParam('id');
             $disabledCategories = explode(',', Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_DISABLE_REDIRECT_CATEGORIES));
             if (in_array($categoryId, $disabledCategories)) {
                 $shopgateRedirect->suppressRedirect();
             }
         }
         switch ($type) {
             case self::CATEGORY:
                 $jsHeader = $shopgateRedirect->buildScriptCategory($objId, $automaticRedirect);
                 break;
             case self::PRODUCT:
                 $jsHeader = $shopgateRedirect->buildScriptItem($objId, $automaticRedirect);
                 break;
             case self::PAGE:
                 $jsHeader = $shopgateRedirect->buildScriptCms($objId, $automaticRedirect);
                 break;
             case self::SEARCH:
                 $jsHeader = $shopgateRedirect->buildScriptSearch($objId, $automaticRedirect);
                 break;
             case self::INDEX:
                 $jsHeader = $shopgateRedirect->buildScriptShop($automaticRedirect);
                 break;
             default:
                 $jsHeader = $shopgateRedirect->buildScriptDefault($automaticRedirect);
                 break;
         }
         $cache->save(serialize($jsHeader), $cacheKey, array('shopgate_mobile_redirect', Mage_Core_Model_Layout_Update::LAYOUT_GENERAL_CACHE_TAG), 7200);
     }
     return $jsHeader;
 }