Exemple #1
0
        public PeriodEndSummaryModel GetMetrics()
        {
            CalculateTotals();

            periodEndSummary = new PeriodEndSummaryModel
            {
                CollectionPeriod                    = collectionPeriod,
                AcademicYear                        = academicYear,
                JobId                               = jobId,
                DcEarnings                          = dcEarnings,
                HeldBackCompletionPayments          = heldBackCompletionPayments,
                PaymentMetrics                      = new ContractTypeAmountsVerbose(),
                Payments                            = payments,
                YearToDatePayments                  = yearToDatePayments,
                AlreadyPaidDataLockedEarnings       = dataLockedAlreadyPaidTotal,
                AlreadyPaidDataLockedEarnings16To18 = dataLockedAlreadyPaidTotal16To18,
                AlreadyPaidDataLockedEarnings19Plus = dataLockedAlreadyPaidTotal19Plus,
                AdjustedDataLockedEarnings          = dataLockedEarnings - dataLockedAlreadyPaidTotal,
                AdjustedDataLockedEarnings16To18    = dataLockedEarnings16To18 - dataLockedAlreadyPaidTotal16To18,
                AdjustedDataLockedEarnings19Plus    = dataLockedEarnings19Plus - dataLockedAlreadyPaidTotal19Plus,
                TotalDataLockedEarnings             = dataLockedEarnings,
                TotalDataLockedEarnings16To18       = dataLockedEarnings16To18,
                TotalDataLockedEarnings19Plus       = dataLockedEarnings19Plus,
                DataLockTypeCounts                  = dataLockTypeCounts,
                InLearning                          = inLearning,
                NegativeEarnings                    = negativeEarnings
            };
            periodEndSummary.PaymentMetrics = Helpers.CreatePaymentMetrics(periodEndSummary);
            periodEndSummary.Percentage     = periodEndSummary.PaymentMetrics.Percentage;
            return(periodEndSummary);
        }
