public ActionResult Create(OrderlineViewModel viewModel) { try { if (ModelState.IsValid) { int previousOrdersLocationInfo = (int)TempData["userLocation"]; var product = _productRepo.GetById(viewModel.ProductId); var order = _ordersRepo.GetById(viewModel.OrderId); var orderline = new OrderLine { OrderId = viewModel.OrderId, Quantity = viewModel.Quantity }; // first get the inventory that's available for that product var maxAmountForOrder = _inventoryRepo.GetProductQuantity(product.ProductId); //the amount available before order // then check if product amount asked for is > that maxAmountForOrder // if so, reject order if (orderline.Quantity > maxAmountForOrder.Quantity) { ModelState.AddModelError("", "Sorry, this product is out of stock, try again."); } var thisNewOrderId = _ordersRepo.NewOrder(); //var theNewOrder = _orderlineRepo.AddingANewOrderLine(orderline, product, order); //don't need this anymore var theNewOrder = _orderlineRepo.AddingANewOrderLine(orderline, product, thisNewOrderId); _orderlineRepo.Insert(theNewOrder); _orderlineRepo.SaveToDB(); maxAmountForOrder.Quantity = maxAmountForOrder.Quantity - orderline.Quantity; //decrease the inventory for a given product at a given location //_inventoryRepo.UpdateTheQuantity(maxAmountForOrder.Quantity, product, 1); _inventoryRepo.UpdateTheQuantity(maxAmountForOrder.Quantity, product, previousOrdersLocationInfo); _inventoryRepo.SaveToDB(); return(RedirectToAction(nameof(Index))); } return(View(viewModel)); } catch (ArgumentException) { ModelState.AddModelError("", "Invalid, please try again."); return(View(viewModel)); } }
static void Main(string[] args) { CustomerRepository crepo = new CustomerRepository(context); LocationRepository locrepo = new LocationRepository(context); InventoryRepository invrepo = new InventoryRepository(context); OrdersRepository ordrepo = new OrdersRepository(context); OrderLineRepository ordlirepo = new OrderLineRepository(context); GenericRepository <pamela_soulis_project0DataAccess.Model.Product, pamelasoulisproject0Library.Product> prepo = new GenericRepository <pamela_soulis_project0DataAccess.Model.Product, pamelasoulisproject0Library.Product>(context); Console.WriteLine("Hello! Welcome to the store!"); while (true) { Console.WriteLine("a:\tDisplay store locations."); Console.WriteLine("b:\tYou are a new customer."); //for presentation, to show that the new customer was added successfully Console.WriteLine("c:\tDisplay customers."); Console.WriteLine("d:\tYou are a returning customer."); Console.WriteLine("e:\tYou want to view your order history."); Console.WriteLine("f:\tYou want to place an order."); Console.WriteLine("z:\tTo display location order history."); Console.WriteLine("q:\tExit."); var input = Console.ReadLine(); //display store locations to customers if (input == "a") { var TheLocationsAvailable = locrepo.GetAll().ToList(); foreach (var store in TheLocationsAvailable) { Console.WriteLine($"Location: {store.Name} with ID number {store.LocationId}."); } } //add a customer to the DB given user input else if (input == "b") { Console.WriteLine("Enter your firstname: "); string name1 = Console.ReadLine(); Console.WriteLine("Enter your lastname: "); string name2 = Console.ReadLine(); var newCustomer = crepo.AddingANewCustomer(name1, name2); crepo.Insert(newCustomer); crepo.SaveToDB(); } //display all customers to check if last one was added successfully else if (input == "c") { var AllTheCustomers = crepo.GetAll().ToList(); foreach (var person in AllTheCustomers) { Console.WriteLine($"Here are our returning customers: {person.FirstName} {person.LastName} with ID number {person.CustomerId}."); } } //get a customer by id else if (input == "d") { Console.WriteLine("Enter your ID number: "); int id = int.Parse(Console.ReadLine()); var ReturningCustomer = crepo.GetById(id); Console.WriteLine($"Hi {ReturningCustomer.FirstName} {ReturningCustomer.LastName}! Welcome back!"); } //display customer order history else if (input == "e") { Console.WriteLine("Enter your customer ID number: "); int CustomerIdOrderHistory = int.Parse(Console.ReadLine()); var customerOrderHistory = crepo.GetWithNavigations(CustomerIdOrderHistory); foreach (var order in customerOrderHistory.Orders) { Console.WriteLine($"On {order.Date} at {order.Time} you ordered {string.Join(", ", order.OrderLine.Select(ol => ol.Product.Name))}."); } } //Display products, display inventory, add an order else if (input == "f") { Console.WriteLine("Enter your customer ID number: "); int orderingCustomerId = int.Parse(Console.ReadLine()); var TheProductsAvailable = prepo.GetAll().ToList(); foreach (var item in TheProductsAvailable) { Console.WriteLine($"Product: {item.Name} with Id {item.ProductId}. We are selling this item for ${item.Price}."); } Console.WriteLine("Enter a location ID to place an order at this store."); int location1 = int.Parse(Console.ReadLine()); Console.WriteLine("Enter a product ID to add it to your cart."); int product1 = int.Parse(Console.ReadLine()); //display the amount left of a product at a particular location var locationInventory = locrepo.GetWithNavigations(location1); foreach (var productAmount in locationInventory.Inventory) { if (productAmount.ProductId == product1) { Console.WriteLine($" We have {productAmount.Quantity} left at this location."); } } //check if customer asks for too much product based on inventory available Console.WriteLine("How many would you like?"); int amountOfProduct = int.Parse(Console.ReadLine()); while (amountOfProduct <= 0) { Console.WriteLine("Invalid input, please enter a valid product quantity."); } //get the max amount available to order for this product var maxAmountForOrder = invrepo.GetProductQuantity(product1); if (maxAmountForOrder.Quantity == 0) { Console.WriteLine($"We apologize, but this product is out of stock."); } else if (amountOfProduct > maxAmountForOrder.Quantity) { Console.WriteLine($" Oups, seems like you tried to order too much! We only have {maxAmountForOrder.Quantity}."); } else { //add the order int thisNewOrderId = ordrepo.NewOrder(); var newOrder = ordrepo.AddingANewOrder(orderingCustomerId, location1); ordrepo.Insert(newOrder); ordrepo.SaveToDB(); var thisNewOrder = ordlirepo.AddingANewOrderLine(thisNewOrderId, product1, amountOfProduct); ordlirepo.Insert(thisNewOrder); ordlirepo.SaveToDB(); //decrease inventory maxAmountForOrder.Quantity = maxAmountForOrder.Quantity - amountOfProduct; var newInventory = invrepo.UpdateTheQuantity(product1, location1, maxAmountForOrder.Quantity); Console.WriteLine($"We now only have {newInventory.Quantity} of this product."); invrepo.SaveToDB(); var customerOrderHistory = crepo.GetWithNavigations(orderingCustomerId); foreach (var order in customerOrderHistory.Orders) { Console.WriteLine($"Congratulations! Your order for {string.Join(", ", order.OrderLine.Select(ol => ol.Product.Name))} was placed successfully."); } } } //display location order history else if (input == "z") { Console.WriteLine("Please enter the location ID number."); int theLocationID = int.Parse(Console.ReadLine()); var locationOrderHistory = locrepo.GetOrderHistory(theLocationID); foreach (var order in locationOrderHistory.Orders) { Console.WriteLine($"On {order.Date} {string.Join(", ", order.OrderLine.Select(ol => ol.Product.Name))} was ordered from this location"); } } //display order details //else if (input == "x") //{ // Console.WriteLine("Enter your order ID number: "); // int id = int.Parse(Console.ReadLine()); // var ReturningCustomerOrderHistory = ordrepo.GetById(id); //orderId // Console.WriteLine($"You placed your last order at {ReturningCustomerOrderHistory.Date} {ReturningCustomerOrderHistory.Time}"); //} else if (input == "q") { break; } else { Console.WriteLine($"Invalid input \"{input}\"."); } } }