/// <summary> /// Sets shipment state for order items. /// Use this method when you use your own transporter. /// </summary> /// <param name="orderItemIds">The order item ids.</param> /// <param name="transporterCode">The transporter code.</param> /// <param name="trackingCode">The tracking code.</param> /// <returns>StatusResponse.</returns> public async Task <IEnumerable <StatusResponse> > ShipOrderItemsAsync( IEnumerable <string> orderItemIds, TransporterCode transporterCode, string trackingCode) { var result = new List <StatusResponse>(); var orderItems = orderItemIds.Select(oi => new ItemId(oi)); foreach (var orderItem in orderItems) { var shipmentRequest = new ShipmentRequest() { OrderItems = new[] { orderItem }, Transport = new TransportInstruction() { TransporterCode = transporterCode.TransporterCodeValue, TrackAndTrace = trackingCode } }; result.Add( await GetApiResult <StatusResponse>( HttpMethod.Put, $"{EndPoints.BaseUriApiCalls}{EndPoints.Orders}/shipment", shipmentRequest ) ); } return(result); }
/// <summary> /// Sets the shipment state for a complete order. /// To do this, first the detailed order info is fetched. /// Keep this into account with the rate limits. /// Also, only use this method when you use your own transporter. /// </summary> /// <param name="orderId">The order identifier.</param> /// <param name="transporterCode">The transporter code.</param> /// <param name="trackingCode">The tracking code.</param> /// <returns>StatusResponse.</returns> /// <exception cref="NoOrderItemsInOrderException">No order items found in order {orderId}.</exception> public async Task <IEnumerable <StatusResponse> > ShipOrderAsync( string orderId, TransporterCode transporterCode, string trackingCode) { var orderItemIds = await GetOrderItemIdsAsync(orderId); if (orderItemIds?.Any() != true) { throw new NoOrderItemsInOrderException($"No order items found in order {orderId}."); } return(await ShipOrderItemsAsync( orderItemIds, transporterCode, trackingCode )); }