private static IEnumerable <string> GetQualifications() { var metaDataServiceFactory = new MetaDataServiceFactory(new LarsDataStreamFactory(), new CsvServiceFactory()); var appSettings = new AppSettings(); using (var metaDataService = metaDataServiceFactory.CreateService()) { Console.WriteLine("Get metadata bag..."); var bag = metaDataService.GetMetaDataBag(appSettings); Console.WriteLine("Getting qualifications..."); var qualifications = QualificationFilter.GetQualification(bag, appSettings); return(qualifications.Select(x => x.Title)); } }
private static IEnumerable <string> GetFilteredQualifications() { Console.WriteLine("Loading metadata service..."); var metaDataServiceFactory = new MetaDataServiceFactory(new LarsDataStreamFactory(), new CsvServiceFactory()); var appSettings = new AppSettings(); using (var metaDataService = metaDataServiceFactory.CreateService()) { Console.WriteLine("Get metadata bag..."); var bag = metaDataService.GetMetaDataBag(appSettings); Console.WriteLine("Getting qualifications..."); var qualifications = QualificationFilter.GetQualification(bag, appSettings); Console.WriteLine("Adding funding to qualifications..."); var shownQualifications = new List <string>(); foreach (var qualification in qualifications) { var qualificationFundings = bag.Fundings.Where( x => x.LearnAimRef.Equals(qualification.LearnAimRef, StringComparison.OrdinalIgnoreCase) && x.FundingCategory.Equals("APP_ACT_COST", StringComparison.CurrentCultureIgnoreCase) && ((x.EffectiveTo.HasValue && x.EffectiveTo.Value >= DateTime.Now) || !x.EffectiveTo.HasValue)) .ToList(); if (!qualificationFundings.Any()) { continue; } var funds = qualificationFundings.FirstOrDefault(x => x.RateWeighted > 0 && ((x.EffectiveTo.HasValue && x.EffectiveTo.Value >= DateTime.Now) || !x.EffectiveTo.HasValue)); if (funds != null) { shownQualifications.Add(qualification.Title); } var funding = (qualificationFundings.FirstOrDefault(x => x.EffectiveTo == null && x.RateWeighted < 1) ?? qualificationFundings.FirstOrDefault(x => x.EffectiveTo == null)) ?? qualificationFundings.OrderByDescending(x => x.EffectiveTo).FirstOrDefault(); // If there are funding entries but there is no zero funding weight then treat as though // the qualification has no zero funding weights(i.e. it is funded) if (funding == null) { continue; } qualification.FundingRateWeight = funding.RateWeighted; qualification.FundingEffectiveTo = funding.EffectiveTo; } File.AppendAllLines("ShownQualifications.txt", shownQualifications); Console.WriteLine("Saving qualifications with funding details to file..."); var dataItems = qualifications.Select(x => new { LearnRef = x.LearnAimRef, x.Title, RateWeight = x.FundingRateWeight, DateTo = x.FundingEffectiveTo?.ToString("d") ?? "N/A", x.ProgType }); var dataOutput = dataItems.Select(x => $"{x.LearnRef}, {x.Title}, {x.RateWeight}, {x.DateTo}, {x.ProgType}"); File.WriteAllLines("DataSheet.csv", dataOutput); Console.WriteLine("filtering qualification on funding values..."); qualifications = qualifications.Where( x => !x.FundingEffectiveTo.HasValue || x.FundingEffectiveTo.Value > DateTime.Today).ToList(); qualifications = qualifications.Where(x => x.FundingRateWeight < 1).ToList(); qualifications = qualifications.Where(x => x.ProgType <= 3).ToList(); Console.WriteLine("Returning filtered qualification..."); return(qualifications.Select(x => x.Title).Distinct().OrderBy(x => x).ToList()); } }