Exemplo n.º 1
0
 /**
  * @param int $order_number
  * @return ShopgateOrderPrestashop
  */
 public static function loadByOrderNumber($order_number = 0)
 {
     $result = ShopgateOrderPrestashop::getIdShopgateOrderByFilter('order_number', $order_number);
     return new ShopgateOrderPrestashop($result);
 }
Exemplo n.º 2
0
 /**
  * @param ShopgateOrder $order
  *
  * @return array
  * @throws ShopgateLibraryException
  */
 public function updateOrder(ShopgateOrder $order)
 {
     $paymentModel = new ShopgatePayment($this->getModule());
     $shopgateOrderItem = ShopgateOrderPrestashop::loadByOrderNumber($order->getOrderNumber());
     if (!Validate::isLoadedObject($shopgateOrderItem)) {
         throw new ShopgateLibraryException(ShopgateLibraryException::PLUGIN_ORDER_NOT_FOUND, 'Order not found #' . $order->getOrderNumber(), true);
     }
     /** @var OrderCore $coreOrder */
     $coreOrder = new Order($shopgateOrderItem->id_order);
     /**
      * get order states
      */
     $changedStates = $paymentModel->getOrderStateId($order, false);
     /**
      * apply changed states
      */
     foreach ($changedStates as $changedState) {
         $coreOrder->setCurrentState($changedState);
     }
     $shopgateOrderItem->updateFromOrder($order);
     $shopgateOrderItem->save();
     return array('external_order_id' => $shopgateOrderItem->id_order, 'external_order_number' => $shopgateOrderItem->id_order);
 }
Exemplo n.º 3
0
 /**
  * Triggered by cron job set_shipping_completed to sync shipments for orders
  * that were most likely update by ERP systems.
  *
  * @param string         $message
  * @param int            $errorcount
  */
 public function setOrderShippingCompleted(&$message, &$errorcount)
 {
     $unsyncedOrders = ShopgateOrderPrestashop::getUnsyncedShopgatOrderIds($this->getLanguageId());
     foreach ($unsyncedOrders as $unsyncedOrder) {
         $this->log("Try to set shipping completed for order with shopgate-order-number #{$unsyncedOrder['order_number']}", ShopgateLogger::LOGTYPE_DEBUG);
         $sgOrder = ShopgateOrderPrestashop::loadByOrderId($unsyncedOrder['id_order']);
         $sgOrder->setShippingComplete($message, $errorcount);
     }
 }
Exemplo n.º 4
0
 /**
  * This method gets called when the order status is changed in the admin area of the Prestashop backend
  *
  * @param $params
  */
 public function hookUpdateOrderStatus($params)
 {
     $id_order = $params['id_order'];
     $newOrderState = $params['newOrderStatus'];
     $shopgateOrder = ShopgateOrderPrestashop::loadByOrderId($id_order);
     $shopgateConfig = new ShopgateConfigPrestashop();
     $cancellationStatus = Configuration::get('SG_CANCELLATION_STATUS');
     $shopgateBuilder = new ShopgateBuilder($shopgateConfig);
     $shopgateMerchantApi = $shopgateBuilder->buildMerchantApi();
     if (!is_object($shopgateOrder) || !$shopgateOrder->id_shopgate_order) {
         return;
     }
     try {
         $shippedOrderStates = array();
         if (version_compare(_PS_VERSION_, '1.5.0.0', '>=')) {
             $orderStates = OrderState::getOrderStates($this->context->language->id);
             foreach ($orderStates as $orderState) {
                 if ($orderState['shipped']) {
                     $shippedOrderStates[$orderState['id_order_state']] = 1;
                 }
             }
         } else {
             // Default methods for Prestashop version < 1.5.0.0
             $shippedOrderStates[_PS_OS_DELIVERED_] = 1;
             $shippedOrderStates[_PS_OS_SHIPPING_] = 1;
         }
         if (!empty($shippedOrderStates[$newOrderState->id])) {
             $shopgateMerchantApi->setOrderShippingCompleted($shopgateOrder->order_number);
         }
         $message = '';
         if ($cancellationStatus == $newOrderState->id) {
             $shopgateOrder->cancelOrder($message);
         }
     } catch (ShopgateMerchantApiException $e) {
         $msg = new Message();
         $msg->message = $this->l('On order state') . ': ' . $orderState->name . ' - ' . $this->l('Shopgate status was not updated because of following error') . ': ' . $e->getMessage();
         $msg->id_order = $id_order;
         $msg->id_employee = isset($params['cookie']->id_employee) ? $params['cookie']->id_employee : 0;
         $msg->private = true;
         $msg->add();
     }
 }