public async Task <ActionResult <IEnumerable <Agreement> > > GetEnrolleeAgreements(int enrolleeId, [FromQuery] AgreementFilters filters) { var record = await _enrolleeService.GetPermissionsRecordAsync(enrolleeId); if (record == null) { return(NotFound(ApiResponse.Message($"Enrollee not found with id {enrolleeId}"))); } if (!record.ViewableBy(User)) { return(Forbid()); } var agreements = await _agreementService.GetEnrolleeAgreementsAsync(enrolleeId, filters); if (User.IsAdmin()) { await _businessEventService.CreateAdminViewEventAsync(enrolleeId, "Admin viewing PRIME History"); } return(Ok(ApiResponse.Result(agreements))); }
public async Task <ActionResult <IEnumerable <EnrolmentCardViewModel> > > GetEnrolleeEnrolmentCards(int enrolleeId, [FromQuery] AgreementFilters filters) { var record = await _enrolleeService.GetPermissionsRecordAsync(enrolleeId); if (record == null) { return(NotFound(ApiResponse.Message($"Enrollee not found with id {enrolleeId}"))); } if (!record.ViewableBy(User)) { return(Forbid()); } var enrolmentCards = new List <EnrolmentCardViewModel>(); var agreements = await _agreementService.GetEnrolleeAgreementsAsync(enrolleeId, filters); foreach (var agreement in agreements) { var submission = await _enrolleeSubmissionService.GetEnrolleeSubmissionBeforeDateAsync(enrolleeId, agreement.AcceptedDate.Value); var card = new EnrolmentCardViewModel { AgreementId = agreement.Id, AgreementAcceptedDate = agreement.AcceptedDate, Submission = submission }; enrolmentCards.Add(card); } if (User.IsAdmin()) { await _businessEventService.CreateAdminViewEventAsync(enrolleeId, "Admin viewing PRIME History"); } return(Ok(ApiResponse.Result(enrolmentCards))); }
/// <summary> /// Get the list of agreements for an enrollee, using filters (No Tracking). /// </summary> public async Task <IEnumerable <Agreement> > GetEnrolleeAgreementsAsync(int enrolleeId, AgreementFilters filters) { filters ??= new AgreementFilters(); var agreements = await _context.Agreements .AsNoTracking() .Where(at => at.EnrolleeId == enrolleeId) .OrderByDescending(at => at.CreatedDate) .If(filters.OnlyLatest, q => q.Take(1)) .If(filters.Accepted == true || filters.YearAccepted.HasValue, q => q.Where(at => at.AcceptedDate.HasValue)) .If(filters.Accepted == false, q => q.Where(at => !at.AcceptedDate.HasValue)) .If(filters.IncludeText, q => q.Include(at => at.AgreementVersion).Include(at => at.LimitsConditionsClause)) .ToArrayAsync(); if (filters.YearAccepted.HasValue) { // NpgSQL does not support DateTimeOffset operations, this filtering must be done after fetching all the data :( agreements = agreements .Where(at => at.AcceptedDate.Value.Year == filters.YearAccepted) .ToArray(); } if (filters.IncludeText) { await RenderHtml(agreements); } return(agreements); }