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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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());
        }