public IActionResult Project(int id = -1)
        {
            if (!_auth.Authorise(RolesEnum.Staff, _context)) // Check logged in
            {
                return(Redirect("~/Login/Index"));
            }

            var userId = _context.Users.First(u => u.UserName == HttpContext.Session.GetString("Username")).UserId;

            var projectUser = _context.ProjectUsers.Where(p => p.ProjectId == id).Where(u => u.UserId == userId).ToList();

            if (projectUser.Count != 1) // Check if user is in project
            {
                return(Redirect("~/Project/Dashboard"));
            }

            if (id == -1 || !_context.Projects.Any(p => p.ProjectId == id)) // Check project exists and id was given
            {
                return(Redirect("~/Project/Dashboard"));
            }


            var vm = new ViewProjectViewModel();                                                     // Create a new view model

            vm.Project = _context.Projects.First(p => p.ProjectId == id);                            // Get the project record and add it to the view model.

            var listOfUsersInProject = _context.ProjectUsers.Where(p => p.ProjectId == id).ToList(); // Get users in project from database

            vm.ProjectUsers = new List <TableProjectUser>();                                         // Instanciate a new list for project users

            // Go through each user
            foreach (var user in listOfUsersInProject)
            {
                // The actual user record
                var accuser = _context.Users.First(u => u.UserId == user.UserId);

                // New table project user and fill in fields
                var temp = new TableProjectUser();
                temp.Username = accuser.UserName;
                temp.Email    = accuser.Email ?? "User has not given an email.";
                temp.Role     = _context.Roles.First(r => r.RoleId == accuser.RoleId).RoleName;

                var minutesBooked =
                    _context.ProjectMinutesBooked.Where(p => p.ProjectId == id && p.UserId == user.UserId);

                temp.MinutesBooked = 0;

                foreach (var minutes in minutesBooked)
                {
                    temp.MinutesBooked += minutes.AmountOfMinutes;
                }

                // Add new table project user to view model
                vm.ProjectUsers.Add(temp);
            }

            // return the Project view
            return(View(vm));
        }
        // Manage users view
        public IActionResult ManageUsers(int id = -1)
        {
            if (!_auth.Authorise(RolesEnum.Admin, _context)) // Check logged in as admin
            {
                return(Redirect("~/Project/Dashboard"));
            }

            var vm = new ManageUsersViewModel();         // new view model

            vm.AllUsers = new List <TableProjectUser>(); // instanciate all users

            // Foreach user in the database
            foreach (var user in _context.Users)
            {
                // Create a temp user
                var temp = new TableProjectUser();
                temp.Email         = user.Email ?? "This user has not given an email.";
                temp.Username      = user.UserName;
                temp.Role          = _context.Roles.First(r => r.RoleId == user.RoleId).RoleName;
                temp.MinutesBooked = user.UserId;

                // Add temp user to view model
                vm.AllUsers.Add(temp);
            }

            // If there's an id given and it's a valid id
            if (id != -1 && _context.Users.Any(u => u.UserId == id))
            {
                // Create new temp selected user and fill out fields
                var temp = new SelectUser();
                temp.User = _context.Users.First(u => u.UserId == id);
                temp.Role = _context.Roles.First(r => r.RoleId == temp.User.RoleId).RoleName;

                var projectIds = _context.ProjectUsers.Where(p => p.UserId == temp.User.UserId).Select(c => c.ProjectId).ToList();

                temp.MemberOfProjects = _context.Projects.Where(p => projectIds.Contains(p.ProjectId))
                                        .Select(p => p.ProjectName).ToList();

                // All user to view model
                vm.SelectedUser = temp;
            }

            // Get project names from the database
            vm.ProjectNames = _context.Projects.Select(p => p.ProjectName).ToList();
            // Get roles from the database
            vm.AllRoles = _context.Roles.Select(r => r.RoleName).ToList();

            // Return the view
            return(View(vm));
        }