Untitled
unknown
csharp
a year ago
5.5 kB
10
Indexable
Never
// GET: Projects [Authorize] public async Task<IActionResult> Index(string? sortOrder, int? page, bool? sort, string? userId) { List<Project> SortedProjs = new List<Project>(); List<ApplicationUser> allUsers = (List<ApplicationUser>)await _users.GetUsersInRoleAsync("Developer"); List<SelectListItem> users = new List<SelectListItem>(); allUsers.ForEach(au => { users.Add(new SelectListItem(au.UserName, au.Id.ToString())); }); ViewBag.Users = users; switch (sortOrder) { case "Priority": if (sort == true) { SortedProjs = await _context.Projects .Include(p => p.CreatedBy) .Include(p => p.AssignedTo) .ThenInclude(at => at.ApplicationUser) .Include(p => p.Tickets.OrderByDescending(t => t.TicketPriority)) .ThenInclude(t => t.Owner) .ToListAsync(); } else { SortedProjs = await _context.Projects .Include(p => p.CreatedBy) .Include(p => p.AssignedTo) .ThenInclude(at => at.ApplicationUser) .Include(p => p.Tickets.OrderBy(t => t.TicketPriority)) .ThenInclude(t => t.Owner) .ToListAsync(); } break; case "RequiredHrs": if (sort == true) { SortedProjs = await _context.Projects .Include(p => p.CreatedBy) .Include(p => p.AssignedTo) .ThenInclude(at => at.ApplicationUser) .Include(p => p.Tickets.OrderByDescending(t => t.RequiredHours)) .ThenInclude(t => t.Owner) .ToListAsync(); } else { SortedProjs = await _context.Projects .Include(p => p.CreatedBy) .Include(p => p.AssignedTo) .ThenInclude(at => at.ApplicationUser) .Include(p => p.Tickets.OrderBy(t => t.RequiredHours)) .ThenInclude(t => t.Owner) .ToListAsync(); } break; case "Completed": SortedProjs = await _context.Projects .Include(p => p.CreatedBy) .Include(p => p.AssignedTo) .ThenInclude(at => at.ApplicationUser) .Include(p => p.Tickets.Where(t => t.Completed == true)) .ThenInclude(t => t.Owner) .ToListAsync(); break; default: if (userId != null) { SortedProjs = await _context.Projects .OrderBy(p => p.ProjectName) .Include(p => p.CreatedBy) .Include(p => p.AssignedTo) .ThenInclude(at => at.ApplicationUser) .Include(p => p.Tickets.Where(t => t.Owner.Id.Equals(userId))) .ThenInclude(t => t.Owner) .Include(p => p.Tickets).ThenInclude(t => t.TicketWatchers).ThenInclude(tw => tw.Watcher) .ToListAsync(); } else { SortedProjs = await _context.Projects .OrderBy(p => p.ProjectName) .Include(p => p.CreatedBy) .Include(p => p.AssignedTo) .ThenInclude(at => at.ApplicationUser) .Include(p => p.Tickets) .ThenInclude(t => t.Owner) .Include(p => p.Tickets).ThenInclude(t => t.TicketWatchers).ThenInclude(tw => tw.Watcher) .ToListAsync(); } break; } //check if User is PM or Develoer var LogedUserName = User.Identity.Name; // logined user name var user = _context.Users.FirstOrDefault(u => u.UserName == LogedUserName); var rolenames = await _users.GetRolesAsync(user); var AssinedProject = new List<Project>(); // geting assined project if (rolenames.Contains("Developer")) { AssinedProject = SortedProjs.Where(p => p.AssignedTo.Select(projectUser => projectUser.UserId).Contains(user.Id)).ToList(); } else { AssinedProject = SortedProjs; } X.PagedList.IPagedList<Project> projList = AssinedProject.ToPagedList(page ?? 1, 3); return View(projList); }