public GatherStandardsHandler(IUnitOfWork unitOfWork, IStandardService standardService, IStandardRepository standardRepository, ILogger <GatherStandardsHandler> logger)
 {
     _unitOfWork         = unitOfWork;
     _standardService    = standardService;
     _standardRepository = standardRepository;
     _logger             = logger;
 }
        public CreateBatchCertificateRequestValidator(
            IStringLocalizer <BatchCertificateRequestValidator> localiser,
            IOrganisationQueryRepository organisationQueryRepository,
            IIlrRepository ilrRepository,
            ICertificateRepository certificateRepository,
            IStandardService standardService)
        {
            Include(new BatchCertificateRequestValidator(localiser, organisationQueryRepository, ilrRepository, standardService));

            RuleFor(m => m.CertificateReference).Empty().WithMessage("Certificate reference must be empty").DependentRules(() =>
            {
                RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                {
                    var existingCertificate = await certificateRepository.GetCertificate(m.Uln, m.StandardCode);
                    var sumbittingEpao      = await organisationQueryRepository.GetByUkPrn(m.UkPrn);
                    var learnerDetails      = await ilrRepository.Get(m.Uln, m.StandardId.GetValueOrDefault());

                    if (existingCertificate != null && existingCertificate.Status != CertificateStatus.Deleted)
                    {
                        if (sumbittingEpao?.Id != existingCertificate.OrganisationId)
                        {
                            context.AddFailure(new ValidationFailure("CertificateData", $"Your organisation is not the creator of the EPA"));
                        }
                        else if (existingCertificate.Status == CertificateStatus.Draft)
                        {
                            var certData = JsonConvert.DeserializeObject <CertificateData>(existingCertificate.CertificateData);

                            if (!string.IsNullOrEmpty(certData.OverallGrade) && certData.AchievementDate.HasValue && !string.IsNullOrEmpty(certData.ContactPostCode))
                            {
                                context.AddFailure(new ValidationFailure("CertificateData", $"Certificate already exists: {existingCertificate.CertificateReference}"));
                            }
                            else if (!EpaOutcome.Pass.Equals(certData.EpaDetails?.LatestEpaOutcome, StringComparison.InvariantCultureIgnoreCase))
                            {
                                context.AddFailure(new ValidationFailure("CertificateData", $"Latest EPA Outcome has not passed"));
                            }
                        }
                        else
                        {
                            context.AddFailure(new ValidationFailure("CertificateData", $"Certificate already exists: {existingCertificate.CertificateReference}"));
                        }
                    }

                    if (learnerDetails != null)
                    {
                        if (learnerDetails.CompletionStatus == (int)CompletionStatus.Withdrawn)
                        {
                            context.AddFailure(new ValidationFailure("LearnerDetails", "Cannot find the apprentice details"));
                        }
                        else if (learnerDetails.CompletionStatus == (int)CompletionStatus.TemporarilyWithdrawn)
                        {
                            context.AddFailure(new ValidationFailure("LearnerDetails", "Cannot find the apprentice details"));
                        }
                    }
                    else
                    {
                        context.AddFailure(new ValidationFailure("LearnerDetails", $"Learner details for ULN: {m.Uln} not found"));
                    }
                });
            });
        }
Example #3
0
 public UpdateBatchCertificateHandler(ICertificateRepository certificateRepository, IContactQueryRepository contactQueryRepository, ILogger <UpdateBatchCertificateHandler> logger, IStandardService standardService)
 {
     _certificateRepository  = certificateRepository;
     _contactQueryRepository = contactQueryRepository;
     _logger          = logger;
     _standardService = standardService;
 }
 public SearchStandardsHandler(IStandardService standardService, ILogger <SearchStandardsHandler> logger, ISpecialCharacterCleanserService cleanser, IEpaOrganisationValidator validator)
 {
     _standardService = standardService;
     _logger          = logger;
     _cleanser        = cleanser;
     _validator       = validator;
 }
