public FluentVacancyValidator(
            ITimeProvider timeProvider,
            IMinimumWageProvider minimumWageService,
            IApprenticeshipProgrammeProvider apprenticeshipProgrammesProvider,
            IQualificationsProvider qualificationsProvider,
            IHtmlSanitizerService htmlSanitizerService,
            ITrainingProviderSummaryProvider trainingProviderSummaryProvider,
            IBlockedOrganisationQuery blockedOrganisationRepo,
            IProfanityListProvider profanityListProvider,
            IProviderRelationshipsService providerRelationshipService)
        {
            _timeProvider                     = timeProvider;
            _minimumWageService               = minimumWageService;
            _qualificationsProvider           = qualificationsProvider;
            _apprenticeshipProgrammesProvider = apprenticeshipProgrammesProvider;
            _htmlSanitizerService             = htmlSanitizerService;
            _trainingProviderSummaryProvider  = trainingProviderSummaryProvider;
            _blockedOrganisationRepo          = blockedOrganisationRepo;
            _profanityListProvider            = profanityListProvider;
            _providerRelationshipService      = providerRelationshipService;

            SingleFieldValidations();

            CrossFieldValidations();
        }
 public VacancyTitlePopularityCheckRule(IApprenticeshipProgrammeProvider apprenticeshipProgrammeProvider, IGetTitlePopularity popularityService, QaRulesConfiguration qaRulesConfig)
     : base(RuleId.TitlePopularity)
 {
     _apprenticeshipProgrammeProvider = apprenticeshipProgrammeProvider;
     _popularityService = popularityService;
     _qaRulesConfig     = qaRulesConfig;
 }
 public DatesOrchestrator(IProviderVacancyClient client, IRecruitVacancyClient vacancyClient, ILogger <DatesOrchestrator> logger, ITimeProvider timeProvider, IReviewSummaryService reviewSummaryService, IApprenticeshipProgrammeProvider apprenticeshipProgrammeProvider) : base(logger)
 {
     _client                          = client;
     _vacancyClient                   = vacancyClient;
     _timeProvider                    = timeProvider;
     _reviewSummaryService            = reviewSummaryService;
     _apprenticeshipProgrammeProvider = apprenticeshipProgrammeProvider;
 }
Пример #4
0
 public VacancyRuleSet(QaRulesConfiguration qaRulesConfig,
                       IApprenticeshipProgrammeProvider apprenticeshipProgrammeProvider,
                       IProfanityListProvider profanityListProvider,
                       IBannedPhrasesProvider bannedPhrasesProvider,
                       IGetTitlePopularity popularityService) : base(nameof(VacancyRuleSet))
 {
     AddRule(new VacancyProfanityChecksRule(profanityListProvider));
     AddRule(new VacancyBannedPhraseChecksRule(bannedPhrasesProvider));
     AddRule(new VacancyTitlePopularityCheckRule(apprenticeshipProgrammeProvider, popularityService, qaRulesConfig));
 }
 public ProviderApplicationsReportStrategy(
     ILoggerFactory loggerFactory,
     IOptions <MongoDbConnectionDetails> details,
     IApprenticeshipProgrammeProvider programmeProvider,
     ITimeProvider timeProvider,
     ILogger <ProviderApplicationsReportStrategy> logger)
     : base(loggerFactory, MongoDbNames.RecruitDb, MongoDbCollectionNames.Vacancies, details)
 {
     _programmeProvider = programmeProvider;
     _timeProvider      = timeProvider;
     _logger            = logger;
 }
