Exemple #1
0
        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);
        }