Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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
                       ));
        }