public CreateShipmentResponse CreateInboundShipment(CreateShipmentRequest createShipmentRequest)
        {
            Address shipsFromAddress = AddressUtility.GetShipFromAddress();

            CreateShipmentResponse createShipmentResponse = null;

            List <InboundShipmentPlanRequestItem> shipmentPlanRequestItems = createShipmentRequest
                                                                             .ShipmentItems
                                                                             .Select(s =>
                                                                                     new InboundShipmentPlanRequestItem
            {
                ASIN           = s.Asin,
                SellerSKU      = s.Sku,
                Quantity       = s.Quantity,
                Condition      = ItemCondition.NewItem.ToString(),
                QuantityInCase = s.QuantityInCase ?? 0
            })
                                                                             .ToList();

            InboundShipmentPlanRequestItemList inboundShipmentPlanRequestItemList = new InboundShipmentPlanRequestItemList
            {
                member = shipmentPlanRequestItems
            };

            CreateInboundShipmentPlanRequest createInboundShipmentPlanRequest = new CreateInboundShipmentPlanRequest
            {
                InboundShipmentPlanRequestItems = inboundShipmentPlanRequestItemList,
                Marketplace     = m_marketPlaceId,
                SellerId        = m_sellerId,
                ShipFromAddress = shipsFromAddress
            };

            CreateInboundShipmentPlanResponse createInboundShipmentPlanResponse = m_fbaInboundServiceMwsClient.CreateInboundShipmentPlan(createInboundShipmentPlanRequest);

            CreateInboundShipmentPlanResult createInboundShipmentPlanResult = createInboundShipmentPlanResponse.CreateInboundShipmentPlanResult;

            if (createInboundShipmentPlanResult.InboundShipmentPlans.member.Any())
            {
                List <InboundShipmentPlan> inboundShipmentPlans = createInboundShipmentPlanResult
                                                                  .InboundShipmentPlans
                                                                  .member
                                                                  .ToList();

                Dictionary <string, ShipmentItem> itemsToBeAddedToShipment = createShipmentRequest
                                                                             .ShipmentItems.ToDictionary(k => k.Sku, v => v);

                DateTime today = DateTime.UtcNow.Date;

                List <CreatedShipment> createdShipments = inboundShipmentPlans
                                                          .Select(inboundShipmentPlan => CreateShipment(inboundShipmentPlan, itemsToBeAddedToShipment, shipsFromAddress, createShipmentRequest.ShipmentName, createShipmentRequest.AreCasesRequired, today))
                                                          .ToList();

                createShipmentResponse = new CreateShipmentResponse(createdShipments);
            }

            return(createShipmentResponse);
        }
        public void CreateShipmentResult(CreateShipmentFile createShipmentFile)
        {
            DataTable dt = ExcelUtility.ConvertExcelFileToDataTable(createShipmentFile.File);

            List <ShipmentItem> shipmentItems = dt.FromDataTableToList <ShipmentItem>()
                                                .Where(w => w.Quantity > 0)
                                                .ToList();

            if (shipmentItems.Any(a => a.QuantityInCase.HasValue) && !shipmentItems.All(a => a.QuantityInCase.HasValue))
            {
                throw new InvalidOperationException("All, or none items in the shipment must have a QuantityInCase set.");
            }

            bool areCasesRequired = shipmentItems.Any(a => a.QuantityInCase.HasValue);

            CreateShipmentRequest createShipmentRequest = new CreateShipmentRequest(
                shipmentItems,
                createShipmentFile.ShipmentName,
                areCasesRequired);

            CreateShipmentResponse createShipmentResponse = m_mwsProductsApi.CreateInboundShipment(createShipmentRequest);

            using (ExcelPackage excel = new ExcelPackage())
            {
                foreach (CreatedShipment createdShipment in createShipmentResponse.CreatedShipments)
                {
                    string worksheetName = createdShipment.ShipmentId;

                    DataTable dtShipmentItems;

                    if (areCasesRequired)
                    {
                        dtShipmentItems = createdShipment.ItemsInShipment
                                          .Select(s => new { s.Name, s.ItemNumber, s.Asin, s.Quantity, s.Cost, s.QuantityInCase, Extension = s.Cost * s.Quantity })
                                          .ToDataTable();
                    }
                    else
                    {
                        dtShipmentItems = createdShipment.ItemsInShipment
                                          .Select(s => new { s.Name, s.ItemNumber, s.Asin, s.Quantity, s.Cost, Extension = s.Cost * s.Quantity })
                                          .ToDataTable();
                    }

                    ExcelWorksheet wsCreatedShipment = excel.Workbook.Worksheets.Add(worksheetName);
                    wsCreatedShipment.Cells["A1"].LoadFromDataTable(dtShipmentItems, true);
                }

                ExcelUtility.CreateExcelResponse(Response, excel, createShipmentFile.ShipmentName);
            }
        }
        public CreateShipmentResponse RequestShipment(CreateShipmentRequest req)
        {
            // First generate the JSON request (for possible use by the developer later)
            LastJSONRequest     = JsonConvert.SerializeObject(req, Formatting.Indented);
            LastShipJSONRequest = LastJSONRequest;

            // Validate the request
            List <ValidationResult> validationResult = Common.Validate(ref req);

            if (validationResult.Any())
            {
                string errors = MyDHLAPIValidationException.PrintResults(validationResult);
                throw new MyDHLAPIValidationException(validationResult);
            }

            // Send the request and capture the response
            LastJSONResponse     = SendRequestAndReceiveResponse(LastJSONRequest, "ShipmentRequest");
            LastShipJSONResponse = LastJSONResponse;

            CreateShipmentResponse retval;

            try
            {
                // Deserialize the result back to an object.
                List <string> errors = new List <string>();

                retval = JsonConvert.DeserializeObject <CreateShipmentResponse>(LastJSONResponse, new JsonSerializerSettings()
                {
                    Error = delegate(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args)
                    {
                        errors.Add(args.ErrorContext.Error.Message);
                        args.ErrorContext.Handled = true;
                    }
                });
            }
            catch
            {
                retval = new CreateShipmentResponse();
            }

            return(retval);
        }