Exemple #2
0
        private void SendSummaryMetricsTelemetry(PeriodEndSummaryModel metrics, long reportGenerationDuration)
        {
            var properties = new Dictionary <string, string>
            {
                { TelemetryKeys.JobId, metrics.JobId.ToString() },
                { TelemetryKeys.CollectionPeriod, metrics.CollectionPeriod.ToString() },
                { TelemetryKeys.AcademicYear, metrics.AcademicYear.ToString() },
            };

            var stats = new Dictionary <string, double>
            {
                { "Percentage", (double)metrics.Percentage },

                { "ContractType1", (double)metrics.PaymentMetrics.ContractType1 },
                { "ContractType2", (double)metrics.PaymentMetrics.ContractType2 },

                { "DifferenceTotal", (double)metrics.PaymentMetrics.DifferenceTotal },
                { "DifferenceContractType1", (double)metrics.PaymentMetrics.DifferenceContractType1 },
                { "DifferenceContractType2", (double)metrics.PaymentMetrics.DifferenceContractType2 },

                { "PercentageTotal", (double)metrics.PaymentMetrics.Percentage },
                { "PercentageContractType1", (double)metrics.PaymentMetrics.PercentageContractType1 },
                { "PercentageContractType2", (double)metrics.PaymentMetrics.PercentageContractType2 },

                { "EarningsDCTotal", (double)metrics.DcEarnings.Total },
                { "EarningsDCContractType1", (double)metrics.DcEarnings.ContractType1 },
                { "EarningsDCContractType2", (double)metrics.DcEarnings.ContractType2 },

                { "PaymentsTotal", (double)metrics.Payments.Total },
                { "PaymentsContractType1", (double)metrics.Payments.ContractType1 },
                { "PaymentsContractType2", (double)metrics.Payments.ContractType2 },

                { "DataLockedEarnings", (double)metrics.AdjustedDataLockedEarnings },
                { "AlreadyPaidDataLockedEarnings", (double)metrics.AlreadyPaidDataLockedEarnings },
                { "TotalDataLockedEarnings", (double)metrics.TotalDataLockedEarnings },

                { "DataLockedCountDLock1", (double)metrics.DataLockTypeCounts.DataLock1 },
                { "DataLockedCountDLock2", (double)metrics.DataLockTypeCounts.DataLock2 },
                { "DataLockedCountDLock3", (double)metrics.DataLockTypeCounts.DataLock3 },
                { "DataLockedCountDLock4", (double)metrics.DataLockTypeCounts.DataLock4 },
                { "DataLockedCountDLock5", (double)metrics.DataLockTypeCounts.DataLock5 },
                { "DataLockedCountDLock6", (double)metrics.DataLockTypeCounts.DataLock6 },
                { "DataLockedCountDLock7", (double)metrics.DataLockTypeCounts.DataLock7 },
                { "DataLockedCountDLock8", (double)metrics.DataLockTypeCounts.DataLock8 },
                { "DataLockedCountDLock9", (double)metrics.DataLockTypeCounts.DataLock9 },
                { "DataLockedCountDLock10", (double)metrics.DataLockTypeCounts.DataLock10 },
                { "DataLockedCountDLock11", (double)metrics.DataLockTypeCounts.DataLock11 },
                { "DataLockedCountDLock12", (double)metrics.DataLockTypeCounts.DataLock12 },

                { "HeldBackCompletionPaymentsTotal", (double)metrics.HeldBackCompletionPayments.Total },
                { "HeldBackCompletionPaymentsContractType1", (double)metrics.HeldBackCompletionPayments.ContractType1 },
                { "HeldBackCompletionPaymentsContractType2", (double)metrics.HeldBackCompletionPayments.ContractType2 },

                { "PaymentsYearToDateTotal", (double)metrics.YearToDatePayments.Total },
                { "PaymentsYearToDateContractType1", (double)metrics.YearToDatePayments.ContractType1 },
                { "PaymentsYearToDateContractType2", (double)metrics.YearToDatePayments.ContractType2 },
            };

            telemetry.TrackEvent("Finished Generating Period End Metrics", properties, stats);
        }
        public void GetPaymentsSummary_Calculates_Correct_Values()
        {
            IPeriodEndSummaryModel summaryModel = new PeriodEndSummaryModel()
            {
                YearToDatePayments = new ContractTypeAmounts()
                {
                    ContractType1 = 500m, ContractType2 = 1000m
                },
                AdjustedDataLockedEarnings = 1200m,
                Payments = new ContractTypeAmounts()
                {
                    ContractType1 = 300m, ContractType2 = 100m
                },
                HeldBackCompletionPayments = new ContractTypeAmounts()
                {
                    ContractType1 = 300m, ContractType2 = 100m
                },
                DcEarnings = new ContractTypeAmounts()
                {
                    ContractType2 = 11000, ContractType1 = 6000
                }
            };

            var paymentMetrics = Helpers.CreatePaymentMetrics(summaryModel);

            paymentMetrics.ContractType1.Should().Be(summaryModel.YearToDatePayments.ContractType1 +
                                                     summaryModel.Payments.ContractType1 +
                                                     summaryModel.AdjustedDataLockedEarnings +
                                                     summaryModel.HeldBackCompletionPayments.ContractType1);
            paymentMetrics.ContractType2.Should().Be(summaryModel.YearToDatePayments.ContractType2 +
                                                     summaryModel.Payments.ContractType2 +
                                                     summaryModel.HeldBackCompletionPayments.ContractType2);

            paymentMetrics.DifferenceContractType1.Should()
            .Be(Math.Round(paymentMetrics.ContractType1 - summaryModel.DcEarnings.ContractType1, 2));
            paymentMetrics.DifferenceContractType2.Should()
            .Be(Math.Round(paymentMetrics.ContractType2 - summaryModel.DcEarnings.ContractType2, 2));

            paymentMetrics.PercentageContractType1.Should()
            .Be(Math.Round(paymentMetrics.ContractType1 / summaryModel.DcEarnings.ContractType1 * 100, 2));
            paymentMetrics.PercentageContractType2.Should()
            .Be(Math.Round(paymentMetrics.ContractType2 / summaryModel.DcEarnings.ContractType2 * 100, 2));

            paymentMetrics.Percentage.Should().Be(Math.Round(paymentMetrics.Total / summaryModel.DcEarnings.Total * 100, 2));
        }
        public PeriodEndSummaryModel GetMetrics()
        {
            CalculateTotals();

            var result = new PeriodEndSummaryModel()
            {
                CollectionPeriod              = collectionPeriod,
                AcademicYear                  = academicYear,
                JobId                         = jobId,
                DcEarnings                    = dcEarnings,
                HeldBackCompletionPayments    = heldBackCompletionPayments,
                PaymentMetrics                = new ContractTypeAmountsVerbose(),
                Payments                      = payments,
                YearToDatePayments            = yearToDatePayments,
                AlreadyPaidDataLockedEarnings = dataLockedAlreadyPaidTotal,
                AdjustedDataLockedEarnings    = dataLockedEarnings - dataLockedAlreadyPaidTotal,
                TotalDataLockedEarnings       = dataLockedEarnings
            };

            result.PaymentMetrics = Helpers.CreatePaymentMetrics(result);
            result.Percentage     = result.PaymentMetrics.Percentage;
            return(result);
        }
 public async Task SaveProviderSummaries(List <ProviderPeriodEndSummaryModel> providerSummaries, PeriodEndSummaryModel overallPeriodEndSummary, CancellationToken cancellationToken)
 {
     await persistenceDataContext.SaveProviderSummaries(providerSummaries, overallPeriodEndSummary, cancellationToken);
 }
        public async Task SaveProviderSummaries(List <ProviderPeriodEndSummaryModel> providerSummaries, PeriodEndSummaryModel overallPeriodEndSummary, CancellationToken cancellationToken)
        {
            var transaction = await Database.BeginTransactionAsync(cancellationToken).ConfigureAwait(false);

            try
            {
                await Database.ExecuteSqlCommandAsync($@"
                    Delete 
                        From [Metrics].[PeriodEndSummary] 
                    Where 
                        AcademicYear = {overallPeriodEndSummary.AcademicYear}
                        And CollectionPeriod = {overallPeriodEndSummary.CollectionPeriod}
                    "
                                                      , cancellationToken);

                await PeriodEndSummaries.AddAsync(overallPeriodEndSummary, cancellationToken);

                await Database.ExecuteSqlCommandAsync($@"
                    Delete 
                        From [Metrics].[ProviderPeriodEndSummary] 
                    Where 
                        AcademicYear = {overallPeriodEndSummary.AcademicYear}
                        And CollectionPeriod = {overallPeriodEndSummary.CollectionPeriod}
                    "
                                                      , cancellationToken);

                await ProviderPeriodEndSummaries.AddRangeAsync(providerSummaries, cancellationToken);

                await SaveChangesAsync(cancellationToken).ConfigureAwait(false);

                transaction.Commit();
            }
            catch
            {
                transaction.Rollback();
                throw;
            }
        }
