public DataLockSteps(DataLockContext dataLockContext, CommitmentsContext commitmentsContext, SubmissionContext submissionContext, EmployerAccountContext employerAccountContext, LookupContext lookupContext) { DataLockContext = dataLockContext; CommitmentsContext = commitmentsContext; SubmissionContext = submissionContext; EmployerAccountContext = employerAccountContext; LookupContext = lookupContext; }
public EmployerAccountSteps(EmployerAccountContext employerAccountContext, EarningsAndPaymentsContext earningsAndPaymentsContext, SubmissionContext submissionContext) { EmployerAccountContext = employerAccountContext; EarningsAndPaymentsContext = earningsAndPaymentsContext; SubmissionContext = submissionContext; }
public EarningAndPaymentSteps(EmployerAccountContext employerAccountContext, EarningsAndPaymentsContext earningsAndPaymentsContext, DataLockContext dataLockContext, SubmissionContext submissionContext, LookupContext lookupContext, CommitmentsContext commitmentsContext) { EmployerAccountContext = employerAccountContext; EarningsAndPaymentsContext = earningsAndPaymentsContext; DataLockContext = dataLockContext; SubmissionContext = submissionContext; LookupContext = lookupContext; CommitmentsContext = commitmentsContext; }
public static void AssertPaymentsAndEarningsResults(EarningsAndPaymentsContext earningsAndPaymentsContext, SubmissionContext submissionContext, EmployerAccountContext employerAccountContext) { if (TestEnvironment.ValidateSpecsOnly) { return; } ValidateOverallEarningsAndPayments(earningsAndPaymentsContext, submissionContext, employerAccountContext); ValidateLearnerSpecificEarningsAndPayments(earningsAndPaymentsContext, submissionContext, employerAccountContext); }
protected override IEnumerable <PaymentResult> FilterPayments(PeriodValue period, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext) { var providerPeriod = (ProviderEarnedPeriodValue)period; var earnedPeriod = GetPaymentFilterPeriodName(providerPeriod); var providerPaymentsInPeriod = submissionResults.Where(r => r.ProviderId.Equals(providerPeriod.ProviderId, StringComparison.CurrentCultureIgnoreCase)) .SelectMany(r => r.Payments) .Where(p => p.DeliveryPeriod == earnedPeriod && p.FundingSource != FundingSource.CoInvestedEmployer); return(FilterPeriodPayments(providerPaymentsInPeriod)); }
public override void AssertBreakdown(EarningsAndPaymentsBreakdown breakdown, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext) { var payments = GetPaymentsForBreakdown(breakdown, submissionResults) .Where(p => p.FundingSource == FundingSource.Levy && p.ContractType == ContractType.ContractWithEmployer && p.Amount >= 0) .ToArray(); foreach (var period in breakdown.EmployersLevyAccountDebited) { var employerPayments = payments.Where(p => p.EmployerAccountId == period.EmployerAccountId).ToArray(); var prevPeriod = new EmployerAccountPeriodValue { EmployerAccountId = period.EmployerAccountId, PeriodName = period.PeriodName.ToPeriodDateTime().AddMonths(-1).ToPeriodName(), Value = period.Value }; AssertResultsForPeriod(prevPeriod, employerPayments); } }
protected override IEnumerable <PaymentResult> FilterPayments(PeriodValue period, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext) { var employerPeriod = (EmployerAccountProviderPeriodValue)period; var employer = employerAccountContext.EmployerAccounts.SingleOrDefault(a => a.Id == employerPeriod.EmployerAccountId); var isDasEmployer = employer?.IsDasEmployer ?? false; var earningPeriod = employerPeriod.PeriodName.ToPeriodDateTime().AddMonths(-1).ToPeriodName(); return(submissionResults.Where(l => l.ProviderId.Equals(employerPeriod.ProviderId, System.StringComparison.CurrentCultureIgnoreCase)) .SelectMany(r => r.Payments).Where(p => (p.EmployerAccountId == employerPeriod.EmployerAccountId || !isDasEmployer && p.EmployerAccountId == 0) && p.DeliveryPeriod == earningPeriod && (p.TransactionType == TransactionType.First16To18EmployerIncentive || p.TransactionType == TransactionType.Second16To18EmployerIncentive))); }
public override void AssertBreakdown(EarningsAndPaymentsBreakdown breakdown, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext) { var allEarnings = GetEarningsForBreakdown(breakdown, submissionResults); foreach (var period in breakdown.ProviderEarnedTotal) { AssertResultsForPeriod(period, allEarnings); } }
protected abstract IEnumerable <PaymentResult> FilterPayments(PeriodValue period, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext);
public override void AssertBreakdown(EarningsAndPaymentsBreakdown breakdown, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext) { var payments = GetPaymentsForBreakdown(breakdown, submissionResults) .Where(p => p.FundingSource == FundingSource.CoInvestedSfa && p.ContractType == ContractType.ContractWithEmployer) .ToArray(); foreach (var period in breakdown.SfaLevyCoFundBudget) { AssertResultsForPeriod(period, payments); } }
public abstract void AssertBreakdown(EarningsAndPaymentsBreakdown breakdown, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext);
public override void AssertBreakdown(EarningsAndPaymentsBreakdown breakdown, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext) { var payments = GetPaymentsForBreakdown(breakdown, submissionResults) .Where(p => p.FundingSource == FundingSource.Levy && p.ContractType == ContractType.ContractWithEmployer && p.Amount <= 0) .ToArray(); foreach (var period in breakdown.EmployersLevyAccountCredited) { var employerPayments = payments.Where(p => p.EmployerAccountId == period.EmployerAccountId).ToList(); var positivePayments = employerPayments.Select(x => new PaymentResult { Amount = x.Amount * -1, CalculationPeriod = x.CalculationPeriod, ContractType = x.ContractType, DeliveryPeriod = x.DeliveryPeriod, EmployerAccountId = x.EmployerAccountId, FundingSource = x.FundingSource, TransactionType = x.TransactionType }); var prevPeriod = new EmployerAccountPeriodValue { EmployerAccountId = period.EmployerAccountId, PeriodName = period.PeriodName.ToPeriodDateTime().AddMonths(-1).ToPeriodName(), Value = period.Value }; AssertResultsForPeriod(prevPeriod, positivePayments.ToArray()); } }
public override void AssertBreakdown(EarningsAndPaymentsBreakdown breakdown, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext) { var allPayments = GetPaymentsForBreakdown(breakdown, submissionResults) .Where(p => p.FundingSource != FundingSource.CoInvestedEmployer && p.Amount > 0) .ToArray(); foreach (var period in breakdown.ProviderPaidBySfa) { var prevPeriod = new PeriodValue { PeriodName = period.PeriodName.ToPeriodDateTime().AddMonths(-1).ToPeriodName(), Value = period.Value }; AssertResultsForPeriod(prevPeriod, allPayments); } }
public EmployerAccountSteps(EmployerAccountContext employerAccountContext) { EmployerAccountContext = employerAccountContext; }
public static void AssertPaymentsAndEarningsResults(EarningsAndPaymentsContext earningsAndPaymentsContext, SubmissionContext submissionContext, EmployerAccountContext employerAccountContext) { if (TestEnvironment.ValidateSpecsOnly) { return; } var submissionResults = submissionContext.SubmissionResults.ToArray(); new EmployerEarnedFor16To18IncentiveRule().AssertPeriodValues(earningsAndPaymentsContext.EmployerEarnedFor16To18Incentive, submissionResults, employerAccountContext); new ProviderEarnedForOnProgrammeRule().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedForOnProgramme, submissionResults, employerAccountContext); new ProviderEarnedForCompletionRule().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedForCompletion, submissionResults, employerAccountContext); new ProviderEarnedForBalancingRule().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedForBalancing, submissionResults, employerAccountContext); new ProviderEarnedFor16To18IncentiveRule().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedFor16To18Incentive, submissionResults, employerAccountContext); new ProviderEarnedForEnglishAndMathOnProgrammeRule().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedForEnglishAndMathOnProgramme, submissionResults, employerAccountContext); new ProviderEarnedForEnglishAndMathBalancing().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedForEnglishAndMathBalancing, submissionResults, employerAccountContext); new ProviderEarnedForFrameworkUpliftOnProgrammeRule().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedForFrameworkUpliftOnProgramme, submissionResults, employerAccountContext); new ProviderEarnedForFrameworkUpliftOnCompletionRule().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedForFrameworkUpliftOnCompletion, submissionResults, employerAccountContext); new ProviderEarnedForFrameworkUpliftOnBalancingRule().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedForFrameworkUpliftOnBalancing, submissionResults, employerAccountContext); new ProviderEarnedForLearningSupportRule().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedForLearningSupport, submissionResults, employerAccountContext); new ProviderEarnedForDisadvantageUpliftRule().AssertPeriodValues(earningsAndPaymentsContext.ProviderEarnedForDisadvantageUplift, submissionResults, employerAccountContext); }
private static void ValidateOverallEarningsAndPayments(EarningsAndPaymentsContext earningsAndPaymentsContext, SubmissionContext submissionContext, EmployerAccountContext employerAccountContext) { foreach (var breakdown in earningsAndPaymentsContext.OverallEarningsAndPayments) { foreach (var rule in Rules) { rule.AssertBreakdown(breakdown, submissionContext.SubmissionResults, employerAccountContext); } } }
private static void ValidateLearnerSpecificEarningsAndPayments(EarningsAndPaymentsContext earningsAndPaymentsContext, SubmissionContext submissionContext, EmployerAccountContext employerAccountContext) { foreach (var breakdown in earningsAndPaymentsContext.LearnerOverallEarningsAndPayments) { var learnerResults = submissionContext.SubmissionResults.Where(r => r.LearnerId == breakdown.LearnerId).ToArray(); try { foreach (var rule in Rules) { rule.AssertBreakdown(breakdown, learnerResults, employerAccountContext); } } catch (Exception ex) { throw new Exception($"{ex.Message} (learner {breakdown.LearnerId})", ex); } } }
public override void AssertBreakdown(EarningsAndPaymentsBreakdown breakdown, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext) { var payments = submissionResults.SelectMany(r => r.Payments) .Where(r => r.FundingSource == FundingSource.Levy && r.ContractType == ContractType.ContractWithEmployer); foreach (var period in breakdown.EmployerLevyTransactions) { var employerPayments = payments.Where(p => p.EmployerAccountId == period.EmployerAccountId).ToList(); AssertResultsForPeriod(period, employerPayments.ToArray()); } }
public override void AssertBreakdown(EarningsAndPaymentsBreakdown breakdown, IEnumerable <LearnerResults> submissionResults, EmployerAccountContext employerAccountContext) { var allPayments = GetPaymentsForBreakdown(breakdown, submissionResults) .Where(p => p.FundingSource == FundingSource.CoInvestedEmployer) .ToArray(); foreach (var period in breakdown.PaymentDueFromEmployers) { // Currently have to assume there is only 1 non-levy employer in spec as there is no way to tell employer if there is no commitment. var employerAccount = employerAccountContext.EmployerAccounts.SingleOrDefault(a => a.Id == period.EmployerAccountId); var isDasEmployer = employerAccount == null ? false : employerAccount.IsDasEmployer; var paymentsForEmployer = allPayments.Where(p => p.EmployerAccountId == period.EmployerAccountId || (!isDasEmployer && p.EmployerAccountId == 0)).ToArray(); var prevPeriod = new EmployerAccountPeriodValue { EmployerAccountId = period.EmployerAccountId, PeriodName = period.PeriodName.ToPeriodDateTime().AddMonths(-1).ToPeriodName(), Value = period.Value }; AssertResultsForPeriod(prevPeriod, paymentsForEmployer); } }
public virtual void AssertPeriodValues(IEnumerable <PeriodValue> periodValues, LearnerResults[] submissionResults, EmployerAccountContext employerAccountContext) { foreach (var period in periodValues) { var payments = FilterPayments(period, submissionResults, employerAccountContext); var paidInPeriod = payments.Sum(p => p.Amount); if (Math.Round(paidInPeriod, 2) != Math.Round(period.Value, 2)) { throw new Exception(FormatAssertionFailureMessage(period, paidInPeriod)); } } }