private ActionResult ReturnCategoryView(int? id, int? ticketsPage)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            var category = this.Data.Categories.GetById((int)id);

            if (category == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.NotFound);
            }

            var pageIndex = ticketsPage.GetValueOrDefault(1);
            var ticketsList = this.Data.Tickets.All()
                                  .Where(t => t.CategoryId == category.Id)
                                  .AsEnumerable()
                                  .Select(t => new TicketSummaryViewModel
                                         {
                                             Id = t.Id,
                                             Title = t.Title,
                                             CategoryName = t.Category.Name,
                                             AuthorName = t.Author.UserName,
                                             Priority = t.Priority,
                                             Status = t.Status
                                         })
                                  .OrderByDescending(t => t.SearchRelevance)
                                  .ThenByDescending(t => t.Id);

            var pagedTicketsList = ticketsList
                                              .Skip((pageIndex - 1) * Properties.Settings.Default.TicketsPageSize)
                                              .Take(Properties.Settings.Default.TicketsPageSize);

            var pagesCount = (int)Math.Ceiling((double)ticketsList.Count() / Properties.Settings.Default.TicketsPageSize);

            var ticketsViewModel = new TicketsFilterableViewModel
            {
                TicketsList = pagedTicketsList,
                PagesCount = pagesCount,
                TotalRecordsCount = ticketsList.Count()
            };

            var viewModel = new CategoryDetailsViewModel
            {
                Id = category.Id,
                Name = category.Name,
                Tickets = ticketsViewModel
            };

            return View(viewModel);
        }
        public ActionResult Index(TicketFilter filter, int? page)
        {
            var pageIndex = page.GetValueOrDefault(1);
            var filteredTicketsList = this.ApplyFilter(filter)
                                          .AsEnumerable()
                                          .Select(t => new TicketSummaryViewModel
                                                 {
                                                     Id = t.Id,
                                                     Title = t.Title,
                                                     CategoryName = t.Category.Name,
                                                     AuthorName = t.Author.UserName,
                                                     Priority = t.Priority,
                                                     Status = t.Status,
                                                     SearchRelevance = Helpers.Filter.CalcualteFilterTicketRelevance(t, filter.Q)
                                                 })
                                          .Where(t => t.SearchRelevance > 0 && t.Status != TicketStatus.Closed && t.Status != TicketStatus.Duplicate)
                                          .OrderByDescending(t => t.SearchRelevance)
                                          .ThenByDescending(t => t.Id);

            var pagedTicketsList = filteredTicketsList
                                                      .Skip((pageIndex - 1) * Properties.Settings.Default.TicketsPageSize)
                                                      .Take(Properties.Settings.Default.TicketsPageSize);

            var pagesCount = (int)Math.Ceiling((double)filteredTicketsList.Count() / Properties.Settings.Default.TicketsPageSize);
            var categoriesList = this.GetFilterList(t => new SelectListItem { Value = t.CategoryId.ToString(), Text = t.Category.Name });
            var prioritiesList = this.GetFilterList(t => new SelectListItem { Value = t.Priority.ToString(), Text = t.Priority.ToString() });
            var statusesList = this.GetFilterList(t => new SelectListItem { Value = t.Status.ToString(), Text = t.Status.ToString() });
            var authorsList = this.GetFilterList(t => new SelectListItem { Value = t.AuthorId.ToString(), Text = t.Author.UserName.ToString() });
            var titlesList = this.GetFilterList(t => new SelectListItem { Value = t.Title.ToString(), Text = t.Title.ToString() });

            var viewModel = new TicketsFilterableViewModel
            {
                TicketsList = pagedTicketsList,
                Filter = filter,
                PagesCount = pagesCount,
                TotalRecordsCount = filteredTicketsList.Count(),
                MetaData = new TicketsMetaDataViewModel
                {
                    CategoriesList = categoriesList,
                    PrioritiesList = prioritiesList,
                    StatusesList = statusesList,
                    AuthorsList = authorsList,
                    TitlesList = titlesList
                }
            };

            return View(viewModel);
        }