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); }
/** * @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; }