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); }
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; } }
private void SendAllProviderMetricsTelemetry(List <ProviderPeriodEndSummaryModel> providerMetrics, PeriodEndSummaryModel metrics) { foreach (var providerMetric in providerMetrics) { SendProviderMetricsTelemetry(providerMetric, metrics); } }
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); }