public async Task <ViewResult> List(FilterGridDTO values)
        {
            //First, find the current user signed in to only show their records.
            User user = await userManager.GetUserAsync(User);

            //Create an instance of the AbsenceGridBuilder to save the route parameters for Sorting/Filtering the grid into a session.
            var gridBuilder = new AbsenceGridBuilder(HttpContext.Session, values, nameof(AbsenceRequest.StartDate));


            //Set all of the Query options based on route parameters. Will apply these options to the ViewModel list of absence requests at the time of initialization.
            var options = new AbsenceQueryOptions
            {
                Include          = "AbsenceType, DurationType, AbsenceStatus, User, AbsenceRequestPeriods",
                Where            = ar => ar.UserId == user.Id,
                OrderByDirection = gridBuilder.CurrentGrid.SortDirection,
            };

            options.FromDateRange(gridBuilder);
            options.Filter(gridBuilder);
            options.Sort(gridBuilder);


            //Create and initialize the View Model
            var model = new AbsenceListViewModel
            {
                //Set current route
                Grid = gridBuilder.CurrentGrid,

                //Absence Requests List with query options applied.
                AbsenceRequests = data.AbsenceRequests.List(options),

                //DropDown Lists
                AbsenceTypes  = data.AbsenceTypes.List(),
                DurationTypes = data.DurationTypes.List(),
                StatusTypes   = data.AbsenceStatusTypes.List(),
            };

            model.TotalPages = gridBuilder.GetTotalPages(model.AbsenceRequests.Count());

            //Finally Set the paging.
            model.AbsenceRequests = model.AbsenceRequests.Skip((gridBuilder.CurrentGrid.PageNumber - 1) * gridBuilder.CurrentGrid.PageSize).Take(gridBuilder.CurrentGrid.PageSize);

            return(View(model));
        }