Пример #6
0
 public VacancyClient(
     IVacancyRepository repository,
     IVacancyQuery vacancyQuery,
     IQueryStoreReader reader,
     IMessaging messaging,
     IEntityValidator <Vacancy, VacancyRuleSet> validator,
     IApprenticeshipProgrammeProvider apprenticeshipProgrammesProvider,
     IEmployerAccountProvider employerAccountProvider,
     IApplicationReviewRepository applicationReviewRepository,
     IVacancyReviewQuery vacancyReviewQuery,
     ICandidateSkillsProvider candidateSkillsProvider,
     IVacancyService vacancyService,
     IEmployerDashboardProjectionService employerDashboardService,
     IProviderDashboardProjectionService providerDashboardService,
     IEmployerProfileRepository employerProfileRepository,
     IUserRepository userRepository,
     IQualificationsProvider qualificationsProvider,
     ITrainingProviderService trainingProviderService,
     IEmployerService employerService,
     IReportRepository reportRepository,
     IReportService reportService,
     IUserNotificationPreferencesRepository userNotificationPreferencesRepository,
     AbstractValidator <UserNotificationPreferences> userNotificationPreferencesValidator,
     ITrainingProviderSummaryProvider trainingProviderSummaryProvider,
     AbstractValidator <Qualification> qualificationValidator)
 {
     _repository   = repository;
     _vacancyQuery = vacancyQuery;
     _reader       = reader;
     _messaging    = messaging;
     _validator    = validator;
     _apprenticeshipProgrammesProvider = apprenticeshipProgrammesProvider;
     _employerAccountProvider          = employerAccountProvider;
     _applicationReviewRepository      = applicationReviewRepository;
     _vacancyReviewQuery                    = vacancyReviewQuery;
     _candidateSkillsProvider               = candidateSkillsProvider;
     _vacancyService                        = vacancyService;
     _employerDashboardService              = employerDashboardService;
     _providerDashboardService              = providerDashboardService;
     _employerProfileRepository             = employerProfileRepository;
     _userRepository                        = userRepository;
     _qualificationsProvider                = qualificationsProvider;
     _trainingProviderService               = trainingProviderService;
     _employerService                       = employerService;
     _reportRepository                      = reportRepository;
     _reportService                         = reportService;
     _userNotificationPreferencesRepository = userNotificationPreferencesRepository;
     _userNotificationPreferencesValidator  = userNotificationPreferencesValidator;
     _trainingProviderSummaryProvider       = trainingProviderSummaryProvider;
     _qualificationValidator                = qualificationValidator;
 }
Пример #7
0
 public QaApplicationsReportStrategy(
     ILoggerFactory loggerFactory,
     IOptions <MongoDbConnectionDetails> details,
     IApprenticeshipProgrammeProvider programmeProvider,
     ITimeProvider timeProvider,
     ILogger <QaApplicationsReportStrategy> logger)
     : base(loggerFactory, MongoDbNames.RecruitDb, MongoDbCollectionNames.VacancyReviews, details)
 {
     _programmeProvider = programmeProvider;
     _timeProvider      = timeProvider;
     _logger            = logger;
     _collection        = GetCollection <BsonDocument>();
     RetryPolicy        = MongoDbRetryPolicy.GetConnectionRetryPolicy(_logger);
 }
 public ProviderDashboardProjectionService(
     IVacancyQuery vacancyQuery,
     IApplicationReviewQuery applicationReviewQuery,
     IQueryStoreWriter queryStoreWriter,
     ILogger <ProviderDashboardProjectionService> logger,
     IApprenticeshipProgrammeProvider apprenticeshipProgrammeProvider,
     ITimeProvider timeProvider)
 {
     _logger                          = logger;
     _vacancyQuery                    = vacancyQuery;
     _queryStoreWriter                = queryStoreWriter;
     _applicationReviewQuery          = applicationReviewQuery;
     _apprenticeshipProgrammeProvider = apprenticeshipProgrammeProvider;
     _timeProvider                    = timeProvider;
 }
 public EmployerDashboardProjectionService(
     IVacancyQuery vacancyQuery,
     IVacancySummariesProvider vacancySummariesQuery,
     IQueryStoreWriter queryStoreWriter,
     ILogger <EmployerDashboardProjectionService> logger,
     IApprenticeshipProgrammeProvider apprenticeshipProgrammeProvider,
     ITimeProvider timeProvider)
 {
     _logger                          = logger;
     _vacancyQuery                    = vacancyQuery;
     _queryStoreWriter                = queryStoreWriter;
     _vacancySummariesQuery           = vacancySummariesQuery;
     _apprenticeshipProgrammeProvider = apprenticeshipProgrammeProvider;
     _timeProvider                    = timeProvider;
 }
