public async Task <AllCasesOutputModel> GetCasesAsync( int skip, int take, string orderBy, int[] selectedStatuses, int[] selectedPriorities, string userId = null) { IQueryable <Case> query = dbContext.Cases.AsQueryable(); if (userId != null) { query = query.Where(c => c.UserId == userId || c.CaseModificationLogRecords.Any(cmlr => cmlr.UserId == userId)); } AllCasesOutputModel result = new AllCasesOutputModel { AllCases = await query .Where(c => selectedStatuses.Contains(c.StatusId) && selectedPriorities.Contains(c.PriorityId)) .CountAsync(), Cases = await query .Where(c => selectedStatuses.Contains(c.StatusId) && selectedPriorities.Contains(c.PriorityId)) .CustomCasesOrder(orderBy) .Skip(skip) .Take(take) .Select(c => new CaseOutputModel { Id = c.Id, Number = c.Number, CreatedOn = c.CreatedOn, Status = c.Status.Status, Priority = c.Priority.Priority, Subject = c.Subject, Agent = c.User.Email, }) .ToArrayAsync(), AllAvailableCaseStatuses = await dbContext.CaseStatuses .Select(cp => new CaseStatusOuputModel { Id = cp.Id, Status = cp.Status, }) .ToArrayAsync(), AllAvailableCasePriorities = await dbContext.CasePriorities .Select(cp => new CasePriorityOutputModel { Id = cp.Id, Priority = cp.Priority, }) .ToArrayAsync(), }; return(result); }
public async Task <AllCasesOutputModel> InputToOutputModelAsync(CasesIndexInputModel inputModel, string userId = null) { if (inputModel.PageNumber < 1) { inputModel.PageNumber = 1; } string[] possibleOrders = new[] { "CreatedOn-desc", "CreatedOn-asc", "Status-desc", "Status-asc", "Priority-desc", "Priority-asc", }; if (!possibleOrders.Contains(inputModel.OrderBy)) { inputModel.OrderBy = possibleOrders.First(); } const int casesPerPage = 10; int skip = (inputModel.PageNumber - 1) * casesPerPage; if (inputModel.SelectedStatuses == null) { inputModel.SelectedStatuses = await casesService.GetAllCaseStatusesIdsAsync(); } if (inputModel.SelectedPriorities == null) { inputModel.SelectedPriorities = await casesService.GetAllCasePrioritiesIdsAsync(); } AllCasesOutputModel outputModel = await casesService .GetCasesAsync(skip, casesPerPage, inputModel.OrderBy, inputModel.SelectedStatuses, inputModel.SelectedPriorities, userId); outputModel.OrderedBy = inputModel.OrderBy; outputModel.SelectedStatuses = inputModel.SelectedStatuses; outputModel.SelectedPriorities = inputModel.SelectedPriorities; outputModel.LastPage = (int)Math.Ceiling((double)outputModel.AllCases / casesPerPage); return(outputModel); }
public async Task <IActionResult> Index(CasesIndexInputModel inputModel) { AllCasesOutputModel outputModel = await casesTableInputToOutputModelService.InputToOutputModelAsync(inputModel); if (outputModel.LastPage == 0) { return(View(outputModel)); } if (inputModel.PageNumber > outputModel.LastPage) { return(RedirectToAction("Index", new { page = outputModel.LastPage })); } outputModel.CurrentPage = inputModel.PageNumber; outputModel.Announcements = await announcementsService.GetAnnouncementsAsync(); return(View(outputModel)); }
public async Task <IActionResult> OnGetAsync(CasesIndexInputModel inputModel) { string userId = userManager.GetUserId(User); OutputModel = await casesTableInputToOutputModelService.InputToOutputModelAsync(inputModel, userId); // If there are no results and need for paging just return model with empty Cases collection and don't do any paging logic if (OutputModel.LastPage == 0) { return(Page()); } if (inputModel.PageNumber > OutputModel.LastPage) { return(RedirectToPage("MyCases", new { page = OutputModel.LastPage })); } OutputModel.CurrentPage = inputModel.PageNumber; return(Page()); }