public IPagedList<ReportDormantSpecialistsDto> GetDormantSpecialistsReport(DateTime startDate, DateTime endDate, string keyword, int currentPage, int pageSize, DormantSpecialistsSort sortBy = DormantSpecialistsSort.LastLogonDate, bool isDesc = true)
        {
            keyword = keyword.ToLower();

            DateTime lastLogonBefore3Month = DateTime.Now.AddMonths(-3);
            var listUsers = Repository.Query<TeleConsult.Domain.User>().Where(a => a.ModifiedDate <= lastLogonBefore3Month && a.Role == Role.Specialist);

            if (listUsers != null && listUsers.Any())
            {
                var _totalItem = listUsers.Count();

                switch (sortBy)
                {
                    case DormantSpecialistsSort.FirstName:
                        listUsers = isDesc ? listUsers.OrderByDescending(e => e.FirstName)
                            : listUsers.OrderBy(e => e.FirstName);
                        break;
                    case DormantSpecialistsSort.LastName:
                        listUsers = isDesc ? listUsers.OrderByDescending(e => e.LastName)
                            : listUsers.OrderBy(e => e.LastName);
                        break;
                    case DormantSpecialistsSort.EmailAddress:
                        listUsers = isDesc ? listUsers.OrderByDescending(e => e.Email)
                            : listUsers.OrderBy(e => e.Email);
                        break;
                    case DormantSpecialistsSort.UserName:
                        listUsers = isDesc ? listUsers.OrderByDescending(e => e.UserName)
                            : listUsers.OrderBy(e => e.UserName);
                        break;
                    case DormantSpecialistsSort.LastLogonDate:
                        listUsers = isDesc ? listUsers.OrderByDescending(e => e.ModifiedDate)
                                                    : listUsers.OrderBy(e => e.ModifiedDate);
                        break;
                    default:
                        listUsers = isDesc ? listUsers.OrderByDescending(e => e.ModifiedDate)
                                                    : listUsers.OrderBy(e => e.ModifiedDate);
                        break;
                }

                return listUsers.Skip(currentPage * pageSize).Take(pageSize).Select(p => new ReportDormantSpecialistsDto() {
                    FirstName = p.FirstName,
                    LastName = p.LastName,
                    EmailAddress = p.Email,
                    UserName = p.UserName,
                    LastLogonDate = p.ModifiedDate
                }).ToPagedList(currentPage, pageSize, _totalItem);

            }
            return null;
        }
 public ReportDormantSpecialistsModel(string keyWord, DormantSpecialistsSort sortBy, bool isDesc, int pageSize,
     int startDay, int startMonth, int startYear,
     int endDay, int endMonth, int endYear)
 {
     Pager = new PagerViewModel()
     {
         KeyWord = keyWord,
         SortBy = sortBy,
         IsDesc = isDesc,
         PageSize = pageSize,
         StartDay = startDay,
         StartMonth = startMonth,
         StartYear = startYear,
         EndDay = endDay,
         EndMonth = endMonth,
         EndYear = endYear
     };
 }
        public ActionResult DormantSpecialistsPaging(int? page, int? pageSize, string keyword = "",
            DormantSpecialistsSort sortBy = DormantSpecialistsSort.LastLogonDate, bool isDesc = false,
            int startDay = 0, int startMonth = 0, int startYear = 0,
            int endDay = 0, int endMonth = 0, int endYear = 0)
        {
            DateTime startDate;
            DateTime endDate;

            if (startYear == 0 || endYear == 0)
            {
                startDate = DateTime.Now.AddDays(-7);
                endDate = DateTime.Now;
            }
            else
            {
                startDate = new DateTime(startYear, startMonth, startDay);
                endDate = new DateTime(endYear, endMonth, endDay);
            }

            int _currentPageIndex = page.HasValue ? page.Value - 1 : 0;
            int _pageSize = pageSize.HasValue ? pageSize.Value : _itemPerPage;

            var list = AdminServices.DashboardService.GetDormantSpecialistsReport(startDate, endDate, keyword, _currentPageIndex, _pageSize, sortBy, isDesc);

            var model = new ReportDormantSpecialistsModel(keyword, sortBy, isDesc, _pageSize, startDay, startMonth, startYear, endDay, endMonth, endYear) { DormantSpecialists = list };

            return PartialView(_ajaxDormantSpecialists, model);
        }