public FileContentResult RequirementsByCategoryCSV(RequirementSearchViewModel vm)
        {
            Func <IQueryable <Requirement>, IQueryable <Requirement> > requirementFilter = q =>
            {
                if (vm.SourceId.HasValue)
                {
                    q = q.Where(r => r.SourceId == vm.SourceId.Value);
                }

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

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

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

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

                return(q);
            };

            var csv = new StringBuilder();
            var requirementsByCategory = _requirementRepository.Search(requirementFilter).GroupBy(l => l.Category.Title)
                                         .Select(x => new
            {
                x.Key,
                Value = x.Count()
            })
                                         .ToList();

            var keys = string.Join(",", requirementsByCategory.Select(x => x.Key).ToArray());

            csv.AppendLine(keys);
            var values = string.Join(",", requirementsByCategory.Select(x => x.Value).ToArray());

            csv.AppendLine(values);
            return(File(new UTF8Encoding().GetBytes(csv.ToString()), "text/csv", "RequirementsByCategoryCSV.csv"));
        }
Exemple #2
0
        public ActionResult Download(RequirementSearchViewModel vm)
        {
            Func <IQueryable <Requirement>, IQueryable <Requirement> > requirementFilter = q =>
            {
                q = q.Include(r => r.Category).Include(r => r.Source);

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

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

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

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

                if (!string.IsNullOrEmpty(vm.Title))
                {
                    q = q.Where(r => r.Title.Contains(vm.Title));
                }

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

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

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

                return(q);
            };

            var requirements = _requirementRepository.Search(requirementFilter).ToList();

            return(ExportAsCSV(requirements));
        }