public ActionResult GenerateDonorReport(DonorReportSetupVideModel reportSetup)
        {
            var donors = reportSetup.AuctionYearFilter == 0 ?
                Mapper.Map<IEnumerable<Donor>, IEnumerable<DonorReportViewModel>>(repo.GetDonors()).ToList()
                :
                Mapper.Map<IEnumerable<Donor>, IEnumerable<DonorReportViewModel>>(repo.GetDonors(reportSetup.AuctionYearFilter)).ToList();

            donors = ApplyDonorFilters(donors, reportSetup);

            if (reportSetup.BusinessType == false)
                donors.Where(x => x.DonorType == "Business").ToList().ForEach(x => donors.Remove(x));

            if (reportSetup.ParentType == false)
                donors.Where(x => x.DonorType == "Parent").ToList().ForEach(x => donors.Remove(x));

            var reportHtml = new StringBuilder();

            reportHtml.AppendLine("<h3>" + reportSetup.ReportTitle + "</h3>");
            reportHtml.AppendLine("<table class=\"customReport\">");
            reportHtml.AppendLine("<tbody>");

            var selectedColumns = GetSelectedColumns(reportSetup);

            BuildHeaders(selectedColumns, reportHtml, reportSetup.IncludeRowNumbers);

            BuildReportBody(selectedColumns, donors, reportHtml, reportSetup.IncludeRowNumbers);

            reportHtml.AppendLine("</tbody>");
            reportHtml.AppendLine("</table>");

            var result = new ContentResult() { Content = reportHtml.ToString() };

            return result;
        }
        private static List<DonorReportViewModel> ApplyDonorFilters(List<DonorReportViewModel> donors, DonorReportSetupVideModel reportSetup)
        {
            if (!string.IsNullOrEmpty(reportSetup.GeoLocationFilter))
                donors.Where(x => x.GeoLocation == null || !x.GeoLocation.ToLower().Contains(reportSetup.GeoLocationFilter.ToLower()))
                      .ToList()
                      .ForEach(x => donors.Remove(x));

            if (!string.IsNullOrEmpty(reportSetup.ProcurerFilter))
                donors.Where(x => x.Procurer == null || !x.Procurer.ToLower().Contains(reportSetup.ProcurerFilter.ToLower()))
                      .ToList()
                      .ForEach(x => donors.Remove(x));

            if (!string.IsNullOrEmpty(reportSetup.DonatesFilter))
                donors.Where(x => x.Donates == null || !x.Donates.ToLower().Contains(reportSetup.DonatesFilter.ToLower()))
                      .ToList()
                      .ForEach(x => donors.Remove(x));

            return donors;
        }