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")); } }); }); }
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; }
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; }
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; }
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; }
public StaffSearchHandler(IStaffCertificateRepository staffCertificateRepository, ILogger <SearchHandler> logger, IStaffLearnerRepository staffLearnerRepository, IStandardService staffService) { _staffCertificateRepository = staffCertificateRepository; _logger = logger; _staffLearnerRepository = staffLearnerRepository; _standardService = staffService; }
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; }
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")); }
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")); } } }); }); }
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; }
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; }
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")); } } } });
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; }
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")); } } } });
public GetCalculatedStandardVersionForApprenticeshipHandler(IStandardService standardService, ILearnerRepository learnerRepository) { _standardService = standardService; _learnerRepository = learnerRepository; }
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")); } }); }); }