private FunctionalSkillEarning CreateEarning(IntermediateLearningAim source, FunctionalSkillType functionalSkillEarningType) { var attributeName = FunctionalSkillEarningTypeToFM36AttributeName(functionalSkillEarningType); var allPeriods = source.Aims.Select(p => p.LearningDeliveryPeriodisedValues.SingleOrDefault(v => v.AttributeName == attributeName)) .Where(p => p != null) .ToArray(); var periods = new EarningPeriod[12]; for (byte i = 1; i <= 12; i++) { var periodValues = allPeriods.Select(p => p.GetPeriodValue(i)).ToArray(); var periodValue = periodValues.SingleOrDefault(v => v.GetValueOrDefault(0) != 0).GetValueOrDefault(0); periods[i - 1] = new EarningPeriod { Period = i, Amount = periodValue.AsRounded(), SfaContributionPercentage = 1 }; } return(new FunctionalSkillEarning { Type = functionalSkillEarningType, Periods = new ReadOnlyCollection <EarningPeriod>(periods) }); }
private FunctionalSkillEarning CreateFunctionalSkillEarning(FunctionalSkillType type, decimal installmentAmount = 0m) { return(new FunctionalSkillEarning() { Periods = CreatePeriods(12, installmentAmount), Type = type }); }
private static string FunctionalSkillEarningTypeToFM36AttributeName(FunctionalSkillType functionalSkillEarningType) { switch (functionalSkillEarningType) { case FunctionalSkillType.BalancingMathsAndEnglish: return("MathEngBalPayment"); case FunctionalSkillType.OnProgrammeMathsAndEnglish: return("MathEngOnProgPayment"); case FunctionalSkillType.LearningSupport: return("LearnSuppFundCash"); default: throw new InvalidOperationException($"Cannot get FM36 attribute name for unknown functional skill earning type: {functionalSkillEarningType}"); } }