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