public IActionResult SalesReport(int daysAgo) { var APIStores = new StoreApi(new Configuration { BasePath = "https://localhost:44368/" }); var stores = APIStores.ApiStoreGet(); var APIOrders = new OrderApi(new Configuration { BasePath = "https://localhost:44368/" }); var orders = APIOrders.ApiOrderGet(); List <SalesReport> summary = orders.Where(sales => (DateTime.Now - (DateTime)sales.TimeStamp).TotalDays <= daysAgo) .GroupBy(sales1 => sales1.Store).Select(sales2 => new SalesReport { Item = sales2.First().Store.Name, Quantity = sales2.Count(), Revenue = sales2.Sum(sales => (double)sales.PriceTotal), Pizzas = sales2.SelectMany(group => group.Pizza).GroupBy(pizza => pizza.Pizza).Select(pizzaGroup => new SalesReport { Item = pizzaGroup.First().Name, Quantity = pizzaGroup.Count(), Revenue = pizzaGroup.Sum(sales => (double)sales.Price), }).OrderBy(report => report.Item) }).ToList(); return(View(summary)); }
public IActionResult SelectStore() { var sessionOrder = Utils.GetCurrentOrder(HttpContext.Session); var API = new OrderApi(new Configuration { BasePath = "https://localhost:44368/" }); var orders = API.ApiOrderGet(); var API2 = new StoreApi(new Configuration { BasePath = "https://localhost:44368/" }); var stores = API2.ApiStoreGet(); List <Order> previousOrders = orders.Where( order => order.Customer.Name.Equals(sessionOrder.Customer.Name)).OrderByDescending(order => order.TimeStamp).ToList(); List <AStore> storesToDisplay = new List <AStore>(); #if !DEBUG if (previousOrders.Any() && timeSinceOrder(previousOrders.First()).TotalHours < 2) { return(BadRequest("At least 2 hours must pass since your last order before you can place another.")); } foreach (var store in stores) { var lastOrderFromStore = previousOrders.FirstOrDefault(order => order.Store.Name.Equals(store.Name)); if (lastOrderFromStore is null || timeSinceOrder(lastOrderFromStore).TotalHours >= 24) { storesToDisplay.Add(store); } } #else storesToDisplay = stores; #endif if (storesToDisplay.Count == 0) { return(BadRequest("There is a 24 hour waiting period for making repeat orders at each store. All stores are currently under this waiting period.")); } ViewBag.Stores = new SelectList(storesToDisplay.ToList(), "Id", "Name"); return(View(new AStore())); }
public IActionResult GetSelectedStore(AStore selectedStore) { var API = new StoreApi(new Configuration { BasePath = "https://localhost:44368/" }); var stores = API.ApiStoreGet(); var foundStore = stores.FirstOrDefault(store => store.Id == selectedStore.Id); //grab identicle store from db if (foundStore is null) { return(BadRequest("You selected a null store.")); } var sessionOrder = Utils.GetCurrentOrder(HttpContext.Session); //grabbing sessionn info and placing store info into it sessionOrder.Store.Id = (int)foundStore.Id; sessionOrder.Store.Name = foundStore.Name; sessionOrder.Store.Store = foundStore.Store; Utils.SaveOrder(HttpContext.Session, sessionOrder); //save session return(RedirectToAction("PizzaMenu", "FEOrder")); }