public ActionResult Sales()
        {
            var context    = new ApplicationDbContext();
            var allSales   = SaleRepositoryFactory.GetSaleRepository().GetSales();
            var saleReport = new SaleReportAll();

            var usersWithRoles = (from user in context.Users
                                  select new
            {
                UserId = user.Id,
                FirstName = user.FirstName,
                LastName = user.LastName,
                Email = user.Email,
                Role = (from userRole in user.Roles
                        join role in context.Roles on userRole.RoleId
                        equals role.Id
                        select role.Name).ToList()
            }).ToList().Select(p => new UsersVM()

            {
                UserID    = p.UserId,
                FirstName = p.FirstName,
                LastName  = p.LastName,
                Email     = p.Email,
                Role      = string.Join(",", p.Role)
            }).ToList();


            var salesGroupedByUser = allSales.GroupBy(s => s.UserID);

            var listOfSaleReportsByUser = new List <SaleReportByUser>();

            foreach (var saleGroup in salesGroupedByUser)
            {
                var user = UserManager.FindById(saleGroup.Key).FirstName + " " + UserManager.FindById(saleGroup.Key).LastName;


                int     totalVehicles = 0;
                decimal totalSales    = 0;
                foreach (var sale in saleGroup)
                {
                    totalSales += sale.PurchasePrice;
                    totalVehicles++;
                }

                var row = new SaleReportByUser()
                {
                    User = user, TotalSales = totalSales, TotalVehicles = totalVehicles
                };

                listOfSaleReportsByUser.Add(row);
            }


            saleReport.SalesByUser      = listOfSaleReportsByUser;
            saleReport.UsersForDropDown = usersWithRoles;


            return(View(saleReport));
        }
        public ActionResult Sales(string userID, DateTime?fromDate, DateTime?toDate)
        {
            if (fromDate == null)
            {
                fromDate = new DateTime(2000, 01, 01);
            }

            if (toDate == null)
            {
                toDate = new DateTime(2021, 01, 01);
            }

            var context    = new ApplicationDbContext();
            var allSales   = SaleRepositoryFactory.GetSaleRepository().GetSales();
            var saleReport = new SaleReportAll();

            var usersWithRoles = (from user in context.Users
                                  select new
            {
                UserId = user.Id,
                FirstName = user.FirstName,
                LastName = user.LastName,
                Email = user.Email,
                Role = (from userRole in user.Roles
                        join role in context.Roles on userRole.RoleId
                        equals role.Id
                        select role.Name).ToList()
            }).ToList().Select(p => new UsersVM()

            {
                UserID    = p.UserId,
                FirstName = p.FirstName,
                LastName  = p.LastName,
                Email     = p.Email,
                Role      = string.Join(",", p.Role)
            }).ToList();



            if (userID != "All")
            {
                var salesByUser       = allSales.Where(s => s.UserID == userID).ToList();
                var listOfSaleReports = new List <SaleReportByUser>();


                int totalVehicles = 0;
                foreach (var sale in salesByUser)
                {
                    var     user       = UserManager.FindById(userID).FirstName + " " + UserManager.FindById(userID).LastName;
                    decimal totalSales = 0;
                    if (sale.PurchaseDate < toDate && sale.PurchaseDate > fromDate)
                    {
                        totalSales += sale.PurchasePrice;
                        totalVehicles++;
                    }

                    var saleReportForUser = new SaleReportByUser()
                    {
                        User = user, TotalSales = totalSales, TotalVehicles = totalVehicles
                    };

                    listOfSaleReports.Add(saleReportForUser);
                }

                saleReport.SalesByUser      = listOfSaleReports;
                saleReport.UsersForDropDown = usersWithRoles;
                saleReport.UserID           = "All";
                saleReport.fromDate         = DateTime.MinValue;
                saleReport.toDate           = DateTime.MaxValue;
            }
            else
            {
                var salesGroupedByUser = allSales.GroupBy(s => s.UserID);

                var listOfSaleReportsByUser = new List <SaleReportByUser>();

                foreach (var saleGroup in salesGroupedByUser)
                {
                    var user = UserManager.FindById(saleGroup.Key).FirstName + " " + UserManager.FindById(saleGroup.Key).LastName;


                    int     totalVehicles = 0;
                    decimal totalSales    = 0;
                    foreach (var sale in saleGroup)
                    {
                        if (sale.PurchaseDate < toDate && sale.PurchaseDate > fromDate)
                        {
                            totalSales += sale.PurchasePrice;
                            totalVehicles++;
                        }
                    }

                    var row = new SaleReportByUser()
                    {
                        User = user, TotalSales = totalSales, TotalVehicles = totalVehicles
                    };

                    listOfSaleReportsByUser.Add(row);
                }


                saleReport.SalesByUser      = listOfSaleReportsByUser;
                saleReport.UsersForDropDown = usersWithRoles;
                saleReport.UserID           = "All";
                saleReport.fromDate         = DateTime.MinValue;
                saleReport.toDate           = DateTime.MaxValue;

                return(View(saleReport));
            }

            return(View(saleReport));
        }