Exemple #7
0
 private void SendAllProviderMetricsTelemetry(List <ProviderPeriodEndSummaryModel> providerMetrics, PeriodEndSummaryModel metrics)
 {
     foreach (var providerMetric in providerMetrics)
     {
         SendProviderMetricsTelemetry(providerMetric, metrics);
     }
 }
Exemple #8
0
        private void SendProviderMetricsTelemetry(ProviderPeriodEndSummaryModel providerMetrics, PeriodEndSummaryModel overallMetrics)
        {
            var properties = new Dictionary <string, string>
            {
                { TelemetryKeys.JobId, providerMetrics.JobId.ToString() },
                { TelemetryKeys.CollectionPeriod, overallMetrics.CollectionPeriod.ToString() },
                { TelemetryKeys.AcademicYear, overallMetrics.AcademicYear.ToString() },
                { TelemetryKeys.Ukprn, providerMetrics.Ukprn.ToString() },
            };

            var act1FundingSource = providerMetrics
                                    .FundingSourceAmounts
                                    .Where(x => x.ContractType == ContractType.Act1)
                                    .ToList();
            var act2FundingSource = providerMetrics
                                    .FundingSourceAmounts
                                    .Where(x => x.ContractType == ContractType.Act2)
                                    .ToList();

            var act1TransactionTypes = providerMetrics
                                       .TransactionTypeAmounts
                                       .Where(x => x.TransactionTypeAmounts.ContractType == ContractType.Act1)
                                       .ToList();
            var act2TransactionTypes = providerMetrics
                                       .TransactionTypeAmounts
                                       .Where(x => x.TransactionTypeAmounts.ContractType == ContractType.Act2)
                                       .ToList();

            var stats = new Dictionary <string, double>
            {
                { "Percentage", (double)providerMetrics.PaymentMetrics.Percentage },
                { "PercentageContractType1", (double)providerMetrics.PaymentMetrics.PercentageContractType1 },
                { "PercentageContractType2", (double)providerMetrics.PaymentMetrics.PercentageContractType2 },

                { "Total", (double)providerMetrics.PaymentMetrics.Total },
                { "ContractType1", (double)providerMetrics.PaymentMetrics.ContractType1 },
                { "ContractType2", (double)providerMetrics.PaymentMetrics.ContractType2 },

                { "DifferenceTotal", (double)providerMetrics.PaymentMetrics.DifferenceTotal },
                { "DifferenceContractType1", (double)providerMetrics.PaymentMetrics.DifferenceContractType1 },
                { "DifferenceContractType2", (double)providerMetrics.PaymentMetrics.DifferenceContractType2 },


                { "EarningsDCTotal", (double)providerMetrics.DcEarnings.Total },
                { "EarningsDCContractType1", (double)providerMetrics.DcEarnings.ContractType1 },
                { "EarningsDCContractType2", (double)providerMetrics.DcEarnings.ContractType2 },

                { "PaymentsTotal", (double)providerMetrics.Payments.Total },
                { "PaymentsContractType1", (double)providerMetrics.Payments.ContractType1 },
                { "PaymentsContractType2", (double)providerMetrics.Payments.ContractType2 },

                { "DataLockedEarnings", (double)providerMetrics.AdjustedDataLockedEarnings },
                { "AlreadyPaidDataLockedEarnings", (double)providerMetrics.AlreadyPaidDataLockedEarnings },
                { "TotalDataLockedEarnings", (double)providerMetrics.TotalDataLockedEarnings },

                { "HeldBackCompletionPaymentsTotal", (double)providerMetrics.HeldBackCompletionPayments.Total },
                { "HeldBackCompletionPaymentsContractType1", (double)providerMetrics.HeldBackCompletionPayments.ContractType1 },
                { "HeldBackCompletionPaymentsContractType2", (double)providerMetrics.HeldBackCompletionPayments.ContractType2 },

                { "PaymentsYearToDateTotal", (double)providerMetrics.YearToDatePayments.Total },
                { "PaymentsYearToDateContractType1", (double)providerMetrics.YearToDatePayments.ContractType1 },
                { "PaymentsYearToDateContractType2", (double)providerMetrics.YearToDatePayments.ContractType2 },


                { "ContractType1FundingSourceTotal", (double)act1FundingSource.Sum(x => x.Total) },
                { "ContractType1FundingSource1", (double)act1FundingSource.Sum(x => x.FundingSource1) },
                { "ContractType1FundingSource2", (double)act1FundingSource.Sum(x => x.FundingSource2) },
                { "ContractType1FundingSource3", (double)act1FundingSource.Sum(x => x.FundingSource3) },
                { "ContractType1FundingSource4", (double)act1FundingSource.Sum(x => x.FundingSource4) },
                { "ContractType1FundingSource5", (double)act1FundingSource.Sum(x => x.FundingSource5) },

                { "ContractType2FundingSourceTotal", (double)act2FundingSource.Sum(x => x.Total) },
                { "ContractType2FundingSource1", (double)act2FundingSource.Sum(x => x.FundingSource1) },
                { "ContractType2FundingSource2", (double)act2FundingSource.Sum(x => x.FundingSource2) },
                { "ContractType2FundingSource3", (double)act2FundingSource.Sum(x => x.FundingSource3) },
                { "ContractType2FundingSource4", (double)act2FundingSource.Sum(x => x.FundingSource4) },
                { "ContractType2FundingSource5", (double)act2FundingSource.Sum(x => x.FundingSource5) },


                { "ContractType1TransactionTypeTotal", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.Total) },
                { "ContractType1TransactionType01", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType1) },
                { "ContractType1TransactionType02", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType2) },
                { "ContractType1TransactionType03", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType3) },
                { "ContractType1TransactionType04", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType4) },
                { "ContractType1TransactionType05", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType5) },
                { "ContractType1TransactionType06", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType6) },
                { "ContractType1TransactionType07", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType7) },
                { "ContractType1TransactionType08", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType8) },
                { "ContractType1TransactionType09", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType9) },
                { "ContractType1TransactionType10", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType10) },
                { "ContractType1TransactionType11", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType11) },
                { "ContractType1TransactionType12", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType12) },
                { "ContractType1TransactionType13", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType13) },
                { "ContractType1TransactionType14", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType14) },
                { "ContractType1TransactionType15", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType15) },
                { "ContractType1TransactionType16", (double)act1TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType16) },

                { "ContractType2TransactionTypeTotal", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.Total) },
                { "ContractType2TransactionType01", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType1) },
                { "ContractType2TransactionType02", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType2) },
                { "ContractType2TransactionType03", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType3) },
                { "ContractType2TransactionType04", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType4) },
                { "ContractType2TransactionType05", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType5) },
                { "ContractType2TransactionType06", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType6) },
                { "ContractType2TransactionType07", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType7) },
                { "ContractType2TransactionType08", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType8) },
                { "ContractType2TransactionType09", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType9) },
                { "ContractType2TransactionType10", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType10) },
                { "ContractType2TransactionType11", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType11) },
                { "ContractType2TransactionType12", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType12) },
                { "ContractType2TransactionType13", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType13) },
                { "ContractType2TransactionType14", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType14) },
                { "ContractType2TransactionType15", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType15) },
                { "ContractType2TransactionType16", (double)act2TransactionTypes.Sum(x => x.TransactionTypeAmounts.TransactionType16) },
            };

            telemetry.TrackEvent($"Finished Generating Period End Metrics for Provider: {providerMetrics.Ukprn}", properties, stats);
        }