Пример #10
0
 public QaVacancyClient(
     IQueryStoreReader queryStoreReader,
     IReferenceDataReader referenceDataReader,
     IVacancyReviewRepository vacancyReviewRepository,
     IVacancyReviewQuery vacancyReviewQuery,
     IVacancyRepository vacancyRepository,
     IApprenticeshipProgrammeProvider apprenticeshipProgrammesProvider,
     IMessaging messaging,
     INextVacancyReviewService nextVacancyReviewService)
 {
     _queryStoreReader                 = queryStoreReader;
     _referenceDataReader              = referenceDataReader;
     _vacancyReviewRepository          = vacancyReviewRepository;
     _vacancyReviewQuery               = vacancyReviewQuery;
     _vacancyRepository                = vacancyRepository;
     _apprenticeshipProgrammesProvider = apprenticeshipProgrammesProvider;
     _messaging = messaging;
     _nextVacancyReviewService = nextVacancyReviewService;
 }
        internal static IRuleBuilderInitial <Vacancy, Vacancy> TrainingMustExist(
            this IRuleBuilder <Vacancy, Vacancy> ruleBuilder,
            IApprenticeshipProgrammeProvider apprenticeshipProgrammeProvider)
        {
            return(ruleBuilder.CustomAsync(async(vacancy, context, cancellationToken) =>
            {
                var programme =
                    await apprenticeshipProgrammeProvider.GetApprenticeshipProgrammeAsync(vacancy.ProgrammeId);

                if (programme == null)
                {
                    var message = $"Training programme {vacancy.ProgrammeId} does not exist.";
                    var failure = new ValidationFailure(string.Empty, message)
                    {
                        ErrorCode = ErrorCodes.TrainingNotExist,
                        CustomState = VacancyRuleSet.TrainingProgramme,
                        PropertyName = nameof(Vacancy.ProgrammeId)
                    };
                    context.AddFailure(failure);
                }
            }));
        }
        public FluentVacancyValidator(ITimeProvider timeProvider, IMinimumWageProvider minimumWageService, IApprenticeshipProgrammeProvider apprenticeshipProgrammesProvider, IQualificationsProvider qualificationsProvider, IHtmlSanitizerService htmlSanitizerService)
        {
            _timeProvider             = timeProvider;
            _minimumWageService       = minimumWageService;
            _qualificationsProvider   = qualificationsProvider;
            _apprenticeshipProgrammes = new Lazy <IEnumerable <IApprenticeshipProgramme> >(() => apprenticeshipProgrammesProvider.GetApprenticeshipProgrammesAsync().Result);
            _htmlSanitizerService     = htmlSanitizerService;

            SingleFieldValidations();

            CrossFieldValidations();
        }
        internal static IRuleBuilderInitial <Vacancy, Vacancy> TrainingMustBeActiveForStartDate(this IRuleBuilder <Vacancy, Vacancy> ruleBuilder, IApprenticeshipProgrammeProvider apprenticeshipProgrammesProvider)
        {
            return(ruleBuilder.CustomAsync(async(vacancy, context, cancellationToken) =>
            {
                if (!vacancy.StartDate.HasValue)
                {
                    var message = $"The start date must have a value.";
                    var failure = new ValidationFailure(string.Empty, message)
                    {
                        ErrorCode = ErrorCodes.TrainingExpiryDate,
                        CustomState = VacancyRuleSet.TrainingExpiryDate,
                        PropertyName = nameof(Vacancy.StartDate)
                    };
                    context.AddFailure(failure);
                }

                var allProgrammes = await apprenticeshipProgrammesProvider.GetApprenticeshipProgrammesAsync();

                var matchingProgramme = allProgrammes.SingleOrDefault(x => x.Id.Equals(vacancy.ProgrammeId, StringComparison.InvariantCultureIgnoreCase));

                if (matchingProgramme.EffectiveTo != null && matchingProgramme.EffectiveTo < vacancy.StartDate)
                {
                    var message = $"The start date must be before {matchingProgramme.EffectiveTo.Value.AsGdsDate()} when the apprenticeship training closes to new starters.";
                    var failure = new ValidationFailure(string.Empty, message)
                    {
                        ErrorCode = ErrorCodes.TrainingExpiryDate,
                        CustomState = VacancyRuleSet.TrainingExpiryDate,
                        PropertyName = nameof(Vacancy.StartDate)
                    };
                    context.AddFailure(failure);
                }
            }));
        }
Пример #14
0
        internal static IRuleBuilderInitial <Vacancy, Vacancy> TrainingMustBeActiveForStartDate(this IRuleBuilder <Vacancy, Vacancy> ruleBuilder, IApprenticeshipProgrammeProvider apprenticeshipProgrammesProvider)
        {
            return(ruleBuilder.CustomAsync(async(vacancy, context, cancellationToken) =>
            {
                var allProgrammes = await apprenticeshipProgrammesProvider.GetApprenticeshipProgrammesAsync();

                var matchingProgramme = allProgrammes.SingleOrDefault(x => x.Id.Equals(vacancy.ProgrammeId, StringComparison.InvariantCultureIgnoreCase));

                if (matchingProgramme.EffectiveTo != null && matchingProgramme.EffectiveTo < vacancy.StartDate)
                {
                    var failure = new ValidationFailure(string.Empty, $"The {matchingProgramme.Title} {matchingProgramme.ApprenticeshipType} is no longer available on the date selected. Choose other apprenticeship training or change the start date.")
                    {
                        ErrorCode = "26",
                        CustomState = VacancyRuleSet.TrainingExpiryDate
                    };
                    context.AddFailure(failure);
                }
            }));
        }