public ActionResult All() { bool isUserAdmin = UserRoleRepository.IsUserInRole(User.Identity.GetUserId(), nameof(UserRolesEnum.Admin)); bool isUserProjectManager = UserRoleRepository.IsUserInRole(User.Identity.GetUserId(), nameof(UserRolesEnum.ProjectManager)); // shouldn't happen ever if (!isUserAdmin && !isUserProjectManager) { ModelState.AddModelError("", "Error - You don't have permission to view this page"); return(RedirectToAction(nameof(Index))); } IQueryable <Project> allProjects = ProjectRepository.GetAllProjects(); List <ProjectIndexViewModel> viewModels; if (allProjects.Any()) { viewModels = allProjects.ToList().Select(project => ProjectIndexViewModel.CreateNewViewModel(project)).ToList(); } else { viewModels = new List <ProjectIndexViewModel>(); } return(View(viewModels)); }
// GET: Project public ActionResult Index() { IQueryable <Project> userProjects = ProjectRepository.GetUserProjects(User.Identity.GetUserId()); List <ProjectIndexViewModel> viewModels; if (userProjects.Any()) { viewModels = userProjects.ToList().Select(project => ProjectIndexViewModel.CreateNewViewModel(project)).ToList(); } else { viewModels = new List <ProjectIndexViewModel>(); } return(View(viewModels)); }
public static HomeIndexViewModel CreateNewViewModel( ApplicationUser applicationUser, ApplicationDbContext dbContext, int latestProjectIntakeLimit = 3, int latestCreatedTicketIntakeLimit = 3, int latestAssignedTicketIntakeLimit = 3) { if (applicationUser == null) { throw new ArgumentNullException(nameof(applicationUser)); } List <IdentityRole> roles = new UserRoleRepository(dbContext).GetUserRoles(applicationUser.Id); ProjectRepository projectRepository = new ProjectRepository(dbContext); List <ProjectIndexViewModel> latestProjects = projectRepository .GetUserProjects(applicationUser.Id)? .ToList() .OrderByDescending(project => project?.DateUpdated ?? project.DateCreated) .Take(latestProjectIntakeLimit) .Select(project => ProjectIndexViewModel.CreateNewViewModel(project)) .ToList() ?? new List <ProjectIndexViewModel>(); int numberOfCreatedTickets = 0; int numberOfAssignedTickets = 0; List <TicketIndexViewModel> latestCreatedTickets; List <TicketIndexViewModel> latestAssignedTickets; if (roles.Any(role => role.Name == nameof(UserRolesEnum.Submitter))) { //! get created tickets (Submitter) numberOfCreatedTickets = applicationUser.CreatedTickets?.Count ?? 0; latestCreatedTickets = applicationUser.CreatedTickets? .OrderByDescending(ticket => ticket?.DateUpdated ?? ticket.DateCreated) .Take(latestCreatedTicketIntakeLimit) .Select(ticket => TicketIndexViewModel.CreateNewViewModel(applicationUser.Id, ticket)) .ToList() ?? new List <TicketIndexViewModel>(); } else { //! if not (Submitter) latestCreatedTickets = new List <TicketIndexViewModel>(); } if (roles.Any(role => role.Name == nameof(UserRolesEnum.Developer))) { //! get assigned tickets (Developer) numberOfAssignedTickets = applicationUser.AssignedTickets?.Count ?? 0; latestAssignedTickets = applicationUser.AssignedTickets? .OrderByDescending(ticket => ticket?.DateUpdated ?? ticket.DateCreated) .Take(latestAssignedTicketIntakeLimit) .Select(ticket => TicketIndexViewModel.CreateNewViewModel(applicationUser.Id, ticket)) .ToList() ?? new List <TicketIndexViewModel>(); } else { //! if not (Developer) latestAssignedTickets = new List <TicketIndexViewModel>(); } TicketRepository ticketRepository = new TicketRepository(dbContext); try { return(new HomeIndexViewModel() { UserId = string.IsNullOrWhiteSpace(applicationUser.Id) ? throw new ArgumentNullException() : applicationUser.Id, DisplayName = string.IsNullOrWhiteSpace(applicationUser.DisplayName) ? throw new ArgumentNullException() : applicationUser.DisplayName, Email = string.IsNullOrWhiteSpace(applicationUser.Email) ? throw new ArgumentNullException() : applicationUser.Email, TotalProjectCount = projectRepository.GetUserProjects(applicationUser.Id)?.Count() ?? 0, LatestProjects = latestProjects?.Any() ?? false ? latestProjects : new List <ProjectIndexViewModel>(), Roles = (roles?.Any() ?? false) ? roles : new List <IdentityRole>(), TotalCreatedTicketCount = numberOfCreatedTickets, TotalAssignedTicketCount = numberOfAssignedTickets, LatestCreatedTickets = latestCreatedTickets, LatestAssignedTickets = latestAssignedTickets, AllProjectCount = projectRepository.GetAllProjects().Count(), //! NOTE: This depends on the table primary keys matching with the enum int value AllOpenTicketsCount = ticketRepository.GetAllTickets().Count(ticket => ticket.StatusId == (int)TicketStatusesEnum.Open), AllResovledTicketsCount = ticketRepository.GetAllTickets().Count(ticket => ticket.StatusId == (int)TicketStatusesEnum.Resolved), AllRejectedTicketsCount = ticketRepository.GetAllTickets().Count(ticket => ticket.StatusId == (int)TicketStatusesEnum.Rejected), }); }