public void CheckComparerCorrectlySortsByAimSequenceNumber() { var comparer = new AimAndDeliverableComparer(); var model1 = new AimAndDeliverableModel { LearnRefNumber = "2", ConRefNumber = "2", LearnStartDate = new DateTime(2018, 11, 10), AimSeqNumber = 4 }; var model2 = new AimAndDeliverableModel { LearnRefNumber = "2", ConRefNumber = "2", LearnStartDate = new DateTime(2018, 11, 10), AimSeqNumber = 3 }; var model3 = new AimAndDeliverableModel { LearnRefNumber = "2", ConRefNumber = "2", LearnStartDate = new DateTime(2018, 11, 10), AimSeqNumber = 2 }; var model4 = new AimAndDeliverableModel { LearnRefNumber = "2", ConRefNumber = "2", LearnStartDate = new DateTime(2018, 11, 10), AimSeqNumber = 1 }; var models = new List <AimAndDeliverableModel> { model1, model2, model2, model3, model4 }; models.Sort(comparer); Assert.True(models[0].AimSeqNumber == 1); Assert.True(models[4].AimSeqNumber == 4); }
public void CheckComparerCorrectlySortsByContractReference() { var comparer = new AimAndDeliverableComparer(); var model1 = new AimAndDeliverableModel { LearnRefNumber = "2", ConRefNumber = "4" }; var model2 = new AimAndDeliverableModel { LearnRefNumber = "2", ConRefNumber = "3" }; var model3 = new AimAndDeliverableModel { LearnRefNumber = "2", ConRefNumber = "2" }; var model4 = new AimAndDeliverableModel { LearnRefNumber = "2", ConRefNumber = "1" }; var models = new List <AimAndDeliverableModel> { model1, model2, model2, model3, model4 }; models.Sort(comparer); Assert.True(models[0].ConRefNumber == "1"); Assert.True(models[4].ConRefNumber == "4"); }
public void CheckComparerCorrectlySortsByLearnerReference() { var comparer = new AimAndDeliverableComparer(); var model1 = new AimAndDeliverableModel { LearnRefNumber = string.Empty }; var model2 = new AimAndDeliverableModel { LearnRefNumber = "1" }; var model3 = new AimAndDeliverableModel { LearnRefNumber = "2" }; var model4 = new AimAndDeliverableModel { LearnRefNumber = null }; var models = new List <AimAndDeliverableModel> { model4, model3, model2, model1 }; models.Sort(comparer); Assert.True(models[0].LearnRefNumber == null); Assert.True(models[3].LearnRefNumber == "2"); }
private async Task <string> GetCsv(int ukPrn, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { return(null); } var learners = await _validRepository.GetLearners(ukPrn, cancellationToken); var learningDeliveries = await _validRepository.GetLearningDeliveries(ukPrn, cancellationToken); if (learners == null || learningDeliveries == null) { return(null); } var learnerDeliveryFams = await _validRepository.GetLearningDeliveryFAMs(ukPrn, cancellationToken); var outcomes = await _validRepository.GetDPOutcomes(ukPrn, cancellationToken); var learnMonitorings = await _validRepository.GetProviderSpecLearnerMonitorings(ukPrn, cancellationToken); var deliveryMonitorings = await _validRepository.GetProviderSpecDeliveryMonitorings(ukPrn, cancellationToken); var fm70LearningDeliveries = await _fm70Repository.GetLearningDeliveries(ukPrn, cancellationToken); var fm70Deliverables = await _fm70Repository.GetLearningDeliveryDeliverables(ukPrn, cancellationToken); var fm70DeliverablePeriods = await _fm70Repository.GetLearningDeliveryDeliverablePeriods(ukPrn, cancellationToken); var fm70Outcomes = await _fm70Repository.GetOutcomes(ukPrn, cancellationToken); var learnAimRefs = learningDeliveries.Select(ld => ld.LearnAimRef).ToList(); var deliverableCodes = fm70Deliverables?.Select(d => d.DeliverableCode).ToList(); var fcsCodeMappings = _referenceDataCache.GetContractDeliverableCodeMapping(deliverableCodes, cancellationToken); var larsDeliveries = _referenceDataCache.GetLarsLearningDelivery(learnAimRefs, cancellationToken); var reportData = new List <AimAndDeliverableModel>(); foreach (var learner in learners) { var deliveries = learningDeliveries.Where(ld => ld.LearnRefNumber == learner.LearnRefNumber).ToList(); foreach (var delivery in deliveries) { var fm70Delivery = fm70LearningDeliveries?.SingleOrDefault(d => d.LearnRefNumber == learner.LearnRefNumber && d.AimSeqNumber == delivery.AimSeqNumber); var fm70DeliveryDeliverables = fm70Deliverables?.Where(d => d.LearnRefNumber == learner.LearnRefNumber && d.AimSeqNumber == delivery.AimSeqNumber); var deliveryFam = learnerDeliveryFams?.SingleOrDefault(l => l.LearnRefNumber == learner.LearnRefNumber && l.AimSeqNumber == delivery.AimSeqNumber && l.LearnDelFAMType == "RES"); var outcomeType = fm70Delivery?.EligibleProgressionOutcomeType; var outcomeCode = fm70Delivery?.EligibleProgressionOutcomeCode; var outcomeStartDate = fm70Delivery?.EligibleProgressionOutomeStartDate; var outcome = outcomes?.SingleOrDefault(o => o.OutType == outcomeType && o.OutCode == outcomeCode && o.OutStartDate == outcomeStartDate); var fm70Outcome = fm70Outcomes?.SingleOrDefault(o => o.OutType == outcomeType && o.OutCode == outcomeCode && o.OutStartDate == outcomeStartDate); var learnerMonitorings = learnMonitorings?.Where(m => m.LearnRefNumber == learner.LearnRefNumber).ToList(); var learnerDeliveryMonitorings = deliveryMonitorings ?.Where(m => m.LearnRefNumber == learner.LearnRefNumber).ToList(); var larsDelivery = larsDeliveries?.SingleOrDefault(l => l.LearnAimRef == delivery.LearnAimRef); foreach (var fm70Deliverable in fm70DeliveryDeliverables) { var deliverableCode = fm70Deliverable?.DeliverableCode; var fcsMapping = fcsCodeMappings?.SingleOrDefault(f => f.ExternalDeliverableCode == deliverableCode && f.FundingStreamPeriodCode == FundingStreamPeriodCode); var fm70Periods = fm70DeliverablePeriods?.Where(p => p.LearnRefNumber == learner.LearnRefNumber && p.AimSeqNumber == delivery.AimSeqNumber && p.DeliverableCode == fm70Deliverable?.DeliverableCode); foreach (var period in fm70Periods) { var total = period?.StartEarnings ?? 0 + period?.AchievementEarnings ?? 0 + period?.AdditionalProgCostEarnings ?? 0 + period?.ProgressionEarnings ?? 0; if (period.ReportingVolume == 0 && period.DeliverableVolume == 0 && total == 0) { continue; } var reportModel = new AimAndDeliverableModel { LearnRefNumber = learner.LearnRefNumber, ULN = learner.ULN, AimSeqNumber = delivery.AimSeqNumber, ConRefNumber = delivery.ConRefNumber, DeliverableCode = deliverableCode, DeliverableName = fcsMapping?.DeliverableName, LearnAimRef = delivery.LearnAimRef, DeliverableUnitCost = fm70Deliverable?.DeliverableUnitCost, ApplicWeightFundRate = fm70Delivery?.ApplicWeightFundRate, AimValue = fm70Delivery?.AimValue, LearnAimRefTitle = larsDelivery?.LearnAimRefTitle, PMUKPRN = learner.PMUKPRN, CampId = learner.CampId, ProvSpecLearnMonA = learnerMonitorings ?.SingleOrDefault(m => m.ProvSpecLearnMonOccur == "A")?.ProvSpecLearnMon, ProvSpecLearnMonB = learnerMonitorings ?.SingleOrDefault(m => m.ProvSpecLearnMonOccur == "B")?.ProvSpecLearnMon, SWSupAimId = delivery.SWSupAimId, NotionalNVQLevelv2 = larsDelivery?.NotionalNVQLevelv2, SectorSubjectAreaTier2 = larsDelivery?.SectorSubjectAreaTier2, AdjustedAreaCostFactor = fm70Delivery?.AdjustedAreaCostFactor, AdjustedPremiumFactor = fm70Delivery?.AdjustedPremiumFactor, LearnStartDate = delivery.LearnStartDate, LDESFEngagementStartDate = fm70Delivery?.LDESFEngagementStartDate, LearnPlanEndDate = delivery.LearnPlanEndDate, CompStatus = delivery.CompStatus, LearnActEndDate = delivery.LearnActEndDate, Outcome = delivery.Outcome, AddHours = delivery.AddHours, LearnDelFAMCode = deliveryFam?.LearnDelFAMCode, ProvSpecDelMonA = learnerDeliveryMonitorings ?.SingleOrDefault(m => m.ProvSpecDelMonOccur == "A")?.ProvSpecDelMon, ProvSpecDelMonB = learnerDeliveryMonitorings ?.SingleOrDefault(m => m.ProvSpecDelMonOccur == "B")?.ProvSpecDelMon, ProvSpecDelMonC = learnerDeliveryMonitorings ?.SingleOrDefault(m => m.ProvSpecDelMonOccur == "C")?.ProvSpecDelMon, ProvSpecDelMonD = learnerDeliveryMonitorings ?.SingleOrDefault(m => m.ProvSpecDelMonOccur == "D")?.ProvSpecDelMon, PartnerUKPRN = delivery.PartnerUKPRN, DelLocPostCode = delivery.DelLocPostCode, LatestPossibleStartDate = fm70Delivery?.LatestPossibleStartDate, EligibleProgressionOutomeStartDate = fm70Delivery?.EligibleProgressionOutomeStartDate, EligibleOutcomeEndDate = outcome?.OutEndDate, EligibleOutcomeCollectionDate = outcome?.OutCollDate, EligibleOutcomeDateProgressionLength = fm70Outcome?.OutcomeDateForProgression, EligibleProgressionOutcomeType = fm70Delivery?.EligibleProgressionOutcomeType, EligibleProgressionOutcomeCode = fm70Delivery?.EligibleProgressionOutcomeCode, Period = _reportMonths[period?.Period - 1 ?? 0], DeliverableVolume = period?.DeliverableVolume, StartEarnings = period?.StartEarnings, AchievementEarnings = period?.AchievementEarnings, AdditionalProgCostEarnings = period?.AdditionalProgCostEarnings, ProgressionEarnings = period?.ProgressionEarnings, TotalEarnings = total }; reportData.Add(reportModel); } } } } reportData.Sort(_comparer); using (var ms = new MemoryStream()) { var utF8Encoding = new UTF8Encoding(false, true); using (var textWriter = new StreamWriter(ms, utF8Encoding)) { using (var csvWriter = new CsvWriter(textWriter)) { WriteCsvRecords <AimAndDeliverableMapper, AimAndDeliverableModel>(csvWriter, reportData); csvWriter.Flush(); textWriter.Flush(); return(Encoding.UTF8.GetString(ms.ToArray())); } } } }
private AimAndDeliverableModel GetAimAndDeliverableModel( LearnerDetails learnerDetails, Fm70LearningDelivery fm70Delivery, LarsLearningDeliveryModel larsDelivery, DpOutcome outcome, Fm70DpOutcome fm70Outcome, LearningDeliveryFam fam, IDictionary <LearnerMonitoringKey, ProviderSpecLearnerMonitoring> learnerMonitorings, IDictionary <DeliveryMonitoringKey, ProviderSpecDeliveryMonitoring> deliveryMonitorings, Fm70LearningDeliveryDeliverable deliverable = null, Fm70LearningDeliveryDeliverablePeriod period = null, FcsDeliverableCodeMapping fcsMapping = null, decimal?total = null) { var model = new AimAndDeliverableModel { LearnRefNumber = learnerDetails.LearnRefNumber, ULN = learnerDetails.Uln, AimSeqNumber = learnerDetails.AimSeqNumber, ConRefNumber = learnerDetails.ConRefNumber, DeliverableCode = deliverable?.DeliverableCode, DeliverableName = fcsMapping?.DeliverableName, LearnAimRef = learnerDetails.LearnAimRef, DeliverableUnitCost = deliverable?.DeliverableUnitCost, ApplicWeightFundRate = fm70Delivery?.ApplicWeightFundRate, AimValue = fm70Delivery?.AimValue, LearnAimRefTitle = larsDelivery?.LearnAimRefTitle, PMUKPRN = learnerDetails.Pmukprn, CampId = learnerDetails.CampId, ProvSpecLearnMonA = GetLearnerMonitoring(learnerMonitorings, learnerDetails.LearnRefNumber, "A"), ProvSpecLearnMonB = GetLearnerMonitoring(learnerMonitorings, learnerDetails.LearnRefNumber, "B"), SWSupAimId = learnerDetails.SwsupAimId, NotionalNVQLevelv2 = larsDelivery?.NotionalNVQLevelv2, SectorSubjectAreaTier2 = larsDelivery?.SectorSubjectAreaTier2, AdjustedAreaCostFactor = fm70Delivery?.AdjustedAreaCostFactor, AdjustedPremiumFactor = fm70Delivery?.AdjustedPremiumFactor, LearnStartDate = learnerDetails.LearnStartDate, LDESFEngagementStartDate = fm70Delivery?.LdEsfEngagementStartDate, LearnPlanEndDate = learnerDetails.LearnPlanEndDate, CompStatus = learnerDetails.CompStatus, LearnActEndDate = learnerDetails.LearnActEndDate, Outcome = learnerDetails.Outcome, AddHours = learnerDetails.AddHours, LearnDelFAMCode = fam?.LearnDelFamCode, ProvSpecDelMonA = GetDeliveryMonitoring(deliveryMonitorings, learnerDetails.LearnRefNumber, learnerDetails.AimSeqNumber, "A"), ProvSpecDelMonB = GetDeliveryMonitoring(deliveryMonitorings, learnerDetails.LearnRefNumber, learnerDetails.AimSeqNumber, "B"), ProvSpecDelMonC = GetDeliveryMonitoring(deliveryMonitorings, learnerDetails.LearnRefNumber, learnerDetails.AimSeqNumber, "C"), ProvSpecDelMonD = GetDeliveryMonitoring(deliveryMonitorings, learnerDetails.LearnRefNumber, learnerDetails.AimSeqNumber, "D"), PartnerUKPRN = learnerDetails.PartnerUkprn, DelLocPostCode = learnerDetails.DelLocPostCode, LatestPossibleStartDate = fm70Delivery?.LatestPossibleStartDate, EligibleProgressionOutomeStartDate = fm70Delivery?.EligibleProgressionOutomeStartDate, EligibleOutcomeEndDate = outcome?.OutEndDate, EligibleOutcomeCollectionDate = outcome?.OutCollDate, EligibleOutcomeDateProgressionLength = fm70Outcome?.OutcomeDateForProgression, EligibleProgressionOutcomeType = fm70Delivery?.EligibleProgressionOutcomeType, EligibleProgressionOutcomeCode = fm70Delivery?.EligibleProgressionOutcomeCode, Period = _reportMonths[period?.Period - 1 ?? 0], DeliverableVolume = period?.DeliverableVolume, StartEarnings = period?.StartEarnings, AchievementEarnings = period?.AchievementEarnings, AdditionalProgCostEarnings = period?.AdditionalProgCostEarnings, ProgressionEarnings = period?.ProgressionEarnings, TotalEarnings = total }; return(model); }