public static SimulateOrderResponse ToSimulateOrderResponse(this SimulateOrderWebServiceResponse1 response) { var orderLineItems = new List <OrderLineItem>(); foreach (var item in response.OrderResponse.OrderResponse.Body.OrderResponseDetail) { var orderLineItem = new OrderLineItem() { ShippingPoint = item.ShippingPoint, OrderLineNumber = Convert.ToInt32((string)item.OrderLineNumber), ProductID = item.ProductID, AdjustedPrice = item.AdjustedPrice, Discount = item.Discount, TaxVAT = item.TaxVAT, Availability = new Availability { AvailableQty = Convert.ToDecimal(item.ItemDetail[0].AvailableQty, CultureInfo.InvariantCulture), AvailableDate = DateTime.ParseExact(item.ItemDetail[0].AvailableDate, "yyyyMMdd", CultureInfo.InvariantCulture) } }; orderLineItems.Add(orderLineItem); } SimulateOrderResponse result = new SimulateOrderResponse() { PaymentTerms = response.OrderResponse.OrderResponse.Body.OrderResponseHeader.PaymentTerms, INCOTerms = response.OrderResponse.OrderResponse.Body.OrderResponseHeader.INCOTerms, INCOCode = response.OrderResponse.OrderResponse.Body.OrderResponseHeader.INCOCode, Currency = response.OrderResponse.OrderResponse.Body.OrderResponseHeader.Currency, ShippingCost = Convert.ToDecimal(response.OrderResponse.OrderResponse.Body.OrderResponseHeader.ShippingCost, CultureInfo.InvariantCulture), TaxVAT = Convert.ToDecimal(response.OrderResponse.OrderResponse.Body.OrderResponseHeader.TaxVAT, CultureInfo.InvariantCulture), OrderTotal = Convert.ToDecimal(response.OrderResponse.OrderResponse.Body.OrderResponseHeader.OrderTotal, CultureInfo.InvariantCulture), OrderItems = orderLineItems }; return(result); }
public SimulateOrderResponse SimulateOrder(SimulateOrderRequest simulateOrderRequest) { var endPoint = _soapStoreFrontWebService.ToString(); var request = simulateOrderRequest.ToWmSimulateOrderRequest(); var backup = new BackupLogEntry(request, nameof(SimulateOrder)); LogRequest(request, nameof(SimulateOrder)); var wmSimulateOrderResponse = _soapStoreFrontWebService.SimulateOrderWebServiceAsync(request).Result; var orderResponseError = "We were not able to obtain response items for all requested products. Please see list of failed inventory items."; backup.AddResponse(wmSimulateOrderResponse); _repository.InsertOne(backup); LogResponse(wmSimulateOrderResponse); var failedItems = new List <FailedItem>(); while (ContainsSAPError(wmSimulateOrderResponse)) { var errorMessage = wmSimulateOrderResponse.ErrorResponse.ErrorResponse1.Body[0].Error; string productId = LogFailedItem(failedItems, errorMessage); //if we have an error condition but no failed products, we have an order order level issue, we can return if (productId == Empty) { failedItems.Clear(); var failedItem = new FailedItem { ErrorMessage = errorMessage, ProductId = "Order Level Exception, not applicable" }; failedItems.Add(failedItem); var orderLevelFailureResponse = new SimulateOrderResponse { FailedItems = failedItems, ErrorMessage = "We were not able to obtain response items for all requested products.Please see list of failed inventory items." }; return(orderLevelFailureResponse); } var newItemsList = request.OrderRequest.OrderRequest.Body[0].OrderRequestDetail.Where(val => val.ProductID != productId).ToArray(); request.OrderRequest.OrderRequest.Body[0].OrderRequestDetail = newItemsList; //We had an error condition for a single product .. we need to collect that error and return if (newItemsList.Length == 0) { var orderLevelFailureResponse = new SimulateOrderResponse { FailedItems = failedItems, ErrorMessage = orderResponseError }; return(orderLevelFailureResponse); } var backup2 = new BackupLogEntry(request, "Addtional SimulateOrder (to handle failed products"); LogRequest(request, "Additional SimulateOrder (to handle failed products"); wmSimulateOrderResponse = _soapStoreFrontWebService.SimulateOrderWebServiceAsync(request).Result; backup2.AddResponse(wmSimulateOrderResponse); _repository.InsertOne(backup2); LogResponse(wmSimulateOrderResponse); } var simulateOrderResponse = wmSimulateOrderResponse.ToSimulateOrderResponse(); if (failedItems.Count == 0) { return(simulateOrderResponse); } simulateOrderResponse.FailedItems = failedItems; simulateOrderResponse.ErrorMessage = orderResponseError; return(simulateOrderResponse); }