//GET: Locations/Order public IActionResult Order(int?id) { if (id == null) { return(NotFound()); } var inventories = _unitOfWork.Inventories.GetLocationInventory(id.Value); var locationOrderViewModel = new LocationOrderViewModel { LocID = _unitOfWork.Locations.Get(id.Value).LocationID, Customers = new SelectList(_unitOfWork.Customers.GetAllUsernames()), FilteredInventory = inventories.ToList(), Quantity1 = 0, Quantity2 = 0, Quantity3 = 0, Quantity4 = 0, Quantity5 = 0 }; return(View(locationOrderViewModel)); }
public IActionResult Order([Bind("LocID, OrderCustomerUsername, Quantity1, Quantity2, Quantity3, Quantity4, Quantity5")] LocationOrderViewModel lovm) { var newOrder = new Order() { OrderLocation = _unitOfWork.Locations.Get(lovm.LocID), OrderDate = DateTime.Today, OrderLineItems = new List <OrderLineItem>() }; var filteredInventory = _unitOfWork.Inventories.GetLocationInventory(lovm.LocID).ToList(); if (!(lovm.OrderCustomerUsername == "No selection")) { var tempCust = _unitOfWork.Customers.GetByUsername(lovm.OrderCustomerUsername); newOrder.OrderCustomer = tempCust; if ((lovm.Quantity1 > 0) || (lovm.Quantity2 > 0) || (lovm.Quantity3 > 0) || (lovm.Quantity4 > 0) || (lovm.Quantity5 > 0)) { try { if (lovm.Quantity1 > 0) { if (lovm.Quantity1 > filteredInventory[0].QuantityAvailable) { throw new ArgumentOutOfRangeException(); } var line1 = new OrderLineItem() { LineItemProduct = filteredInventory[0].InventoryProduct, Quantity = lovm.Quantity1, LinePrice = (filteredInventory[0].InventoryProduct.ProductPrice * lovm.Quantity1) }; newOrder.OrderLineItems.Add(line1); _unitOfWork.Inventories.ReduceStock(filteredInventory[0].InventoryID, lovm.Quantity1); } if (lovm.Quantity2 > 0) { if (lovm.Quantity2 > filteredInventory[1].QuantityAvailable) { throw new ArgumentOutOfRangeException(); } newOrder.OrderLineItems.Add(new OrderLineItem() { LineItemProduct = filteredInventory[1].InventoryProduct, Quantity = lovm.Quantity2, LinePrice = (filteredInventory[1].InventoryProduct.ProductPrice * lovm.Quantity2) }); _unitOfWork.Inventories.ReduceStock(filteredInventory[1].InventoryID, lovm.Quantity2); } if (lovm.Quantity3 > 0) { if (lovm.Quantity3 > filteredInventory[2].QuantityAvailable) { throw new ArgumentOutOfRangeException(); } newOrder.OrderLineItems.Add(new OrderLineItem() { LineItemProduct = filteredInventory[2].InventoryProduct, Quantity = lovm.Quantity3, LinePrice = (filteredInventory[2].InventoryProduct.ProductPrice * lovm.Quantity3) }); _unitOfWork.Inventories.ReduceStock(filteredInventory[2].InventoryID, lovm.Quantity3); } if (lovm.Quantity4 > 0) { if (lovm.Quantity4 > filteredInventory[3].QuantityAvailable) { throw new ArgumentOutOfRangeException(); } newOrder.OrderLineItems.Add(new OrderLineItem() { LineItemProduct = filteredInventory[3].InventoryProduct, Quantity = lovm.Quantity4, LinePrice = (filteredInventory[3].InventoryProduct.ProductPrice * lovm.Quantity4) }); _unitOfWork.Inventories.ReduceStock(filteredInventory[3].InventoryID, lovm.Quantity4); } if (lovm.Quantity5 > 0) { if (lovm.Quantity5 > filteredInventory[4].QuantityAvailable) { throw new ArgumentOutOfRangeException(); } newOrder.OrderLineItems.Add(new OrderLineItem() { LineItemProduct = filteredInventory[4].InventoryProduct, Quantity = lovm.Quantity5, LinePrice = (filteredInventory[4].InventoryProduct.ProductPrice * lovm.Quantity5) }); _unitOfWork.Inventories.ReduceStock(filteredInventory[4].InventoryID, lovm.Quantity5); } _unitOfWork.Orders.Add(newOrder); _unitOfWork.Complete(); return(RedirectToAction(nameof(Index))); } catch (Exception e) { //log out order too high _logger.LogInformation("Error: order value out of range."); } } } return(View(lovm)); }