public ViewResult RecordsList(SortingInfo sortingInfo, string sortOrder, string searchString, int page = 1)
        {
            var userId = User.Identity.GetUserId();

            sortingInfo.DataSort        = String.IsNullOrEmpty(sortOrder) ? "date_desc" : "";
            sortingInfo.NameSort        = sortOrder == "name" ? "name_desc" : "name";
            sortingInfo.ChargeSort      = sortOrder == "charge" ? "charge_desc" : "charge";
            sortingInfo.CategorySort    = sortOrder == "category" ? "category_desc" : "category";
            sortingInfo.SubcategorySort = sortOrder == "subcategory" ? "subcategory_desc" : "subcategory";
            var parameters = _recordsRepository.Records.Where(p => p.UserID == userId);

            if (!String.IsNullOrEmpty(searchString))
            {
                parameters = parameters.Where(p => p.Name.Contains(searchString) ||
                                              p.Category.Contains(searchString) &&
                                              p.UserID == userId);
            }
            switch (sortOrder)
            {
            case "date_desc":
                parameters = parameters.OrderByDescending(s => s.Date);
                break;

            case "name":
                parameters = parameters.OrderBy(s => s.Name);
                break;

            case "name_desc":
                parameters = parameters.OrderByDescending(s => s.Name);
                break;

            case "category":
                parameters = parameters.OrderBy(s => s.Category);
                break;

            case "category_desc":
                parameters = parameters.OrderByDescending(s => s.Category);
                break;

            case "subcategory":
                parameters = parameters.OrderBy(s => s.Subcategory);
                break;

            case "subcategory_desc":
                parameters = parameters.OrderByDescending(s => s.Subcategory);
                break;

            case "charge":
                parameters = parameters.OrderBy(s => s.Charge);
                break;

            case "charge_desc":
                parameters = parameters.OrderByDescending(s => s.Charge);
                break;

            default:
                parameters = parameters.OrderBy(s => s.Date);
                break;
            }

            RecordsListViewModel model = new RecordsListViewModel
            {
                Records    = parameters.Skip((page - 1) * PageSize).Take(PageSize),
                PagingInfo = new PagingInfo
                {
                    CurrentPage  = page,
                    ItemsPerPage = PageSize,
                    TotalItems   = parameters.Count(),
                },
                SortingInfo = new SortingInfo
                {
                    CurrentSearch   = searchString,
                    CurrentSort     = sortOrder,
                    NameSort        = sortingInfo.NameSort,
                    CategorySort    = sortingInfo.CategorySort,
                    SubcategorySort = sortingInfo.SubcategorySort,
                    DataSort        = sortingInfo.DataSort,
                    ChargeSort      = sortingInfo.ChargeSort,
                }
            };

            return(View(model));
        }
Example #2
0
        public ActionResult Index(int page = 1, string column = "Created", bool descending = true)
        {
            IEnumerable <Record> query = db.Records;

            switch (column)
            {
            case "Created":
                if (descending)
                {
                    query = query.OrderByDescending(x => x.Created);
                }
                else
                {
                    query = query.OrderBy(x => x.Created);
                }

                break;

            case "UserName":
                if (descending)
                {
                    query = query.OrderByDescending(x => x.UserName);
                }
                else
                {
                    query = query.OrderBy(x => x.UserName);
                }

                break;

            case "EMail":
                if (descending)
                {
                    query = query.OrderByDescending(x => x.EMail);
                }
                else
                {
                    query = query.OrderBy(x => x.EMail);
                }

                break;

            default:
                query = query.OrderByDescending(x => x.Created);
                break;
            }
            ;


            query = query.Skip((page - 1) * PageSize).Take(PageSize);

            RecordsListViewModel model = new RecordsListViewModel
            {
                Records = query,

                PagingInfo = new PagingInfo
                {
                    CurrentPage  = page,
                    ItemsPerPage = PageSize,
                    TotalItems   = db.Records.Count()
                },

                SortingInfo = new SortingInfo
                {
                    Column     = column,
                    Descending = descending
                }
            };

            return(View(model));
        }