public PartialViewResult BestCustomers()
        {
            var Customers = new List <BestCustomerVm>();
            var billy     = new BestCustomerVm();

            billy.UserId         = 1;
            billy.Email          = "a";
            billy.Name           = "Billy";
            billy.AmountSpent    = 1;
            billy.NumberOfOrders = 1;

            Customers.Add(billy);

            return(PartialView("_BestCustomers", Customers));
        }
        // GET: Purchases/Analytics
        public ActionResult Analytics()
        {
            var model = new AnalyticsVm();

            var bestCustomers = new List <BestCustomerVm>();

            foreach (var purchase in _context.Purchases)
            {
                var item = _context.Items.Find(purchase.ItemId);
                _context.Users.Find(purchase.UserId);

                //if user is already on list, add purchase stats to their entry
                if (bestCustomers.Where(c => c.UserId == purchase.UserId).Count() > 0)
                {
                    var customer = bestCustomers.Where(c => c.UserId == purchase.UserId).FirstOrDefault();
                    customer.NumberOfOrders++;
                    customer.AmountSpent += item.Cost * purchase.NumberPurchased;
                }
                else
                {
                    var customer = new BestCustomerVm();
                    customer.UserId         = purchase.UserId;
                    customer.Name           = purchase.User.Name;
                    customer.Email          = purchase.User.Email;
                    customer.AmountSpent    = item.Cost * purchase.NumberPurchased;
                    customer.NumberOfOrders = 1;
                    bestCustomers.Add(customer);
                }
            }
            model.BestCustomerVms = bestCustomers.OrderBy(x => x.AmountSpent).Reverse().ToList();

            var topSellingItems = new List <ItemsSoldVm>();

            foreach (var purchase in _context.Purchases)
            {
                var PurchaseItem = _context.Items.Find(purchase.ItemId);
                if (topSellingItems.Where(i => i.Id == purchase.ItemId).Count() > 0)
                {
                    var item = topSellingItems.Where(i => i.Id == purchase.ItemId).FirstOrDefault();
                    item.NumberSold += purchase.NumberPurchased;
                }
                else
                {
                    var item = new ItemsSoldVm();
                    item.Id          = purchase.ItemId;
                    item.Name        = PurchaseItem.Name;
                    item.Cost        = PurchaseItem.Cost;
                    item.Description = PurchaseItem.Description;
                    item.NumberSold  = purchase.NumberPurchased;
                    topSellingItems.Add(item);
                }
            }
            model.ItemsSoldVms = topSellingItems.OrderBy(x => x.NumberSold).Reverse().ToList();

            var largestOrders = new List <LargestOrderVm>();

            foreach (var purchase in _context.Purchases)
            {
                var item  = _context.Items.Find(purchase.ItemId);
                var user  = _context.Users.Find(purchase.UserId);
                var order = new LargestOrderVm();
                order.ItemName = item.Name;
                order.Purchase = purchase;
                order.UserName = user.Name;
                largestOrders.Add(order);
            }
            model.LargestOrders = largestOrders.OrderBy(x => x.Purchase.NumberPurchased).Reverse().ToList();

            var itemsNeedRestock = new List <ItemRestockVm>();

            foreach (var itemStock in _context.ItemStocks)
            {
                var item        = _context.Items.Find(itemStock.ItemId);
                var warehouse   = _context.Warehouses.Find(itemStock.WarehouseId);
                var itemRestock = new ItemRestockVm();
                itemRestock.ItemStock        = itemStock;
                itemRestock.ItemName         = item.Name;
                itemRestock.WarehouseAddress = warehouse.Address;
                itemsNeedRestock.Add(itemRestock);
            }
            model.ItemRestocks = itemsNeedRestock.OrderBy(x => x.ItemStock.ItemCount).ToList();

            return(View(model));
        }