public function updateOrder(ShopgateOrder $order)
 {
     $shopgateOrder = PSShopgateOrder::instanceByOrderNumber($order->getOrderNumber());
     if (!Validate::isLoadedObject($shopgateOrder)) {
         throw new ShopgateLibraryException(ShopgateLibraryException::PLUGIN_ORDER_NOT_FOUND, 'Order not found', true);
     }
     $order_states = array();
     if ($order->getUpdatePayment() && $order->getIsPaid()) {
         array_push($order_states, $this->getOrderStateId('PS_OS_PAYMENT'));
     }
     if ($order->getUpdateShipping() && !$order->getIsShippingBlocked()) {
         array_push($order_states, $this->getOrderStateId('PS_OS_PREPARATION'));
     }
     if (count($order_states)) {
         $ps_order = new Order($shopgateOrder->id_order);
         foreach ($order_states as $id_order_state) {
             if (version_compare(_PS_VERSION_, '1.4.1.0', '<')) {
                 $history = new OrderHistory();
                 $history->id_order = (int) $shopgateOrder->id_order;
                 $history->changeIdOrderState((int) $id_order_state, (int) $shopgateOrder->id_order);
             } else {
                 $ps_order->setCurrentState($id_order_state);
             }
         }
     }
     return array('external_order_id' => $shopgateOrder->id_order, 'external_order_number' => $shopgateOrder->id_order);
 }
Esempio n. 2
0
 /**
  * @param Mage_Sales_Model_Order $magentoOrder
  * @param ShopgateOrder          $shopgateOrder
  *
  * @return Mage_Sales_Model_Order
  */
 protected function _setOrderState($magentoOrder, $shopgateOrder)
 {
     $magentoOrder = $this->_getFactory()->setOrderStatus($magentoOrder);
     if ($magentoOrder->getShopgateStatusSet()) {
         //do nothing, but we will need to pull this whole thing inside factory
     } elseif ($shopgateOrder->getPaymentMethod() == ShopgateOrder::PREPAY && !$shopgateOrder->getIsPaid()) {
         $classExists = mageFindClassFile("Mage_Payment_Model_Method_Banktransfer");
         if ($classExists !== false && Mage::getStoreConfigFlag("payment/banktransfer/active")) {
             return $magentoOrder;
         } else {
             if ((Mage::getConfig()->getModuleConfig("Phoenix_BankPayment")->is('active', 'true') || Mage::getConfig()->getModuleConfig('Mage_BankPayment')->is('active', 'true')) && Mage::getStoreConfig('payment/bankpayment/order_status')) {
                 $status = Mage::getStoreConfig('payment/bankpayment/order_status');
                 $state = $this->_getHelper()->getStateForStatus($status);
                 $magentoOrder->setState($state, $status);
             } else {
                 if (!Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_ORDER_MARK_UNBLOCKED_AS_PAID)) {
                     if ($magentoOrder->getState() != Mage_Sales_Model_Order::STATE_HOLDED) {
                         $magentoOrder->setHoldBeforeState($magentoOrder->getState());
                         $magentoOrder->setHoldBeforeStatus($magentoOrder->getStatus());
                     }
                     $magentoOrder->setState(Mage_Sales_Model_Order::STATE_HOLDED, Mage_Sales_Model_Order::STATE_HOLDED);
                 } else {
                     $oldStatus = $shopgateOrder->getIsPaid();
                     $shopgateOrder->setIsPaid(true);
                     $magentoOrder->addStatusHistoryComment($this->_getHelper()->__("[SHOPGATE] Set order as paid because shipping is not blocked and config is set to 'mark unblocked orders as paid'!"), false)->setIsCustomerNotified(false);
                     $magentoOrder = $this->_setOrderPayment($magentoOrder, $shopgateOrder);
                     $shopgateOrder->setIsPaid($oldStatus);
                 }
             }
         }
     } else {
         $stateObject = new Varien_Object();
         $methodInstance = $magentoOrder->getPayment()->getMethodInstance();
         if ($shopgateOrder->getPaymentMethod() != ShopgateOrder::AMAZON_PAYMENT && strpos($shopgateOrder->getPaymentMethod(), 'PAYONE') === false) {
             // avoid calling order on amazon payment again
             $methodInstance->initialize($methodInstance->getConfigData('payment_action'), $stateObject);
         }
         if (!$stateObject->getState()) {
             $status = $methodInstance->getConfigData("order_status");
             if ($shopgateOrder->getPaymentMethod() == ShopgateOrder::COD && Mage::getConfig()->getModuleConfig('Phoenix_CashOnDelivery')->is('active', 'true')) {
                 $stateObject->setState(Mage_Sales_Model_Order::STATE_NEW);
             } else {
                 $stateObject->setState($this->_getHelper()->getStateForStatus($status));
             }
             $stateObject->setStatus($status);
         }
         $magentoOrder->setState($stateObject->getState(), $stateObject->getStatus());
         if (Mage::getStoreConfig(Shopgate_Framework_Model_Config::XML_PATH_SHOPGATE_ORDER_MARK_UNBLOCKED_AS_PAID) && !$shopgateOrder->getIsPaid() && $shopgateOrder->getPaymentMethod() != ShopgateOrder::BILLSAFE) {
             $oldStatus = $shopgateOrder->getIsPaid();
             $shopgateOrder->setIsPaid(true);
             $magentoOrder->addStatusHistoryComment($this->_getHelper()->__("[SHOPGATE] Set order as paid because shipping is not blocked and config is set to 'mark unblocked orders as paid'!"), false)->setIsCustomerNotified(false);
             $magentoOrder = $this->_setOrderPayment($magentoOrder, $shopgateOrder);
             $shopgateOrder->setIsPaid($oldStatus);
         }
     }
     $magentoOrder->save();
     return $magentoOrder;
 }