コード例 #1
0
        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);
        }
コード例 #3
0
 public void Assert_SubmissionsSummaryMetrics_AreReturned(SubmissionsSummaryModel result)
 {
     result.Should().BeEquivalentTo(getMetricsResponse);
 }
コード例 #4
0
        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>();
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        public SubmissionsSummaryFixture With_GetMetricsCalled()
        {
            getMetricsSubmissionsSummaryResult = sut.GetMetrics(jobId, academicYear, currentCollectionPeriod, submissionSummaryModels);

            return(this);
        }
コード例 #7
0
        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);
        }