public async Task SaveSubmissionsSummaryMetrics(SubmissionsSummaryModel submissionsSummary, CancellationToken cancellationToken) { var transaction = await Database.BeginTransactionAsync(cancellationToken).ConfigureAwait(false); try { await Database.ExecuteSqlCommandAsync($@" Delete From [Metrics].[SubmissionsSummary] Where AcademicYear = {submissionsSummary.AcademicYear} And CollectionPeriod = {submissionsSummary.CollectionPeriod} " , cancellationToken); await SubmissionsSummaries.AddAsync(submissionsSummary, cancellationToken); await SaveChangesAsync(cancellationToken).ConfigureAwait(false); transaction.Commit(); } catch { transaction.Rollback(); throw; } }
public async Task SaveSubmissionsSummaryMetrics(SubmissionsSummaryModel submissionsSummary, CancellationToken cancellationToken) { if (submissionsSummary == null) { return; } await persistenceDataContext.SaveSubmissionsSummaryMetrics(submissionsSummary, cancellationToken); }
public void Assert_SubmissionsSummaryMetrics_AreReturned(SubmissionsSummaryModel result) { result.Should().BeEquivalentTo(getMetricsResponse); }
public SubmissionSummaryMetricsServiceFixture() { var fixture = new Fixture(); jobId = fixture.Create <long>(); academicYear = fixture.Create <byte>(); collectionPeriod = fixture.Create <byte>(); logger = new Mock <IPaymentLogger>(); submissionMetricsRepository = new Mock <ISubmissionMetricsRepository>(); submissionJobsRepository = new Mock <ISubmissionJobsRepository>(); submissionsSummary = new Mock <ISubmissionsSummary>(); telemetry = new Mock <ITelemetry>(); sut = new SubmissionWindowValidationService(logger.Object, submissionMetricsRepository.Object, submissionJobsRepository.Object, submissionsSummary.Object, telemetry.Object); getSubmissionsSummaryMetricsResponse = new List <SubmissionSummaryModel> { new SubmissionSummaryModel { JobId = jobId, AcademicYear = academicYear, CollectionPeriod = collectionPeriod, Percentage = 100, SubmissionMetrics = new ContractTypeAmountsVerbose { ContractType1 = 100, ContractType2 = 100 }, DcEarnings = new ContractTypeAmounts { ContractType1 = 200, ContractType2 = 200 }, DasEarnings = new ContractTypeAmountsVerbose { ContractType1 = 100, ContractType2 = 100 }, TotalDataLockedEarnings = 1, AlreadyPaidDataLockedEarnings = 2, AdjustedDataLockedEarnings = 0, RequiredPayments = new ContractTypeAmounts { ContractType1 = 100, ContractType2 = 100 }, HeldBackCompletionPayments = new ContractTypeAmounts { ContractType1 = 1, ContractType2 = 2 }, YearToDatePayments = new ContractTypeAmounts { ContractType1 = 3, ContractType2 = 4 }, DataLockMetrics = new DataLockCountsModel { Amounts = new DataLockTypeCounts { DataLock1 = 11, DataLock2 = 5, DataLock3 = 78, DataLock4 = 45, DataLock5 = 2, DataLock6 = 51, DataLock7 = 76, DataLock8 = 9, DataLock9 = 556, DataLock10 = 3, DataLock11 = 27, DataLock12 = 60 } } } }; getMetricsResponse = new SubmissionsSummaryModel { JobId = jobId, AcademicYear = academicYear, CollectionPeriod = collectionPeriod, Percentage = 50, SubmissionMetrics = new ContractTypeAmountsVerbose { ContractType1 = 100, ContractType2 = 100, DifferenceContractType1 = -100, DifferenceContractType2 = -100, PercentageContractType1 = 50, PercentageContractType2 = 50, Percentage = 50 }, DcEarnings = new ContractTypeAmounts { ContractType1 = 200, ContractType2 = 200 }, DasEarnings = new ContractTypeAmountsVerbose { ContractType1 = 100, ContractType2 = 100, DifferenceContractType1 = -100, DifferenceContractType2 = -100, PercentageContractType1 = 50, PercentageContractType2 = 50, Percentage = 50 }, TotalDataLockedEarnings = 1, AlreadyPaidDataLockedEarnings = 2, AdjustedDataLockedEarnings = 0, RequiredPayments = new ContractTypeAmounts { ContractType1 = 100, ContractType2 = 100 }, HeldBackCompletionPayments = new ContractTypeAmounts { ContractType1 = 1, ContractType2 = 2 }, YearToDatePayments = new ContractTypeAmounts { ContractType1 = 3, ContractType2 = 4 }, DataLockMetricsTotals = new DataLockCountsTotalsModel { Amounts = new DataLockTypeCounts { DataLock1 = 11, DataLock2 = 5, DataLock3 = 78, DataLock4 = 45, DataLock5 = 2, DataLock6 = 51, DataLock7 = 76, DataLock8 = 9, DataLock9 = 556, DataLock10 = 3, DataLock11 = 27, DataLock12 = 60 } } }; submissionsSummaryModelTelemetryProperties = new Dictionary <string, string> { { TelemetryKeys.JobId, jobId.ToString() }, { TelemetryKeys.CollectionPeriod, collectionPeriod.ToString() }, { TelemetryKeys.AcademicYear, academicYear.ToString() }, { "IsWithinTolerance", (getMetricsResponse.Percentage > 99.92m && getMetricsResponse.Percentage < 100.08m).ToString() }, }; getCollectionPeriodToleranceResponse = new Mock <CollectionPeriodToleranceModel>(); }
private void SendTelemetry(SubmissionsSummaryModel metrics, long reportGenerationDuration) { if (metrics == null) { return; } var properties = new Dictionary <string, string> { { TelemetryKeys.JobId, metrics.JobId.ToString() }, { TelemetryKeys.CollectionPeriod, metrics.CollectionPeriod.ToString() }, { TelemetryKeys.AcademicYear, metrics.AcademicYear.ToString() }, { "IsWithinTolerance", metrics.IsWithinTolerance.ToString() }, }; var submissionMetrics = metrics.SubmissionMetrics; var dasEarnings = metrics.DasEarnings; var dcEarnings = metrics.DcEarnings; var stats = new Dictionary <string, double> { { "ReportGenerationDuration", reportGenerationDuration }, { "Percentage", (double)submissionMetrics.Percentage }, { "ContractType1Percentage", (double)submissionMetrics.PercentageContractType1 }, { "ContractType2Percentage", (double)submissionMetrics.PercentageContractType2 }, { "DifferenceTotal", (double)submissionMetrics.DifferenceTotal }, { "DifferenceContractType1", (double)submissionMetrics.DifferenceContractType1 }, { "DifferenceContractType2", (double)submissionMetrics.DifferenceContractType2 }, { "ContractAmountTotal", (double)submissionMetrics.Total }, { "ContractType1Amount", (double)submissionMetrics.ContractType1 }, { "ContractType2Amount", (double)submissionMetrics.ContractType2 }, { "DasEarningsPercentage", (double)dasEarnings.Percentage }, { "DasEarningsPercentageContractType1", (double)dasEarnings.PercentageContractType1 }, { "DasEarningsPercentageContractType2", (double)dasEarnings.PercentageContractType2 }, { "DasEarningsDifferenceTotal", (double)dasEarnings.DifferenceTotal }, { "DasEarningsDifferenceContractType1", (double)dasEarnings.DifferenceContractType1 }, { "DasEarningsDifferenceContractType2", (double)dasEarnings.DifferenceContractType2 }, { "DasEarningsTotal", (double)dasEarnings.Total }, { "DasEarningsContractType1Total", (double)dasEarnings.ContractType1 }, { "DasEarningsContractType2Total", (double)dasEarnings.ContractType2 }, { "DcEarningsTotal", (double)dcEarnings.Total }, { "DcEarningsContractType1Total", (double)dcEarnings.ContractType1 }, { "DcEarningsContractType2Total", (double)dcEarnings.ContractType2 }, { "DataLockedEarnings", (double)metrics.TotalDataLockedEarnings }, { "DataLockedAlreadyPaidAmount", (double)metrics.AlreadyPaidDataLockedEarnings }, { "DataLockedAdjustedAmount", (double)metrics.AdjustedDataLockedEarnings }, { "HeldBackCompletionPaymentsTotal", (double)metrics.HeldBackCompletionPayments.Total }, { "HeldBackCompletionPaymentsContractType1", (double)metrics.HeldBackCompletionPayments.ContractType1 }, { "HeldBackCompletionPaymentsContractType2", (double)metrics.HeldBackCompletionPayments.ContractType2 }, { "RequiredPaymentsTotal", (double)metrics.RequiredPayments.Total }, { "RequiredPaymentsAct1Total", (double)metrics.RequiredPayments.ContractType1 }, { "RequiredPaymentsAc2Total", (double)metrics.RequiredPayments.ContractType2 }, { "YearToDatePaymentsTotal", (double)metrics.YearToDatePayments.Total }, { "YearToDatePaymentsContractType1Total", (double)metrics.YearToDatePayments.ContractType1 }, { "YearToDatePaymentsContractType2Total", (double)metrics.YearToDatePayments.ContractType2 }, { "RequiredPaymentsDasEarningsPercentageComparison", Math.Round(((double)(metrics.YearToDatePayments.Total + metrics.RequiredPayments.Total) / (double)metrics.DasEarnings.Total) * 100, 2) } }; telemetry.TrackEvent("Finished Generating Submissions Summary Metrics", properties, stats); }
public SubmissionsSummaryFixture With_GetMetricsCalled() { getMetricsSubmissionsSummaryResult = sut.GetMetrics(jobId, academicYear, currentCollectionPeriod, submissionSummaryModels); return(this); }
public SubmissionsSummaryModel GetMetrics(long jobId, short academicYear, byte collectionPeriod, IList <SubmissionSummaryModel> submissions) { if (submissions == null || submissions.Count == 0) { return(null); } var submissionMetricsContractType1 = submissions.Sum(s => s.SubmissionMetrics.ContractType1); var submissionMetricsContractType2 = submissions.Sum(s => s.SubmissionMetrics.ContractType2); var dcEarningsContractType1 = submissions.Sum(s => s.DcEarnings.ContractType1); var dcEarningsContractType2 = submissions.Sum(s => s.DcEarnings.ContractType2); var dasEarningsContractType1 = submissions.Sum(s => s.DasEarnings.ContractType1); var dasEarningsContractType2 = submissions.Sum(s => s.DasEarnings.ContractType2); var percentage = Helpers.GetPercentage(submissionMetricsContractType1 + submissionMetricsContractType2, dcEarningsContractType1 + dcEarningsContractType2); submissionsSummaryModel = new SubmissionsSummaryModel { JobId = jobId, AcademicYear = academicYear, CollectionPeriod = collectionPeriod, Percentage = percentage, SubmissionMetrics = new ContractTypeAmountsVerbose { ContractType1 = submissionMetricsContractType1, ContractType2 = submissionMetricsContractType2, DifferenceContractType1 = submissionMetricsContractType1 - dcEarningsContractType1, DifferenceContractType2 = submissionMetricsContractType2 - dcEarningsContractType2, PercentageContractType1 = Helpers.GetPercentage(submissionMetricsContractType1, dcEarningsContractType1), PercentageContractType2 = Helpers.GetPercentage(submissionMetricsContractType2, dcEarningsContractType2), Percentage = percentage, }, DcEarnings = new ContractTypeAmounts { ContractType1 = dcEarningsContractType1, ContractType2 = dcEarningsContractType2, }, DasEarnings = new ContractTypeAmountsVerbose { ContractType1 = dasEarningsContractType1, ContractType2 = dasEarningsContractType2, DifferenceContractType1 = dasEarningsContractType1 - dcEarningsContractType1, DifferenceContractType2 = dasEarningsContractType2 - dcEarningsContractType2, PercentageContractType1 = Helpers.GetPercentage(dasEarningsContractType1, dcEarningsContractType1), PercentageContractType2 = Helpers.GetPercentage(dasEarningsContractType2, dcEarningsContractType2), Percentage = Helpers.GetPercentage(dasEarningsContractType1 + dasEarningsContractType2, dcEarningsContractType1 + dcEarningsContractType2), }, AdjustedDataLockedEarnings = submissions.Sum(s => s.AdjustedDataLockedEarnings), TotalDataLockedEarnings = submissions.Sum(s => s.TotalDataLockedEarnings), AlreadyPaidDataLockedEarnings = submissions.Sum(s => s.AlreadyPaidDataLockedEarnings), HeldBackCompletionPayments = new ContractTypeAmounts { ContractType1 = submissions.Sum(s => s.HeldBackCompletionPayments.ContractType1), ContractType2 = submissions.Sum(s => s.HeldBackCompletionPayments.ContractType2), }, RequiredPayments = new ContractTypeAmounts { ContractType1 = submissions.Sum(s => s.RequiredPayments.ContractType1), ContractType2 = submissions.Sum(s => s.RequiredPayments.ContractType2), }, YearToDatePayments = new ContractTypeAmounts { ContractType1 = submissions.Sum(s => s.YearToDatePayments.ContractType1), ContractType2 = submissions.Sum(s => s.YearToDatePayments.ContractType2), } }; return(submissionsSummaryModel); }