public void GivenTheFollowingPaymentsHaveBeenMadeToTheProviderAForLearnerA(string providerName, string learnerRefererenceNumber, Table table) { var context = new EarningsAndPaymentsContext(); TransactionTypeTableParser.ParseTransactionTypeTableIntoContext(context, providerName, table); var learningDetails = SubmissionContext.HistoricalLearningDetails.Where(x => x.LearnerReference.Equals(learnerRefererenceNumber, StringComparison.InvariantCultureIgnoreCase)).Single(); long learnerUln; if (!string.IsNullOrEmpty(learningDetails.Uln)) { learnerUln = long.Parse(learningDetails.Uln); LookupContext.AddUln(learnerRefererenceNumber, learnerUln); } else { learnerUln = LookupContext.AddOrGetUln(learnerRefererenceNumber); } var provider = LookupContext.AddOrGetUkprn(providerName); var commitment = CommitmentsContext.Commitments.FirstOrDefault(x => x.ProviderId == providerName && x.LearnerId == learnerRefererenceNumber); CreatePayment(context.ProviderEarnedForOnProgramme, provider, learnerUln, learnerRefererenceNumber, commitment, learningDetails, TransactionType.OnProgram, commitment == null ? FundingSource.CoInvestedSfa : FundingSource.Levy); CreatePayment(context.ProviderEarnedForLearningSupport, provider, learnerUln, learnerRefererenceNumber, commitment, learningDetails, TransactionType.LearningSupport, FundingSource.FullyFundedSfa); CreatePayment(context.ProviderEarnedForFrameworkUpliftOnProgramme, provider, learnerUln, learnerRefererenceNumber, commitment, learningDetails, TransactionType.OnProgramme16To18FrameworkUplift, FundingSource.FullyFundedSfa); }
private void CreatePreviousEarningsAndPayments(string providerName, string learnerRefererenceNumber, Table table, AimType paymentsAimType) { var learnerBreakdown = new EarningsAndPaymentsBreakdown { ProviderId = providerName }; EarningAndPaymentTableParser.ParseEarningsAndPaymentsTableIntoContext(learnerBreakdown, table); var learningDetails = SubmissionContext.HistoricalLearningDetails.Where(x => x.AimType == paymentsAimType && x.LearnerReference.Equals(learnerRefererenceNumber, StringComparison.InvariantCultureIgnoreCase)).Single(); long learnerUln; if (!string.IsNullOrEmpty(learningDetails.Uln)) { learnerUln = long.Parse(learningDetails.Uln); LookupContext.AddUln(learnerRefererenceNumber, learnerUln); } else { learnerUln = LookupContext.AddOrGetUln(learnerRefererenceNumber); } var provider = LookupContext.AddOrGetUkprn(learnerBreakdown.ProviderId); var commitment = CommitmentsContext.Commitments.FirstOrDefault(x => x.ProviderId == learnerBreakdown.ProviderId && x.LearnerId == learnerRefererenceNumber); foreach (var earned in learnerBreakdown.ProviderEarnedTotal) { var requiredPaymentId = Guid.NewGuid().ToString(); var month = int.Parse(earned.PeriodName.Substring(0, 2)); var year = int.Parse(earned.PeriodName.Substring(3, 2)) + 2000; var date = new DateTime(year, month, 1); var periodNumber = date.GetPeriodNumber(); var periodName = $"{TestEnvironment.Variables.OpaRulebaseYear}-R" + periodNumber.ToString("00"); if (earned.Value > 0) { PaymentsManager.SavePaymentDue(requiredPaymentId, provider, learnerUln, commitment, learnerRefererenceNumber, periodName, month, year, learningDetails.AimType == AimType.Programme ? (int)TransactionType.OnProgram : (int)TransactionType.OnProgrammeMathsAndEnglish , earned.Value, learningDetails); var levyPayment = learnerBreakdown.SfaLevyBudget.Where(x => x.PeriodName == earned.PeriodName).SingleOrDefault(); if (levyPayment != null && levyPayment.Value > 0) { PaymentsManager.SavePayment(requiredPaymentId, periodName, month, year, learningDetails.AimType == AimType.Programme ? (int)TransactionType.OnProgram : (int)TransactionType.OnProgrammeMathsAndEnglish, FundingSource.Levy, levyPayment.Value); } var earnedFromEmployer = learnerBreakdown.ProviderEarnedFromEmployers.Where(x => x.PeriodName == earned.PeriodName).SingleOrDefault(); if (earnedFromEmployer != null && earnedFromEmployer.Value > 0) { PaymentsManager.SavePayment(requiredPaymentId, periodName, month, year, learningDetails.AimType == AimType.Programme ? (int)TransactionType.OnProgram : (int)TransactionType.OnProgrammeMathsAndEnglish, FundingSource.CoInvestedEmployer, earnedFromEmployer.Value); } var coInvestedBySfaLevy = learnerBreakdown.SfaLevyCoFundBudget.Where(x => x.PeriodName == earned.PeriodName).SingleOrDefault(); if (coInvestedBySfaLevy != null && coInvestedBySfaLevy.Value > 0) { PaymentsManager.SavePayment(requiredPaymentId, periodName, month, year, learningDetails.AimType == AimType.Programme ? (int)TransactionType.OnProgram : (int)TransactionType.OnProgrammeMathsAndEnglish, FundingSource.CoInvestedSfa, coInvestedBySfaLevy.Value); } var coInvestedBySfaNonLevy = learnerBreakdown.SfaNonLevyCoFundBudget.Where(x => x.PeriodName == earned.PeriodName).SingleOrDefault(); if (coInvestedBySfaNonLevy != null && coInvestedBySfaNonLevy.Value > 0) { PaymentsManager.SavePayment(requiredPaymentId, periodName, month, year, learningDetails.AimType == AimType.Programme ? (int)TransactionType.OnProgram : (int)TransactionType.OnProgrammeMathsAndEnglish, FundingSource.CoInvestedSfa, coInvestedBySfaNonLevy.Value); } var aditionalPayments = learnerBreakdown.SfaLevyAdditionalPayments.Where(x => x.PeriodName == earned.PeriodName).SingleOrDefault(); if (aditionalPayments != null && aditionalPayments.Value > 0) { PaymentsManager.SavePayment(requiredPaymentId, periodName, month, year, learningDetails.AimType == AimType.Programme ? (int)TransactionType.OnProgram : (int)TransactionType.OnProgrammeMathsAndEnglish, FundingSource.FullyFundedSfa, aditionalPayments.Value); } } } }