/** * @param ErpShipmentEntity $erpShipment * @param ShopifyOrderEntity $shopifyOrder */ public function setFulfilledItems(ErpShipmentEntity $erpShipment, ShopifyOrderEntity $shopifyOrder) { /** @var ErpOrderItemEntity $item */ foreach ($erpShipment->getShipmentItems() as $item) { /** @var ShopifyOrderLineItemEntity $shopifyItem */ foreach ($shopifyOrder->getItems() as $shopifyItem) { if ($item->getSku() == $shopifyItem->getSku()) { $shopifyItem->setIsFulfilled(1); } } } }
/** * @param StoreEntity $store * @param ErpOrderEntity $erpOrder * @return ErpShipmentEntity * @throws ErpShipmentNotFound */ public function getShipment(StoreEntity $store, ErpOrderEntity $erpOrder) { $request = $this->client->createRequest('GET', sprintf('%s/shipments/?order=%s', $store->getErpUrl(), $erpOrder->getOrderId()), ['auth' => [$store->getErpUsername(), $store->getErpPassword()]]); try { $response = $this->sendRequest($request)->xml(); } catch (\Exception $e) { throw new ErpShipmentNotFound(sprintf('Not shipment can be found with the order id %s', $erpOrder->getOrderId())); } return ErpShipmentEntity::createFromShipmentXMLObject($response); }
/** * @param StoreEntity $store * @param ShopifyOrderEntity $shopifyOrder * @param ErpShipmentEntity $erpShipment * @throws \Exception */ public function updateOrCreateFulfillments(StoreEntity $store, ShopifyOrderEntity $shopifyOrder, ErpShipmentEntity $erpShipment) { $this->setSettings($store); $fulFilledItems = []; /** @var ShopifyOrderLineItemEntity $item */ foreach ($shopifyOrder->getItems() as $item) { if ($item->isFulfilled()) { $fulfilled = new \stdClass(); $fulfilled->id = $item->getId(); $fulFilledItems[] = $fulfilled; } } if ($erpShipment->getTrackingNumbers() && empty($fulFilledItems)) { throw new \Exception('Error: something is wrong here, got tracking numbers but no fulfilled items?'); } $fulfillmentData = ['tracking_number' => $erpShipment->getTrackingNumbers(), 'line_items' => $fulFilledItems]; if ($shopifyOrder->getFulfillmentId()) { $this->client->createFulfillment(['order_id' => $shopifyOrder->getId(), 'fulfillment' => $fulfillmentData]); } else { $this->client->updateFulfillment(['order_id' => $shopifyOrder->getId(), 'id' => $shopifyOrder->getFulfillmentId(), 'fulfillment' => $fulfillmentData]); } }