Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public EmployerAccountSteps(EmployerAccountContext employerAccountContext,
                             EarningsAndPaymentsContext earningsAndPaymentsContext,
                             SubmissionContext submissionContext)
 {
     EmployerAccountContext     = employerAccountContext;
     EarningsAndPaymentsContext = earningsAndPaymentsContext;
     SubmissionContext          = submissionContext;
 }
Esempio n. 3
0
 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);
         }
     }
 }
Esempio n. 4
0
        public static void AssertPaymentsAndEarningsResults(EarningsAndPaymentsContext earningsAndPaymentsContext, SubmissionContext submissionContext, EmployerAccountContext employerAccountContext)
        {
            if (TestEnvironment.ValidateSpecsOnly)
            {
                return;
            }

            ValidateOverallEarningsAndPayments(earningsAndPaymentsContext, submissionContext, employerAccountContext);
            ValidateLearnerSpecificEarningsAndPayments(earningsAndPaymentsContext, submissionContext, employerAccountContext);
        }
Esempio n. 5
0
        internal static void ParseTransactionTypeTableIntoContext(EarningsAndPaymentsContext earningsAndPaymentsContext, string providerId, Table transactionTypesTable)
        {
            if (transactionTypesTable.Rows.Count < 1)
            {
                throw new ArgumentException("Transaction types table must have at least 1 row");
            }

            var periodNames = ParseEarningAndPaymentsHeaders(transactionTypesTable);

            ParseTransationTypesRows(earningsAndPaymentsContext, providerId, transactionTypesTable, periodNames);
        }
Esempio n. 6
0
        public void GivenTheFollowingPaymentsWillBeAddedForReversal(Table table)
        {
            var context = new EarningsAndPaymentsContext();

            TransactionTypeTableParser.ParseTransactionTypeTableIntoContext(context, "", table);

            foreach (var row in context.ProviderEarnedForOnProgramme)
            {
                var month = Int32.Parse(row.PeriodName.Split('/')[0]);
                var year  = Int32.Parse($"20" + row.PeriodName.Split('/')[1]);
                PaymentsManager.AddRequiredPaymentForReversal(month, year, row.Value, TransactionType.OnProgram);
            }
        }
Esempio n. 7
0
 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;
 }
Esempio n. 8
0
 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);
         }
     }
 }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
 private static void ParseTransationTypesRows(EarningsAndPaymentsContext context, string providerId, Table transactionTypesTable, string[] periodNames)
 {
     foreach (var row in transactionTypesTable.Rows)
     {
         Match match;
         if (row[0] == "On-program")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedForOnProgramme);
         }
         else if (row[0] == "Completion")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedForCompletion);
         }
         else if (row[0] == "Balancing")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedForBalancing);
         }
         else if (row[0] == "Employer 16-18 incentive")
         {
             ParseEmployerRow(providerId, Defaults.EmployerAccountId.ToString(), row, periodNames, context.EmployerEarnedFor16To18Incentive);
         }
         else if ((match = Regex.Match(row[0], "Employer ([0-9]{1,}) 16-18 incentive", RegexOptions.IgnoreCase)).Success)
         {
             ParseEmployerRow(providerId, match.Groups[1].Value, row, periodNames, context.EmployerEarnedFor16To18Incentive);
         }
         else if (row[0] == "Provider 16-18 incentive")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedFor16To18Incentive);
         }
         else if (row[0] == "English and maths on programme")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedForEnglishAndMathOnProgramme);
         }
         else if (row[0] == "English and maths Balancing")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedForEnglishAndMathBalancing);
         }
         else if (row[0] == "Provider disadvantage uplift")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedForDisadvantageUplift);
         }
         else if (row[0] == "Framework uplift on-program")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedForFrameworkUpliftOnProgramme);
         }
         else if (row[0] == "Framework uplift completion")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedForFrameworkUpliftOnCompletion);
         }
         else if (row[0] == "Framework uplift balancing")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedForFrameworkUpliftOnBalancing);
         }
         else if (row[0] == "Provider learning support")
         {
             ParseProviderRow(providerId, row, periodNames, context.ProviderEarnedForLearningSupport);
         }
         else
         {
             throw new ArgumentException($"Unexpected transation types row type of '{row[0]}'");
         }
     }
 }