public ActionResult DeeperLook(
            bool? ajax, bool? scrolling, bool? paging, bool? filtering, bool? sorting, bool? grouping, bool? showFooter)
        {
            // Total Sales, Gross Revenue, Line Item Promotion Total
            var model = new List<DeeperLookViewModel>();

            IQueryable<Order> orders = db.Orders.Include(o => o.OrderDetails);
            List<decimal> orderTotalList = orders.Select(order => order.TotalCost).ToList();
            List<decimal> orderRevenueList = orders.Select(order => order.TotalCost + order.SalesTax).ToList();
            List<decimal> lineItemPromoTotalList =
                (from order in orders
                 from line in order.OrderDetails
                 select (line.UnitPrice - line.UnitPriceAfterPromo) * line.Quantity).ToList();

            var totalSales = new DeeperLookViewModel
                {
                    DeeperLookViewModelId = 1, 
                    Stat = "Total Sales", 
                    Average = (float)orderTotalList.Average(), 
                    Median = (float)orderTotalList.Median()
                };
            model.Add(totalSales);

            var grossRevenue = new DeeperLookViewModel
                {
                    DeeperLookViewModelId = 2, 
                    Stat = "Gross Revenue", 
                    Average = (float)orderRevenueList.Average(), 
                    Median = (float)orderRevenueList.Median()
                };
            model.Add(grossRevenue);

            var lineItemPromoTotal = new DeeperLookViewModel
                {
                    DeeperLookViewModelId = 3, 
                    Stat = "Line Item Promo Total", 
                    Average = (float)lineItemPromoTotalList.Average(), 
                    Median = (float)lineItemPromoTotalList.Median()
                };
            model.Add(lineItemPromoTotal);

            ViewData["ajax"] = ajax ?? true;
            ViewData["scrolling"] = scrolling ?? true;
            ViewData["paging"] = paging ?? true;
            ViewData["filtering"] = filtering ?? true;
            ViewData["grouping"] = grouping ?? true;
            ViewData["sorting"] = sorting ?? true;
            ViewData["showFooter"] = showFooter ?? true;
            return View(model);
        }
        public ActionResult _DeeperLook()
        {
            var model = new List<DeeperLookViewModel>();

            IQueryable<Order> orders = db.Orders.Include(o => o.OrderDetails);
            List<decimal> orderTotalList = orders.Select(order => order.TotalCost).ToList();
            List<decimal> orderRevenueList = orders.Select(order => order.TotalCost + order.SalesTax).ToList();
            List<decimal> lineItemPromoTotalList =
                (from order in orders
                 from line in order.OrderDetails
                 select (line.UnitPrice - line.UnitPriceAfterPromo) * line.Quantity).ToList();

            var totalSales = new DeeperLookViewModel
                {
                    DeeperLookViewModelId = 1, 
                    Stat = "TotalSales", 
                    Average = (float)orderTotalList.Average(), 
                    Median = (float)orderTotalList.Median()
                };
            model.Add(totalSales);

            var grossRevenue = new DeeperLookViewModel
                {
                    DeeperLookViewModelId = 2, 
                    Stat = "GrossRevenue", 
                    Average = (float)orderRevenueList.Average(), 
                    Median = (float)orderRevenueList.Median()
                };
            model.Add(grossRevenue);

            var lineItemPromoTotal = new DeeperLookViewModel
                {
                    DeeperLookViewModelId = 3, 
                    Stat = "Line Item Promo Total", 
                    Average = (float)lineItemPromoTotalList.Average(), 
                    Median = (float)lineItemPromoTotalList.Median()
                };
            model.Add(lineItemPromoTotal);
            return View(new GridModel(model));
        }
        public ActionResult _DeeperStat(int id)
        {
            var model = new List<DeeperLookViewModel>();

            if (id == 1)
            {
                // GrossSalesHourly id =1
                IQueryable<Order> orders = db.Orders.Include(o => o.OrderDetails);
                DateTime oneHourAgo = DateTime.Now.AddHours(-1.00);

                List<Order> ordersPlacedInTheLastHour = orders.Where(order => order.TimeProcessed > oneHourAgo).ToList();
                List<decimal> ordersPlacedInTheLastHourGrossSalesList =
                    ordersPlacedInTheLastHour.Select(order => order.TotalCost).ToList();

                /*List<Order> ordersPlacedBeforeOneHourAgo =
                    orders.Where(order => order.TimeProcessed < oneHourAgo).ToList();
                List<decimal> ordersPlacedBeforeOneHourAgoGrossSalesList =
                    ordersPlacedBeforeOneHourAgo.Select(order => order.TotalCost).ToList();*/

                /*var totalSalesWithinLastHour = new DeeperLookViewModel
                    {
                        DeeperLookViewModelId = 1, 
                        Stat = "Orders Placed In The Last Hour", 
                        Average = (float)ordersPlacedInTheLastHourGrossSalesList.Average(), 
                        Median = (float)ordersPlacedInTheLastHourGrossSalesList.Median()
                    };
                model.Add(totalSalesWithinLastHour);

                var totalSalesBeforeLastHour = new DeeperLookViewModel
                    {
                        DeeperLookViewModelId = 2, 
                        Stat = "Orders Placed Before The Last Hour", 
                        Average = (float)ordersPlacedBeforeOneHourAgoGrossSalesList.Average(), 
                        Median = (float)ordersPlacedBeforeOneHourAgoGrossSalesList.Median()
                    };
                model.Add(totalSalesBeforeLastHour);*/

                var calendarStartOfBusiness = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 05, 00, 00, DateTimeKind.Local);
                DateTime todaysStartOfBusiness = calendarStartOfBusiness;
                if (DateTime.Now < calendarStartOfBusiness)
                {
                    todaysStartOfBusiness = calendarStartOfBusiness.AddDays(-1);
                }
                        
                DateTime endDate = todaysStartOfBusiness.AddDays(1);

                var hourId = 1;
                while (todaysStartOfBusiness != endDate)
                {
                    Console.WriteLine(todaysStartOfBusiness.ToString());

                    // this will show orders from all hours -- not just hours in the past 24 hours
                    List<Order> ordersPlacedDuringThisHour =
                    orders.Where(order => order.TimeProcessed.Hour == todaysStartOfBusiness.Hour).ToList();
                    List<decimal> ordersPlacedDuringThisHourList =
                        ordersPlacedDuringThisHour.Select(order => order.TotalCost).ToList();
                    float thisHourAverage = 0;
                    float thisHourMedian = 0;
                    if (ordersPlacedDuringThisHourList.Count() != 0)
                    {
                        thisHourAverage = (float)ordersPlacedDuringThisHourList.Average();
                    }
                    if (ordersPlacedDuringThisHourList.Count() != 0)
                    {
                        thisHourMedian = (float)ordersPlacedDuringThisHourList.Median();
                    }

                    var totalSales = new DeeperLookViewModel
                    {
                        DeeperLookViewModelId = hourId,
                        Stat = "Orders Placed at hour " + todaysStartOfBusiness.Hour,
                        Average = thisHourAverage,
                        Median = thisHourMedian
                    };
                    model.Add(totalSales);
                    todaysStartOfBusiness = todaysStartOfBusiness.AddHours(1);
                    hourId++;
                }
            }

            if (id == 2)
            {
                // GrossRevHourly id =2
                IQueryable<Order> orders = db.Orders.Include(o => o.OrderDetails);
                DateTime oneHourAgo = DateTime.Now.AddHours(-1.00);

                List<Order> ordersPlacedInTheLastHour = orders.Where(order => order.TimeProcessed > oneHourAgo).ToList();
                List<decimal> ordersPlacedInTheLastHourRevenueList =
                    ordersPlacedInTheLastHour.Select(order => order.TotalCost + order.SalesTax).ToList();

                List<Order> ordersPlacedBeforeOneHourAgo =
                    orders.Where(order => order.TimeProcessed < oneHourAgo).ToList();
                List<decimal> ordersPlacedBeforeOneHourAgoRevenueList =
                    ordersPlacedBeforeOneHourAgo.Select(order => order.TotalCost + order.SalesTax).ToList();

                var totalSalesWithinLastHour = new DeeperLookViewModel
                    {
                        DeeperLookViewModelId = 1, 
                        Stat = "Orders Placed In The Last Hour", 
                        Average = (float)ordersPlacedInTheLastHourRevenueList.Average(), 
                        Median = (float)ordersPlacedInTheLastHourRevenueList.Median()
                    };
                model.Add(totalSalesWithinLastHour);

                var totalSalesBeforeLastHour = new DeeperLookViewModel
                    {
                        DeeperLookViewModelId = 2, 
                        Stat = "Orders Placed Before The Last Hour", 
                        Average = (float)ordersPlacedBeforeOneHourAgoRevenueList.Average(), 
                        Median = (float)ordersPlacedBeforeOneHourAgoRevenueList.Median()
                    };
                model.Add(totalSalesBeforeLastHour);
            }

            if (id == 3)
            {
                // Do promo numbers
                // TotalPromoHourly id =3
                IQueryable<Order> orders = db.Orders.Include(o => o.OrderDetails);
                DateTime oneHourAgo = DateTime.Now.AddHours(-1.00);

                IEnumerable<double> ordersPlacedInTheLastHourLinePromoTotalList = (from order in orders
                                                                                   where
                                                                                       order.TimeProcessed >= oneHourAgo
                                                                                   from orderDetail in
                                                                                       order.OrderDetails
                                                                                   where
                                                                                       orderDetail.LineItemPromoId
                                                                                       != null
                                                                                   select
                                                                                       (orderDetail.LineItemPromo.Promo.
                                                                                            PercentOff
                                                                                        * (double)orderDetail.UnitPrice)
                                                                                       * orderDetail.Quantity).ToList().
                    DefaultIfEmpty();

                IEnumerable<double> ordersPlacedBeforeOneHourAgoLinePromoTotalList = (from order in orders
                                                                                      where
                                                                                          order.TimeProcessed
                                                                                          < oneHourAgo
                                                                                      from orderDetail in
                                                                                          order.OrderDetails
                                                                                      where
                                                                                          orderDetail.LineItemPromoId
                                                                                          != null
                                                                                      select
                                                                                          (orderDetail.LineItemPromo.
                                                                                               Promo.PercentOff
                                                                                           *
                                                                                           (double)orderDetail.UnitPrice)
                                                                                          * orderDetail.Quantity).ToList
                    ().DefaultIfEmpty();

                if (ordersPlacedInTheLastHourLinePromoTotalList.FirstOrDefault() != null)
                {
                    var totalSalesWithinLastHour = new DeeperLookViewModel
                        {
                            DeeperLookViewModelId = 1, 
                            Stat = "Orders Placed In The Last Hour", 
                            Average = (float)ordersPlacedInTheLastHourLinePromoTotalList.Average(), 
                            Median = (float)ordersPlacedInTheLastHourLinePromoTotalList.Median()
                        };
                    model.Add(totalSalesWithinLastHour);
                }
                else
// ReSharper disable HeuristicUnreachableCode
                {
                    var totalSalesWithinLastHour = new DeeperLookViewModel
                        {
                           DeeperLookViewModelId = 1, Stat = "Orders Placed In The Last Hour", Average = 0, Median = 0 
                        };
                    model.Add(totalSalesWithinLastHour);
                }
// ReSharper restore HeuristicUnreachableCode
                if (ordersPlacedBeforeOneHourAgoLinePromoTotalList.FirstOrDefault() != null)
                {
                    var totalSalesBeforeLastHour = new DeeperLookViewModel
                        {
                            DeeperLookViewModelId = 2, 
                            Stat = "Orders Placed Before The Last Hour", 
                            Average = (float)ordersPlacedBeforeOneHourAgoLinePromoTotalList.Average(), 
                            Median = (float)ordersPlacedBeforeOneHourAgoLinePromoTotalList.Median()
                        };
                    model.Add(totalSalesBeforeLastHour);
                }
                else
// ReSharper disable HeuristicUnreachableCode
                {
                    var totalSalesBeforeLastHour = new DeeperLookViewModel
                        {
                            DeeperLookViewModelId = 2, 
                            Stat = "Orders Placed Before The Last Hour", 
                            Average = 0, 
                            Median = 0
                        };
                    model.Add(totalSalesBeforeLastHour);
                }
// ReSharper restore HeuristicUnreachableCode
            }

            return View(new GridModel(model));
        }
        public ActionResult GrossRevHourly(
            bool? ajax, bool? scrolling, bool? paging, bool? filtering, bool? sorting, bool? grouping, bool? showFooter)
        {
            // GrossRevHourly
            var model = new List<DeeperLookViewModel>();

            IQueryable<Order> orders = db.Orders.Include(o => o.OrderDetails);
            DateTime oneHourAgo = DateTime.Now.AddHours(-1.00);

            List<Order> ordersPlacedInTheLastHour = orders.Where(order => order.TimeProcessed > oneHourAgo).ToList();
            List<decimal> ordersPlaceInTheLastHourRevenueList =
                ordersPlacedInTheLastHour.Select(order => order.TotalCost + order.SalesTax).ToList();

            List<Order> ordersPlacedBeforeOneHourAgo = orders.Where(order => order.TimeProcessed < oneHourAgo).ToList();
            List<decimal> ordersPlacedBeforeOneHourAgoRevenueList =
                ordersPlacedBeforeOneHourAgo.Select(order => order.TotalCost + order.SalesTax).ToList();

            var totalSalesWithinLastHour = new DeeperLookViewModel
                {
                    DeeperLookViewModelId = 1, 
                    Stat = "Orders Placed In The Last Hour", 
                    Average = (float)ordersPlaceInTheLastHourRevenueList.Average(), 
                    Median = (float)ordersPlaceInTheLastHourRevenueList.Median()
                };
            model.Add(totalSalesWithinLastHour);

            var totalSalesBeforeLastHour = new DeeperLookViewModel
                {
                    DeeperLookViewModelId = 2, 
                    Stat = "Orders Placed Before The Last Hour", 
                    Average = (float)ordersPlacedBeforeOneHourAgoRevenueList.Average(), 
                    Median = (float)ordersPlacedBeforeOneHourAgoRevenueList.Median()
                };
            model.Add(totalSalesBeforeLastHour);

            ViewData["ajax"] = ajax ?? true;
            ViewData["scrolling"] = scrolling ?? true;
            ViewData["paging"] = paging ?? true;
            ViewData["filtering"] = filtering ?? true;
            ViewData["grouping"] = grouping ?? true;
            ViewData["sorting"] = sorting ?? true;
            ViewData["showFooter"] = showFooter ?? true;
            return View("DeeperLook", model);
        }