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); }
/// <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)); }
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); }