public ActionResult Index(TimeSheetEntrySearchViewModel vm)
        {
            ViewBag.ProjectId = new MultiSelectList(_projectRepository.GetAll().OrderBy(p => p.Title), "Id", "Title", vm.ProjectId);
            ViewBag.UserId    = new MultiSelectList(_userRepository.GetAllBy(u => u.EmployeeStatus != EmployeeStatus.Ex && u.Id != 1, "Person").ToList().OrderBy(p => p.Person.Name), "Id", "Person.Name", vm.UserId);

            Func <IQueryable <TimeSheetLineItem>, IQueryable <TimeSheetLineItem> > timeSheetLineItemFilter = q =>
            {
                q = q.Include(t => t.Project).Include("TimeSheet.CreatedByUser.Person");

                if (vm.ProjectId != null && vm.ProjectId.Any())
                {
                    q = q.Where(r => vm.ProjectId.Contains(r.ProjectId));
                }

                if (vm.UserId != null && vm.UserId.Any())
                {
                    q = q.Where(r => vm.UserId.Contains(r.TimeSheet.CreatedByUserId));
                }

                if (vm.State.HasValue)
                {
                    q = q.Where(r => r.TimeSheet.State == vm.State.Value);
                }

                if (vm.StartDate.HasValue)
                {
                    q = q.Where(r => r.TimeSheet.Date >= vm.StartDate.Value);
                }

                if (vm.EndDate.HasValue)
                {
                    q = q.Where(r => r.TimeSheet.Date <= vm.EndDate.Value);
                }

                if (vm.WorkType.HasValue)
                {
                    q = q.Where(r => r.WorkType == vm.WorkType.Value);
                }

                return(q);
            };

            vm.TimeSheetLineItems = _timeSheetLineItemRepository.SearchPage(timeSheetLineItemFilter, o => o.OrderByDescending(c => c.TimeSheet.Date), vm.GetPageNo(), vm.PageSize);

            return(View(vm));
        }
        public ActionResult Download(TimeSheetEntrySearchViewModel vm)
        {
            Func <IQueryable <TimeSheetLineItem>, IQueryable <TimeSheetLineItem> > timeSheetLineItemFilter = q =>
            {
                q = q.Include(t => t.Project).Include("TimeSheet.CreatedByUser.Person").Include("TimeSheet.CreatedByUser.Department").Include("Project").Include("Task");

                if (vm.ProjectId != null && vm.ProjectId.Any())
                {
                    q = q.Where(r => vm.ProjectId.Contains(r.ProjectId));
                }

                if (vm.UserId != null && vm.UserId.Any())
                {
                    q = q.Where(r => vm.UserId.Contains(r.TimeSheet.CreatedByUserId));
                }

                if (vm.State.HasValue)
                {
                    q = q.Where(r => r.TimeSheet.State == vm.State.Value);
                }

                if (vm.StartDate.HasValue)
                {
                    q = q.Where(r => r.TimeSheet.Date >= vm.StartDate.Value);
                }

                if (vm.EndDate.HasValue)
                {
                    q = q.Where(r => r.TimeSheet.Date <= vm.EndDate.Value);
                }

                if (vm.WorkType.HasValue)
                {
                    q = q.Where(r => r.WorkType == vm.WorkType.Value);
                }

                q = q.OrderByDescending(d => d.CreatedOn);

                return(q);
            };

            var timeSheets = _timeSheetLineItemRepository.Search(timeSheetLineItemFilter);

            return(ExportAsCSV(timeSheets));
        }