Ejemplo n.º 1
0
        public ActionResult <SimulateOrderResponse> Simulate([FromBody] SimulateOrderRequest payload)
        {
            if (payload == null)
            {
                Log(InfoMessage.ERROR_MSG_INVALID_INVENTORY_REQUEST);
                return(BadRequest(InfoMessage.ERROR_MSG_INVALID_INVENTORY_REQUEST));
            }

            if (!ModelState.IsValid)
            {
                Log(InfoMessage.ERROR_MSG_INVALID_INVENTORY_REQUEST_MODEL);
                return(BadRequest(ModelState));
            }

            var inventoryResponseEntity = _orderService.SimulateOrder(payload);

            if (inventoryResponseEntity == null)
            {
                Log(InfoMessage.ERROR_MSG_UNABLE_TO_GET_INVENTORY_RESPONSE);
                return(NotFound(InfoMessage.ERROR_MSG_UNABLE_TO_GET_INVENTORY_RESPONSE));
            }

            return(inventoryResponseEntity);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// This method takes a client simulate order request model and calls the ERPGateway
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 public SimulateOrderResponse SimulateOrder(SimulateOrderRequest request)
 {
     return(_webMethodClient.SimulateOrder(request));
 }
Ejemplo n.º 3
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);
        }