public GenerationOptions CreateGenerationOptions(LearnerTypeRequired requiresLearner) { switch (requiresLearner) { case LearnerTypeRequired.CommunityLearning: this.Options = new GenerationOptions() { DOBRequired = true, NIRequired = false, AimDefaultType = GenerationOptions.AimTypes.CommunityLearningFM10ValidAims, Age19 = true, EmploymentRequired = true }; break; case LearnerTypeRequired.Apprenticeships: this.Options = new GenerationOptions() { DOBRequired = true, NIRequired = true, Age19 = false, EmploymentRequired = true, LD = new LearningDeliveryOptions() { IncludeSOF = true } }; break; case LearnerTypeRequired.NonFunded: this.Options = new GenerationOptions() { DOBRequired = true, NIRequired = false, AimDefaultType = GenerationOptions.AimTypes.NonfundedValidAims, Age19 = true }; break; case LearnerTypeRequired.YP1619: this.Options = new GenerationOptions() { DOBRequired = true, NIRequired = true, AimDefaultType = GenerationOptions.AimTypes.YP1619Aims, EngMathsGardeRequired = true, EmploymentRequired = true, LD = new LearningDeliveryOptions() { IncludeSOF = true } }; break; case LearnerTypeRequired.OtherYP1619: this.Options = new GenerationOptions() { DOBRequired = true, NIRequired = true, AimDefaultType = GenerationOptions.AimTypes.OtherYP1619Aims, EngMathsGardeRequired = true, EmploymentRequired = true, LD = new LearningDeliveryOptions() { IncludeSOF = true, IncludeLDM = true } }; break; case LearnerTypeRequired.Adult: this.Options = new GenerationOptions() { DOBRequired = true, Age19 = true, NIRequired = true, AimDefaultType = GenerationOptions.AimTypes.AdultFM35ValidAims, EmploymentRequired = true, LD = new LearningDeliveryOptions() { IncludeSOF = true, IncludeFFI = true, IncludeHHS = true } }; break; case LearnerTypeRequired.OtherAdult: this.Options = new GenerationOptions() { DOBRequired = true, Age19 = true, NIRequired = true, AimDefaultType = GenerationOptions.AimTypes.OtherAdultFM81ValidAims, EmploymentRequired = true, LD = new LearningDeliveryOptions() { IncludeSOF = true, IncludeFFI = true, IncludeHHS = true, IncludeLDM = true } }; break; case LearnerTypeRequired.ESF: this.Options = new GenerationOptions() { DOBRequired = true, Age19 = true, NIRequired = true, AimDefaultType = GenerationOptions.AimTypes.ESFValidAims, EmploymentRequired = true, LD = new LearningDeliveryOptions() { IncludeSOF = true, IncludeFFI = false, IncludeHHS = true, IncludeContract = true } }; break; default: throw new NotImplementedException($"CreateGenerationOptions for {requiresLearner} has not been implemented"); } return(this.Options); }
internal int GenerateAndMutate( string ruleName, bool valid, int currentLearnerIndex, List <XmlTriplet> triplets, ref long ULNIndex) { XmlTriplet triplet = triplets.First(); int result = 0; LearnerGenerator lg = new LearnerGenerator(_cache); foreach (var functor in _ruleFunctors[ruleName]) { foreach (var funcy in functor.LearnerMutators(_cache)) { GenerationOptions options = lg.CreateGenerationOptions(funcy.LearnerType); funcy.DoMutateOptions(options); if (options.OverrideUKPRN.HasValue) { var ftrip = triplets.Where(s => s.UKPRN == options.OverrideUKPRN.Value); if (ftrip.Count() == 0) { triplet = new XmlTriplet() { UKPRN = options.OverrideUKPRN.Value }; triplets.Add(triplet); } } else { triplet = triplets.First(); } lg.Options = options; List <MessageLearner> generated = lg.Generate(ruleName, funcy.LearnerType, currentLearnerIndex, ref ULNIndex); generated.ForEach(s => { triplet.FileRuleLearners.Add(new FileRuleLearner() { ExclusionRecord = funcy.ExclusionRecord, RuleName = ruleName, LearnRefNumber = s.LearnRefNumber, ValidLines = funcy.ValidLines, InvalidLines = funcy.InvalidLines, Valid = valid }); funcy.DoMutateLearner(s, valid); if (lg.Options.CreateDestinationAndProgression) { MessageLearnerDestinationandProgression prog = lg.GenerateProgression(ruleName, s); funcy.DoMutateProgression?.Invoke(prog, valid); triplet.Progressions.Add(prog); } }); triplet.Learners.AddRange(generated); currentLearnerIndex += generated.Count; result += generated.Count; } } return(result); }