public async Task <IActionResult> OnPostExportToCsv(GetSubmissions.Query query) { query.PageNo = 1; query.PageSize = int.MaxValue; var submissions = await _engine.Query(query); using (var stream = new System.IO.MemoryStream()) using (var writer = new System.IO.StreamWriter(stream)) using (var csv = new CsvHelper.CsvWriter(writer, new CsvHelper.Configuration.CsvConfiguration(System.Globalization.CultureInfo.CurrentUICulture))) { csv.WriteRecords(submissions.Select(x => new { Timestamp = x.Timestamp.ToString(), FirstName = x.FirstName, LastName = x.LastName, FullName = x.FullName, EmailAddress = x.Email.ToString(), PhoneNumber = x.PhoneNumber.ToString(), Region = x.Region, HasLecturerRights = x.HasLecturerRights, HasResigned = x.HasResignedPermanently || x.HasResignedTemporarily })); csv.Flush(); writer.Flush(); return(File(stream.ToArray(), "text/csv", "enrollments.csv")); } }
public async Task <IActionResult> GetSubmissions([FromQuery] GetSubmissions.Query query) { return(Ok(await _engine.Query(query))); }
public async Task <IPagedList <GetSubmissions.SubmissionSummary> > Handle(GetSubmissions.Query query, CancellationToken cancellationToken) { var now = _clock.GetCurrentInstant(); var today = now.InMainTimezone().Date; var latestCampaign = (await _campaignRepo.GetAll()) .OrderByDescending(x => x.StartDateTime, OffsetDateTime.Comparer.Instant) .FirstOrDefault(); var latestCampaignId = latestCampaign?.Id; var results = _repo.Query(); if (query.SearchPattern != null) { results = results.Where(x => x.FullName.ContainsCaseInsensitive(query.SearchPattern) || x.Email.ToString().ContainsCaseInsensitive(query.SearchPattern) || x.PhoneNumber.ToString().ContainsCaseInsensitive(query.SearchPattern) || x.AboutMe.ContainsCaseInsensitive(query.SearchPattern) || x.Region.ContainsCaseInsensitive(query.SearchPattern) || x.PreferredLecturingCities.Any(x => x.ContainsCaseInsensitive(query.SearchPattern)) || x.PreferredTrainings.Any(y => y.City.ContainsCaseInsensitive(query.SearchPattern)) || x.Id.ToString().ContainsCaseInsensitive(query.SearchPattern) ); } if (query.CampaignIds != null && query.CampaignIds.Any()) { results = results.Where(x => query.CampaignIds.Contains(x.Campaign.Id)); } if (query.PreferredTrainingIds != null && query.PreferredTrainingIds.Any()) { results = results.Where(x => x.PreferredTrainings.Select(y => y.ID).Intersect(query.PreferredTrainingIds).Any()); } if (query.HasLecturerRights != null) { results = results.Where(x => x.HasLecturerRights == query.HasLecturerRights); } if (query.HasResigned == true) { results = results.Where(x => x.HasResignedPermanently || x.HasResignedTemporarilyAsOf(_clock.GetCurrentInstant())); } if (query.HasResigned == false) { results = results.Where(x => x.HasResignedPermanently == false && x.HasResignedTemporarilyAsOf(_clock.GetCurrentInstant()) == false); } if (query.EnrollmentAge == GetSubmissions.EnrollmentAge.LatestCampaign) { results = results.Where(x => x.Campaign.Id == latestCampaignId); } else if (query.EnrollmentAge == GetSubmissions.EnrollmentAge.OldCampaign) { results = results.Where(x => x.Campaign.Id != latestCampaignId); } if (query.SortBy.HasValue) { results = results.OrderBy(query.SortBy.Value.ToString()); } else { results = results.OrderBy(x => x.Timestamp); } var pagedList = await results .Select(x => new GetSubmissions.SubmissionSummary() { Id = x.Id.GetGuid(), Timestamp = x.Timestamp.InMainTimezone().ToOffsetDateTime(), FirstName = x.FirstName, LastName = x.LastName, FullName = x.FullName, Email = x.Email, PhoneNumber = x.PhoneNumber, AboutMe = x.AboutMe, Campaign = new GetSubmissions.CampaignSummary() { ID = x.Campaign.Id, Name = x.Campaign.Name, StartDate = x.Campaign.StartDateTime.Date, EndDate = x.Campaign.EndDateTime.Date }, Region = x.Region, PreferredLecturingCities = x.PreferredLecturingCities, PreferredTrainings = x.PreferredTrainings .OrderBy(y => y.StartDateTime, OffsetDateTime.Comparer.Instant) .Select(y => new GetSubmissions.PreferredTrainingSummary() { ID = y.ID, Address = y.Address, City = y.City, StartDateTime = y.StartDateTime, EndDateTime = y.EndDateTime, CoordinatorID = y.CoordinatorID }).ToArray(), HasResignedPermanently = x.HasResignedPermanently, HasResignedTemporarily = x.HasResignedTemporarilyAsOf(_clock.GetCurrentInstant()), ResumeDate = x.ResumeDate.HasValue && x.ResumeDate.Value > today ? x.ResumeDate : null, HasLecturerRights = x.HasLecturerRights, IsCurrentSubmission = x.Campaign.Id == latestCampaignId, IsOldSubmission = x.Campaign.Id != latestCampaignId }) .ToPagedListAsync(query.PageNo, query.PageSize); return(pagedList); }