Example #5
0
 public StandardGeneticLineController(IStandardGeneticLineService service, IStandardService standardService,
                                      IGeneticLineService geneticLineService, IStandardItemService standardItemService)
 {
     _service             = service;
     _standardService     = standardService;
     _geneticLineService  = geneticLineService;
     _standardItemService = standardItemService;
 }
 public StandardGeneticLineController(IStandardGeneticLineService service, IStandardService standardService, 
                 IGeneticLineService geneticLineService, IStandardItemService standardItemService)
 {
     _service = service;
     _standardService = standardService;
     _geneticLineService = geneticLineService;
     _standardItemService = standardItemService;
 }
 /// <summary>
 /// Construct service.
 /// </summary>
 /// <param name="log"></param>
 /// <param name="service"></param>
 /// <param name="args"></param>
 public ServiceEntryPoint(ILog log, IStandardService service, string[] args)
 {
     _log             = log;
     AssemblyFilePath = Assembly.GetEntryAssembly() == null ? "" : Assembly.GetEntryAssembly().Location;
     WorkingDirectory = Environment.CurrentDirectory;
     Parameters       = new CommandLineParser(args);
     ServiceReference = service;
     AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException;
 }
Example #8
0
 public GetBatchLearnerHandler(IMediator mediator, ILogger <GetBatchLearnerHandler> logger, ILearnerRepository learnerRepository, IOrganisationQueryRepository organisationRepository, IStandardService standardService, ICertificateRepository certificateRepository)
 {
     _mediator               = mediator;
     _logger                 = logger;
     _learnerRepository      = learnerRepository;
     _organisationRepository = organisationRepository;
     _standardService        = standardService;
     _certificateRepository  = certificateRepository;
 }
 public EpaOrganisationValidator(IRegisterValidationRepository registerRepository, IRegisterQueryRepository registerQueryRepository,
                                 ISpecialCharacterCleanserService cleanserService, IStringLocalizer <EpaOrganisationValidator> localizer, IStandardService standardService)
 {
     _registerRepository      = registerRepository;
     _registerQueryRepository = registerQueryRepository;
     _cleanserService         = cleanserService;
     _localizer       = localizer;
     _standardService = standardService;
 }
 public StartCertificateHandler(ICertificateRepository certificateRepository, IIlrRepository ilrRepository, IAssessmentOrgsApiClient assessmentOrgsApiClient,
                                IOrganisationQueryRepository organisationQueryRepository, ILogger <StartCertificateHandler> logger, IStandardService standardService)
 {
     _certificateRepository       = certificateRepository;
     _ilrRepository               = ilrRepository;
     _assessmentOrgsApiClient     = assessmentOrgsApiClient;
     _organisationQueryRepository = organisationQueryRepository;
     _logger          = logger;
     _standardService = standardService;
 }
Example #11
0
 public StartCertificateHandler(ICertificateRepository certificateRepository, ILearnerRepository learnerRepository, IProvidersRepository providersRepository,
                                IOrganisationQueryRepository organisationQueryRepository, ILogger <StartCertificateHandler> logger, IStandardService standardService)
 {
     _certificateRepository       = certificateRepository;
     _learnerRepository           = learnerRepository;
     _providersRepository         = providersRepository;
     _organisationQueryRepository = organisationQueryRepository;
     _logger          = logger;
     _standardService = standardService;
 }
Example #12
0
 public StaffSearchHandler(IStaffCertificateRepository staffCertificateRepository,
                           ILogger <SearchHandler> logger,
                           IStaffLearnerRepository staffLearnerRepository,
                           IStandardService staffService)
 {
     _staffCertificateRepository = staffCertificateRepository;
     _logger = logger;
     _staffLearnerRepository = staffLearnerRepository;
     _standardService        = staffService;
 }
Example #13
0
 public CreateBatchCertificateHandler(ICertificateRepository certificateRepository, IIlrRepository ilrRepository,
                                      IOrganisationQueryRepository organisationQueryRepository, IContactQueryRepository contactQueryRepository, ILogger <CreateBatchCertificateHandler> logger, IStandardService standardService, IRoatpApiClient roatpApiClient)
 {
     _certificateRepository       = certificateRepository;
     _ilrRepository               = ilrRepository;
     _organisationQueryRepository = organisationQueryRepository;
     _contactQueryRepository      = contactQueryRepository;
     _logger          = logger;
     _standardService = standardService;
     _roatpApiClient  = roatpApiClient;
 }
