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)));
        }
Exemple #3
0
        /// <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);
        }