public async Task <IActionResult> AllProjects(ProjectSearchForTable projectparams) { if (projectparams != null) { projectparams.UserName = this.User.Identity.Name; this.ViewData["Filter"] = projectparams; } return(this.View(await this.projectservice.GetAllProjects(projectparams))); }
public async Task <ProjectsTable> GetAllProjects(ProjectSearchForTable projectparams) { int pageSize = 6; User user = await _usermanager.FindByNameAsync(projectparams.UserName); ProjectsTable projectsinfo = new ProjectsTable(); if (user != null) { IEnumerable <ProjectModelToTable> projects = await _dbcontext.Set <Project>() .Include(p => p.User).Include(p => p.Issues) .Join((await _dbcontext.Set <Team>().ToListAsync()), p => p.Id, t => t.ProjectId, (p, t) => new ProjectModelToTable() { ProjectId = p.Id, Name = p.Name, Owner = p.User.Email, Issues = p.Issues.Where(i => i.UserId == t.UserId).Count(), DoneIssues = p.Issues.Where(i => i.Status == Status.Done && i.UserId == t.UserId).Count(), UserIdWhoView = t.UserId }) .Where(p => p.UserIdWhoView == user.Id) .ToListAsync(); if (!String.IsNullOrEmpty(projectparams.Name)) { projects = projects.Where(p => p.Name.ToLower().Contains(projectparams.Name.ToLower())); } int projectsCount = projects.Count(); if (projectparams.Page > (int)Math.Ceiling((decimal)projectsCount / pageSize) || projectparams.Page < 1) { projectparams.Page = 1; } switch (projectparams.OrderBy) { case "NameUp": { projects = projects.OrderBy(e => e.Name).ToList(); break; } case "NameDown": { projects = projects.OrderByDescending(e => e.Name).ToList(); break; } case "None": { projects = (projects).ToList().OrderBy(p => p.Percentage); break; } default: { projects = (projects).ToList().OrderBy(p => p.Percentage); break; } } projectsinfo.projects = projects.Skip((projectparams.Page - 1) * pageSize).Take(pageSize).ToList();; projectsinfo.PageInfo = new PageInfo { PageNumber = projectparams.Page, PageSize = pageSize, TotalItems = projectsCount }; return(projectsinfo); } else { throw new Exception("User not found"); } }