Example #14
0
 public CreateBatchCertificateHandler(ICertificateRepository certificateRepository, ILearnerRepository learnerRepository,
                                      IOrganisationQueryRepository organisationQueryRepository, IContactQueryRepository contactQueryRepository,
                                      ILogger <CreateBatchCertificateHandler> logger, IStandardService standardService, IProvidersRepository providersRepository)
 {
     _certificateRepository       = certificateRepository;
     _learnerRepository           = learnerRepository;
     _organisationQueryRepository = organisationQueryRepository;
     _contactQueryRepository      = contactQueryRepository;
     _logger              = logger;
     _standardService     = standardService;
     _providersRepository = providersRepository;
 }
        public SearchHandler(IOrganisationQueryRepository organisationRepository,
                             ILearnerRepository learnerRepository, ICertificateRepository certificateRepository, ILogger <SearchHandler> logger, IContactQueryRepository contactRepository, IStandardService standardService)
        {
            _organisationRepository = organisationRepository;
            _learnerRepository      = learnerRepository;
            _certificateRepository  = certificateRepository;
            _logger            = logger;
            _contactRepository = contactRepository;
            _standardService   = standardService;

            BuildAlternates();
        }
        public SearchHandler(IRegisterQueryRepository registerQueryRepository, IOrganisationQueryRepository organisationRepository,
                             IIlrRepository ilrRepository, ICertificateRepository certificateRepository, ILogger <SearchHandler> logger, IContactQueryRepository contactRepository, IStandardService standardService)
        {
            _registerQueryRepository = registerQueryRepository;
            _organisationRepository  = organisationRepository;
            _ilrRepository           = ilrRepository;
            _certificateRepository   = certificateRepository;
            _logger            = logger;
            _contactRepository = contactRepository;
            _standardService   = standardService;

            BuildAlternates();
        }
        public UpdateBatchCertificateRequestValidator(
            IStringLocalizer <BatchCertificateRequestValidator> localiser,
            IOrganisationQueryRepository organisationQueryRepository,
            IIlrRepository ilrRepository,
            ICertificateRepository certificateRepository,
            IStandardService standardService)
        {
            Include(new BatchCertificateRequestValidator(localiser, organisationQueryRepository, ilrRepository, standardService));

            RuleFor(m => m.CertificateReference).NotEmpty().WithMessage("Provide the certificate reference").DependentRules(() =>
            {
                // TODO: ON-2130 Consider in the future how to merge both create & update versions as the Cert will always exist due to EPA
                RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                {
                    var existingCertificate = await certificateRepository.GetCertificate(m.Uln, m.StandardCode);
                    var sumbittingEpao      = await organisationQueryRepository.GetByUkPrn(m.UkPrn);

                    if (existingCertificate is null || !string.Equals(existingCertificate.CertificateReference, m.CertificateReference, StringComparison.InvariantCultureIgnoreCase) ||
                        existingCertificate.Status == CertificateStatus.Deleted)
                    {
                        context.AddFailure(new ValidationFailure("CertificateReference", $"Certificate not found"));
                    }
Example #18
0
 public StandardServiceController(ILogger <StandardServiceController> logger, IStandardService standardService)
 {
     _logger          = logger;
     _standardService = standardService;
 }
        public GetBatchCertificateRequestValidator(IStringLocalizer <GetBatchCertificateRequestValidator> localiser, IOrganisationQueryRepository organisationQueryRepository, IIlrRepository ilrRepository, ICertificateRepository certificateRepository, IStandardService standardService)
        {
            RuleFor(m => m.UkPrn).InclusiveBetween(10000000, 99999999).WithMessage("The UKPRN should contain exactly 8 numbers");

            RuleFor(m => m.FamilyName).NotEmpty().WithMessage("Provide apprentice family name");
            RuleFor(m => m.StandardCode).GreaterThan(0).WithMessage("Provide a valid Standard").DependentRules(() =>
            {
                RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                {
                    if (!string.IsNullOrEmpty(m.StandardReference))
                    {
                        var collatedStandard = await standardService.GetStandard(m.StandardReference);
                        if (m.StandardCode != collatedStandard?.StandardId)
                        {
                            context.AddFailure("StandardReference and StandardCode must be for the same Standard");
                        }
                    }
                });
            });

            RuleFor(m => m.Uln).InclusiveBetween(1000000000, 9999999999).WithMessage("ULN should contain exactly 10 numbers").DependentRules(() =>
            {
                When(m => m.StandardCode > 0 && !string.IsNullOrEmpty(m.FamilyName), () =>
                {
                    RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                    {
                        // NOTE: Currently we're making the Certificate & ILR record both mandatory
                        var requestedIlr   = await ilrRepository.Get(m.Uln, m.StandardCode);
                        var sumbittingEpao = await organisationQueryRepository.GetByUkPrn(m.UkPrn);

                        if (requestedIlr is null || !string.Equals(requestedIlr.FamilyName, m.FamilyName, StringComparison.InvariantCultureIgnoreCase))
                        {
                            context.AddFailure(new ValidationFailure("Uln", "ULN, FamilyName and Standard not found"));
                        }
                        else if (sumbittingEpao is null)
                        {
                            context.AddFailure(new ValidationFailure("UkPrn", "Specified UKPRN not found"));
                        }
                        else
                        {
                            var providedStandards = await standardService.GetEpaoRegisteredStandards(sumbittingEpao.EndPointAssessorOrganisationId);

                            if (!providedStandards.Any(s => s.StandardCode == m.StandardCode))
                            {
                                context.AddFailure(new ValidationFailure("StandardCode", "Your organisation is not approved to assess this Standard"));
                            }
                        }
                    });

                    RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                    {
                        var existingCertificate = await certificateRepository.GetCertificate(m.Uln, m.StandardCode);

                        if (existingCertificate is null)
                        {
                            // TODO: FUTURE WORK - ON-2130 Do Alan's Certificate Search THEN the ILR Search (which may be the validation down below)
                        }
                        else
                        {
                            var certData = JsonConvert.DeserializeObject <CertificateData>(existingCertificate.CertificateData ?? "{}");

                            if (!certData.LearnerFamilyName.Equals(m.FamilyName, StringComparison.InvariantCultureIgnoreCase))
                            {
                                context.AddFailure(new ValidationFailure("FamilyName", $"Invalid family name"));
                            }
                            else if (!EpaOutcome.Pass.Equals(certData.EpaDetails?.LatestEpaOutcome, StringComparison.InvariantCultureIgnoreCase))
                            {
                                context.AddFailure(new ValidationFailure("Uln", $"Latest EPA Outcome has not passed"));
                            }
                        }
                    });
                });
        public CreateBatchEpaRequestValidator(IStringLocalizer <BatchEpaRequestValidator> localiser, IOrganisationQueryRepository organisationQueryRepository, ILearnerRepository learnerRepository, ICertificateRepository certificateRepository, IStandardService standardService)
        {
            Include(new BatchEpaRequestValidator(localiser, organisationQueryRepository, learnerRepository, standardService));

            RuleFor(m => m.EpaDetails.EpaReference).Empty().WithMessage("EPA reference must be empty").DependentRules(() =>
            {
                RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                {
                    var existingCertificate = await certificateRepository.GetCertificate(m.Uln, m.StandardCode);

                    if (existingCertificate != null)
                    {
                        var certData = JsonConvert.DeserializeObject <CertificateData>(existingCertificate.CertificateData);

                        var submittedCertificate      = !(existingCertificate.Status == CertificateStatus.Draft || existingCertificate.Status == CertificateStatus.Deleted);
                        var outcomeIsAFail            = certData.OverallGrade == CertificateGrade.Fail;
                        var outcomeIsAPass            = !outcomeIsAFail;
                        var isDraftCertificate        = existingCertificate.Status == CertificateStatus.Draft;
                        var canUpdateDraftCertificate = string.IsNullOrEmpty(certData.EpaDetails?.LatestEpaOutcome);

                        if (submittedCertificate && outcomeIsAPass)
                        {
                            context.AddFailure(new ValidationFailure("EpaDetails", $"Certificate already exists, cannot create EPA record"));
                        }
                        else if (submittedCertificate && outcomeIsAFail)
                        {
                            context.AddFailure(new ValidationFailure("EpaDetails", $"EPA already provided for the learner"));
                        }
                        else if (isDraftCertificate && !canUpdateDraftCertificate)
                        {
                            context.AddFailure(new ValidationFailure("EpaDetails", $"EPA already provided for the learner"));
                        }
                    }
                });
            });
        }
Example #21
0
        public BatchCertificateRequestValidator(
            IStringLocalizer <BatchCertificateRequestValidator> localiser,
            IOrganisationQueryRepository organisationQueryRepository,
            IIlrRepository ilrRepository,
            IStandardService standardService)
        {
            RuleFor(m => m.UkPrn).InclusiveBetween(10000000, 99999999).WithMessage("The UKPRN should contain exactly 8 numbers");

            RuleFor(m => m.FamilyName).NotEmpty().WithMessage("Provide apprentice family name");
            RuleFor(m => m.StandardCode).GreaterThan(0).WithMessage("Provide a valid Standard").DependentRules(() =>
            {
                RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                {
                    bool validateCourseOption = true;

                    var collatedStandard = await standardService.GetStandard(m.StandardCode);
                    if (!string.IsNullOrEmpty(m.StandardReference))
                    {
                        if (m.StandardReference != collatedStandard?.ReferenceNumber)
                        {
                            validateCourseOption = false;
                            context.AddFailure("StandardReference and StandardCode must be for the same Standard");
                        }
                    }

                    // NOTE: This is not a nice way to do this BUT we cannot use another DependantRules()
                    if (validateCourseOption)
                    {
                        if (!collatedStandard.Options.Any() && !string.IsNullOrEmpty(m.CertificateData?.CourseOption))
                        {
                            context.AddFailure(new ValidationFailure("CourseOption", $"No course option available for this Standard. Must be empty"));
                        }
                        else if (collatedStandard.Options.Any() && !collatedStandard.Options.Any(o => o.Equals(m.CertificateData?.CourseOption, StringComparison.InvariantCultureIgnoreCase)))
                        {
                            string courseOptionsString = string.Join(", ", collatedStandard.Options);
                            context.AddFailure(new ValidationFailure("CourseOption", $"Invalid course option for this Standard. Must be one of the following: {courseOptionsString}"));
                        }
                    }
                });
            });

            RuleFor(m => m.Uln).InclusiveBetween(1000000000, 9999999999).WithMessage("ULN should contain exactly 10 numbers").DependentRules(() =>
            {
                When(m => m.StandardCode > 0 && !string.IsNullOrEmpty(m.FamilyName), () =>
                {
                    RuleFor(m => m).CustomAsync(async(m, context, canellation) =>
                    {
                        var requestedIlr   = await ilrRepository.Get(m.Uln, m.StandardCode);
                        var sumbittingEpao = await organisationQueryRepository.GetByUkPrn(m.UkPrn);

                        if (requestedIlr is null || !string.Equals(requestedIlr.FamilyName, m.FamilyName, StringComparison.InvariantCultureIgnoreCase))
                        {
                            context.AddFailure(new ValidationFailure("Uln", "ULN, FamilyName and Standard not found."));
                        }
                        else if (sumbittingEpao is null)
                        {
                            context.AddFailure(new ValidationFailure("UkPrn", "Specified UKPRN not found"));
                        }
                        else
                        {
                            var providedStandards = await standardService.GetEpaoRegisteredStandards(sumbittingEpao.EndPointAssessorOrganisationId);

                            if (!providedStandards.Any(s => s.StandardCode == m.StandardCode))
                            {
                                context.AddFailure(new ValidationFailure("StandardCode", "Your organisation is not approved to assess this Standard"));
                            }
                        }
                    });
                });
 public StandardController(IStandardService standardService)
 {
     _standardService = standardService;
 }
Example #23
0
        public DeleteBatchEpaRequestValidator(IStringLocalizer <DeleteBatchEpaRequestValidator> localiser, IOrganisationQueryRepository organisationQueryRepository, IIlrRepository ilrRepository, ICertificateRepository certificateRepository, IStandardService standardService)
        {
            RuleFor(m => m.UkPrn).InclusiveBetween(10000000, 99999999).WithMessage("The UKPRN should contain exactly 8 numbers");

            RuleFor(m => m.FamilyName).NotEmpty().WithMessage("Provide apprentice family name");
            RuleFor(m => m.StandardCode).GreaterThan(0).WithMessage("Provide a valid Standard").DependentRules(() =>
            {
                RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                {
                    if (!string.IsNullOrEmpty(m.StandardReference))
                    {
                        var collatedStandard = await standardService.GetStandard(m.StandardReference);
                        if (m.StandardCode != collatedStandard?.StandardId)
                        {
                            context.AddFailure("StandardReference and StandardCode must be for the same Standard");
                        }
                    }
                });
            });

            RuleFor(m => m.Uln).InclusiveBetween(1000000000, 9999999999).WithMessage("ULN should contain exactly 10 numbers").DependentRules(() =>
            {
                When(m => m.StandardCode > 0 && !string.IsNullOrEmpty(m.FamilyName), () =>
                {
                    RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                    {
                        var requestedIlr   = await ilrRepository.Get(m.Uln, m.StandardCode);
                        var sumbittingEpao = await organisationQueryRepository.GetByUkPrn(m.UkPrn);

                        if (requestedIlr is null || !string.Equals(requestedIlr.FamilyName, m.FamilyName, StringComparison.InvariantCultureIgnoreCase))
                        {
                            context.AddFailure(new ValidationFailure("Uln", "ULN, FamilyName and Standard not found"));
                        }
                        else if (sumbittingEpao is null)
                        {
                            context.AddFailure(new ValidationFailure("UkPrn", "Specified UKPRN not found"));
                        }
                        else
                        {
                            var providedStandards = await standardService.GetEpaoRegisteredStandards(sumbittingEpao.EndPointAssessorOrganisationId);

                            if (!providedStandards.Any(s => s.StandardCode == m.StandardCode))
                            {
                                context.AddFailure(new ValidationFailure("StandardCode", "Your organisation is not approved to assess this Standard"));
                            }
                        }
                    });
                });
 public ProjectController(IStandardService <Project> projectService, IMapper mapper)
 {
     this.projectService = (ProjectService)projectService;
     this.mapper         = mapper;
 }
Example #25
0
        public GetBatchLearnerRequestValidator(IStringLocalizer <GetBatchLearnerRequestValidator> localiser, IOrganisationQueryRepository organisationQueryRepository, ILearnerRepository learnerRepository, ICertificateRepository certificateRepository, IStandardService standardService)
        {
            RuleFor(m => m.UkPrn).InclusiveBetween(10000000, 99999999).WithMessage("The UKPRN should contain exactly 8 numbers");

            RuleFor(m => m.FamilyName).NotEmpty().WithMessage("Provide apprentice family name");
            RuleFor(m => m.Standard).NotEmpty().WithMessage("Provide a Standard").DependentRules(() =>
            {
                RuleFor(m => m.Standard).CustomAsync(async(standard, context, cancellation) =>
                {
                    var standardVersion = await standardService.GetStandardVersionById(standard);

                    if (standardVersion is null)
                    {
                        context.AddFailure(new ValidationFailure("Standard", "Standard not found"));
                    }
                });
            });

            RuleFor(m => m.Uln).InclusiveBetween(1000000000, 9999999999).WithMessage("ULN should contain exactly 10 numbers").DependentRules(() =>
            {
                When(m => !string.IsNullOrEmpty(m.Standard) && !string.IsNullOrEmpty(m.FamilyName), () =>
                {
                    RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                    {
                        var standard = await standardService.GetStandardVersionById(m.Standard);

                        if (standard != null)
                        {
                            var requestedLearner = await learnerRepository.Get(m.Uln, standard.LarsCode);
                            var sumbittingEpao   = await organisationQueryRepository.GetByUkPrn(m.UkPrn);

                            if (requestedLearner is null || !string.Equals(requestedLearner.FamilyName, m.FamilyName, StringComparison.InvariantCultureIgnoreCase))
                            {
                                context.AddFailure(new ValidationFailure("Uln", "ULN, FamilyName and Standard not found"));
                            }
                            else if (sumbittingEpao is null)
                            {
                                context.AddFailure(new ValidationFailure("UkPrn", "Specified UKPRN not found"));
                            }
                            else
                            {
                                var providedStandards = await standardService.GetEpaoRegisteredStandards(sumbittingEpao.EndPointAssessorOrganisationId);

                                if (!providedStandards.Any(s => s.StandardCode == standard.LarsCode))
                                {
                                    context.AddFailure(new ValidationFailure("StandardCode", "Your organisation is not approved to assess this Standard"));
                                }
                            }
                        }
                    });
Example #26
0
 public SubtaskController(IStandardService <Subtask> subtaskService, IMapper mapper)
 {
     this.subtaskService = (SubtaskService)subtaskService;
     this.mapper         = mapper;
 }
 public UserController(IStandardService <User> userService, IMapper mapper)
 {
     this.userService = (UserService)userService;
     this.mapper      = mapper;
 }
 public CalculatorService(ISpecialService specialService, IStandardService standardService)
 {
     _specialService  = specialService;
     _standardService = standardService;
 }
Example #29
0
        public static List <SearchResult> PopulateStandards(this List <SearchResult> searchResults, IStandardService standardService, ILogger <SearchHandler> logger)
        {
            var allStandards = standardService.GetAllStandardVersions().Result;
            var allOptions   = standardService.GetAllStandardOptions().Result;

            foreach (var searchResult in searchResults)
            {
                // If the learner contains version and option, then it's come from commitments
                // Therefore we don't want to give the UI the impression that a choice is needed
                // So we enforce a single version and option selection so it displays on the results page.
                if (searchResult.VersionConfirmed && !string.IsNullOrWhiteSpace(searchResult.StandardUId))
                {
                    var learnerStandard = allStandards.FirstOrDefault(s => s.StandardUId == searchResult.StandardUId);

                    if (learnerStandard == null)
                    {
                        logger.LogInformation($"Failed to get standard for {searchResult.StandardUId}");
                    }
                    else
                    {
                        PopulateSingleVersionResult(learnerStandard, allOptions, searchResult);
                    }
                    continue;
                }

                // Otherwise, we fall back to traditional processing populating versions.
                var standards = allStandards.Where(s => s.LarsCode == searchResult.StdCode)
                                .OrderByDescending(o => o.VersionMajor).ThenByDescending(m => m.VersionMinor);

                if (!standards.Any())
                {
                    logger.LogInformation($"Failed to get standard for {searchResult.StdCode}");
                    continue;
                }

                PopulateMultipleVersionResults(allOptions, searchResult, standards);
            }

            return(searchResults);
        }
        public GetBatchCertificateRequestValidator(IStringLocalizer <GetBatchCertificateRequestValidator> localiser, IOrganisationQueryRepository organisationQueryRepository, ILearnerRepository learnerRepository, ICertificateRepository certificateRepository, IStandardService standardService)
        {
            RuleFor(m => m.UkPrn).InclusiveBetween(10000000, 99999999).WithMessage("The UKPRN should contain exactly 8 numbers");

            RuleFor(m => m.FamilyName).NotEmpty().WithMessage("Provide apprentice family name");
            RuleFor(m => m.StandardCode).GreaterThan(0).WithMessage("Provide a valid Standard");

            RuleFor(m => m.Uln).InclusiveBetween(1000000000, 9999999999).WithMessage("ULN should contain exactly 10 numbers").DependentRules(() =>
            {
                When(m => m.StandardCode > 0 && !string.IsNullOrEmpty(m.FamilyName), () =>
                {
                    RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                    {
                        // NOTE: Currently we're making the Certificate & Learner/ILR record both mandatory - this is wrong fixing it!
                        var submittingEpao = await organisationQueryRepository.GetByUkPrn(m.UkPrn);

                        if (submittingEpao is null)
                        {
                            context.AddFailure(new ValidationFailure("UkPrn", "Specified UKPRN not found"));
                        }
                        else
                        {
                            var existingCertificateCreatedByCallingEpao = await certificateRepository.GetCertificateByUlnOrgIdLastnameAndStandardCode(m.Uln, submittingEpao.EndPointAssessorOrganisationId, m.FamilyName, m.StandardCode);

                            if (existingCertificateCreatedByCallingEpao == null)
                            {
                                var requestedLearner    = await learnerRepository.Get(m.Uln, m.StandardCode);
                                var existingCertificate = await certificateRepository.GetCertificate(m.Uln, m.StandardCode);
                                var providedStandards   = await standardService.GetEpaoRegisteredStandards(submittingEpao.EndPointAssessorOrganisationId);

                                if (!providedStandards.Any(s => s.StandardCode == m.StandardCode))
                                {
                                    context.AddFailure(new ValidationFailure("StandardCode", "Your organisation is not approved to assess this Standard"));
                                }

                                if (existingCertificate != null)
                                {
                                    var certData = JsonConvert.DeserializeObject <CertificateData>(existingCertificate.CertificateData ?? "{}");

                                    if (!certData.LearnerFamilyName.Equals(m.FamilyName, StringComparison.InvariantCultureIgnoreCase))
                                    {
                                        context.AddFailure(new ValidationFailure("FamilyName", $"Cannot find apprentice with the specified Uln, FamilyName & Standard"));
                                    }
                                    else if (!EpaOutcome.Pass.Equals(certData.EpaDetails?.LatestEpaOutcome, StringComparison.InvariantCultureIgnoreCase))
                                    {
                                        context.AddFailure(new ValidationFailure("Uln", $"Cannot find certificate with the specified Uln, FamilyName & Standard"));
                                    }
                                }
                                else if (requestedLearner is null || !string.Equals(requestedLearner.FamilyName, m.FamilyName, StringComparison.InvariantCultureIgnoreCase))
                                {
                                    context.AddFailure(new ValidationFailure("Uln", "Cannot find apprentice with the specified Uln, FamilyName & Standard"));
                                }
                            }
                        }
                    });
Example #31
0
 public GetCalculatedStandardVersionForApprenticeshipHandler(IStandardService standardService, ILearnerRepository learnerRepository)
 {
     _standardService   = standardService;
     _learnerRepository = learnerRepository;
 }
Example #32
0
        public CreateBatchCertificateRequestValidator(
            IStringLocalizer <BatchCertificateRequestValidator> localiser,
            IOrganisationQueryRepository organisationQueryRepository,
            ILearnerRepository learnerRepository,
            ICertificateRepository certificateRepository,
            IStandardService standardService)
        {
            Include(new BatchCertificateRequestValidator(localiser, organisationQueryRepository, learnerRepository, standardService));

            RuleFor(m => m.CertificateReference).Empty().WithMessage("Certificate reference must be empty").DependentRules(() =>
            {
                RuleFor(m => m).CustomAsync(async(m, context, cancellation) =>
                {
                    var existingCertificate = await certificateRepository.GetCertificate(m.Uln, m.StandardCode);
                    var sumbittingEpao      = await organisationQueryRepository.GetByUkPrn(m.UkPrn);
                    var learnerDetails      = await learnerRepository.Get(m.Uln, m.StandardCode);

                    if (existingCertificate != null && existingCertificate.Status != CertificateStatus.Deleted)
                    {
                        var certData = JsonConvert.DeserializeObject <CertificateData>(existingCertificate.CertificateData);

                        if (sumbittingEpao?.Id != existingCertificate.OrganisationId)
                        {
                            context.AddFailure(new ValidationFailure("CertificateData", $"Your organisation is not the creator of the EPA"));
                        }
                        else if (existingCertificate.Status == CertificateStatus.Draft)
                        {
                            if (!string.IsNullOrEmpty(certData.OverallGrade))
                            {
                                context.AddFailure(new ValidationFailure("CertificateData", $"Certificate already exists: {existingCertificate.CertificateReference}"));
                            }
                        }
                        else if (existingCertificate.Status == CertificateStatus.Submitted && !string.IsNullOrWhiteSpace(certData.OverallGrade) && certData.OverallGrade.Equals(CertificateGrade.Fail, StringComparison.OrdinalIgnoreCase))
                        {
                            // A submitted fail can be re-created
                        }
                        else
                        {
                            context.AddFailure(new ValidationFailure("CertificateData", $"Certificate already exists: {existingCertificate.CertificateReference}"));
                        }
                    }

                    if (learnerDetails != null)
                    {
                        if (learnerDetails.CompletionStatus == (int)CompletionStatus.Withdrawn)
                        {
                            context.AddFailure(new ValidationFailure("LearnerDetails", "Cannot find the apprentice details"));
                        }
                        else if (learnerDetails.CompletionStatus == (int)CompletionStatus.TemporarilyWithdrawn)
                        {
                            context.AddFailure(new ValidationFailure("LearnerDetails", "Cannot find the apprentice details"));
                        }

                        // SV-1253 additional validation to check version and option
                        if (learnerDetails.VersionConfirmed && !string.IsNullOrWhiteSpace(learnerDetails.Version) && !string.IsNullOrWhiteSpace(m.CertificateData.Version))
                        {
                            if (learnerDetails.Version.Trim().ToUpperInvariant() != m.CertificateData.Version.Trim().ToUpperInvariant())
                            {
                                context.AddFailure(new ValidationFailure("LearnerDetails", "Incorrect version for learner"));
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(learnerDetails.CourseOption) && !string.IsNullOrWhiteSpace(m.CertificateData.CourseOption))
                        {
                            if (learnerDetails.CourseOption.Trim().ToUpperInvariant() != m.CertificateData.CourseOption.Trim().ToUpperInvariant())
                            {
                                context.AddFailure(new ValidationFailure("LearnerDetails", "Incorrect course option for learner"));
                            }
                        }
                    }
                    else
                    {
                        context.AddFailure(new ValidationFailure("LearnerDetails", $"Learner details for ULN: {m.Uln} not found"));
                    }
                });
            });
        }