public async Task <ActionResult <AccessTerm> > GetAccessTerm(int enrolleeId, int accessTermId)
        {
            var enrollee = await _enrolleeService.GetEnrolleeAsync(enrolleeId);

            if (enrollee == null)
            {
                return(NotFound(ApiResponse.Message($"Enrollee not found with id {enrolleeId}")));
            }

            if (!User.CanView(enrollee))
            {
                return(Forbid());
            }

            if (!await _accessTermService.AccessTermExistsOnEnrolleeAsync(accessTermId, enrolleeId))
            {
                return(NotFound(ApiResponse.Message($"Access term not found with id {accessTermId} for enrollee id: {enrolleeId}")));
            }

            AccessTerm accessTerm = await _accessTermService.GetEnrolleesAccessTermAsync(enrolleeId, accessTermId);

            accessTerm.TermsOfAccess = await _razorConverterService.RenderViewToStringAsync("/Views/TermsOfAccess.cshtml", accessTerm);

            if (User.IsAdmin())
            {
                await _businessEventService.CreateAdminViewEventAsync(enrollee.Id, "Admin viewing Terms of Access");
            }

            return(Ok(ApiResponse.Result(accessTerm)));
        }
Exemple #2
0
        /**
         * Generates an Access Term based off of the enrollee
         */
        private async Task <AccessTerm> GenerateAccessTermAsync(Enrollee enrollee)
        {
            var accessTerms = new AccessTerm {
                Enrollee = enrollee
            };

            accessTerms.GlobalClause = await GetGlobalClause();

            accessTerms.UserClause = await GetUserClause(enrollee);

            accessTerms.AccessTermLicenseClassClauses
            .AddRange(await GetAccessTermLicenseClassClauses(enrollee, accessTerms));
            accessTerms.LimitsConditionsClause = await GetAccessTermLimitsConditionsClause(enrollee);

            return(accessTerms);
        }
        public async Task <ActionResult <AccessTerm> > GetAccessTermLatest(int enrolleeId, [FromQuery] bool signed)
        {
            var enrollee = await _enrolleeService.GetEnrolleeAsync(enrolleeId);

            if (enrollee == null)
            {
                return(NotFound(ApiResponse.Message($"Enrollee not found with id {enrolleeId}")));
            }

            if (!User.CanView(enrollee))
            {
                return(Forbid());
            }

            AccessTerm accessTerm = (signed)
                ? await _accessTermService.GetMostRecentAcceptedEnrolleesAccessTermAsync(enrolleeId)
                : await _accessTermService.GetMostRecentNotAcceptedEnrolleesAccessTermAsync(enrolleeId);

            accessTerm.TermsOfAccess = await _razorConverterService.RenderViewToStringAsync("/Views/TermsOfAccess.cshtml", accessTerm);

            return(Ok(ApiResponse.Result(accessTerm)));
        }
        public async Task <ActionResult <EnrolleeProfileVersion> > GetEnrolmentForAccessTerm(int enrolleeId, int accessTermId)
        {
            var enrollee = await _enrolleeService.GetEnrolleeAsync(enrolleeId);

            if (enrollee == null)
            {
                return(NotFound(ApiResponse.Message($"Enrollee not found with id {enrolleeId}")));
            }

            if (!User.CanView(enrollee))
            {
                return(Forbid());
            }

            AccessTerm acceptedAccessTerm = await _accessTermService.GetEnrolleesAccessTermAsync(enrolleeId, accessTermId);

            if (acceptedAccessTerm == null)
            {
                return(NotFound(ApiResponse.Message($"Accepted Access Term not found with id {accessTermId} for enrollee with id {enrolleeId}")));
            }

            var enrolleeProfileHistory = await _enrolleeProfileVersionService
                                         .GetEnrolleeProfileVersionBeforeDateAsync(enrolleeId, (DateTimeOffset)acceptedAccessTerm.AcceptedDate);

            if (enrolleeProfileHistory == null)
            {
                return(NotFound(ApiResponse.Message($"No enrolment profile history found for Access Term with id {accessTermId} for enrollee with id {enrolleeId}.")));
            }

            if (User.IsAdmin())
            {
                await _businessEventService.CreateAdminViewEventAsync(enrollee.Id, "Admin viewing Enrolment in PRIME History");
            }

            return(Ok(ApiResponse.Result(enrolleeProfileHistory)));
        }
Exemple #5
0
        private async Task <IEnumerable <AccessTermLicenseClassClause> > GetAccessTermLicenseClassClauses(Enrollee enrollee, AccessTerm accessTerms)
        {
            var licenseClassClauses = new List <LicenseClassClause>();

            if (enrollee.Certifications.Count > 0)
            {
                foreach (var org in enrollee.EnrolleeOrganizationTypes)
                {
                    foreach (var cert in enrollee.Certifications)
                    {
                        var mappings = await _context.LicenseClassClauseMappings
                                       .Include(m => m.LicenseClassClause)
                                       .Where(m => m.LicenseCode == cert.LicenseCode)
                                       .Where(m => m.OrganizatonTypeCode == org.OrganizationTypeCode)
                                       .ToListAsync();

                        foreach (var mapping in mappings)
                        {
                            // Check if License Class Clause already in list
                            if (licenseClassClauses.FindAll(lcc => lcc.Id == mapping.LicenseClassClauseId).Count == 0)
                            {
                                licenseClassClauses.Add(mapping.LicenseClassClause);
                            }
                        }
                    }
                }
            }

            return(licenseClassClauses.Select(lcc => new AccessTermLicenseClassClause {
                AccessTerm = accessTerms, LicenseClassClause = lcc
            }));
        }