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