public async Task Save(SubmissionSummaryModel submissionSummary, CancellationToken cancellationToken)
        {
            var transaction = await Database.BeginTransactionAsync(cancellationToken).ConfigureAwait(false);

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

                await SubmissionSummaries.AddAsync(submissionSummary, cancellationToken);
                await SaveChangesAsync(cancellationToken).ConfigureAwait(false);

                transaction.Commit();
            }
            catch
            {
                transaction.Rollback();
                throw;
            }
        }
        public void CreateSubmissionSummaryModel(byte collectionPeriod, short academicYear)
        {
            submissionSummaryModel = new SubmissionSummaryModel
            {
                Percentage = 0,
                CollectionPeriod = collectionPeriod,
                AcademicYear = academicYear,
                JobId = 123,
                TotalDataLockedEarnings = 123,
                AlreadyPaidDataLockedEarnings = 123,
                AdjustedDataLockedEarnings = 123,
                Ukprn = 123,

                SubmissionMetrics = new ContractTypeAmountsVerbose(),
                DcEarnings = new ContractTypeAmounts(),
                DasEarnings = new ContractTypeAmountsVerbose(),
                HeldBackCompletionPayments = new ContractTypeAmounts(),
                RequiredPayments = new ContractTypeAmounts(),
                YearToDatePayments = new ContractTypeAmounts(),
            };
        }
        public virtual SubmissionSummaryModel GetMetrics()
        {
            var result = new SubmissionSummaryModel
            {
                CollectionPeriod = CollectionPeriod,
                AcademicYear     = AcademicYear,
                JobId            = JobId,
                Ukprn            = Ukprn,
                DcEarnings       = GetDcEarnings(),
                AlreadyPaidDataLockedEarnings = alreadyPaidDataLocked,
                TotalDataLockedEarnings       = actualTotalDataLocked,
                AdjustedDataLockedEarnings    = actualTotalDataLocked - alreadyPaidDataLocked,
                DataLockMetrics = new List <DataLockCountsModel> {
                    new DataLockCountsModel {
                        Amounts = dataLocked
                    }
                },
                HeldBackCompletionPayments = heldBackCompletionPayments,
                YearToDatePayments         = yearToDatePayments,
                RequiredPayments           = GetRequiredPayments(),
                RequiredPaymentsMetrics    = GetRequiredPaymentsMetrics(),
            };

            result.DasEarnings     = GetDasEarnings(result.DcEarnings.ContractType1, result.DcEarnings.ContractType2);
            result.EarningsMetrics = new List <EarningsModel>();
            result.EarningsMetrics.AddRange(dcEarnings.Select(earning => new EarningsModel
            {
                EarningsType = EarningsType.Dc,
                Amounts      = earning
            }));
            result.EarningsMetrics.AddRange(dasEarnings.Select(earning => new EarningsModel
            {
                EarningsType = EarningsType.Das,
                Amounts      = earning
            }));
            result.SubmissionMetrics = GetSubmissionMetrics(result);
            result.Percentage        = result.SubmissionMetrics.Percentage;
            return(result);
        }
        private ContractTypeAmountsVerbose GetSubmissionMetrics(SubmissionSummaryModel submissionSummary)
        {
            var submissionMetrics = new ContractTypeAmountsVerbose
            {
                ContractType1 = submissionSummary.YearToDatePayments.ContractType1 +
                                submissionSummary.RequiredPayments.ContractType1 +
                                submissionSummary.AdjustedDataLockedEarnings +
                                submissionSummary.HeldBackCompletionPayments.ContractType1,
                ContractType2 = submissionSummary.YearToDatePayments.ContractType2 +
                                submissionSummary.RequiredPayments.ContractType2 +
                                submissionSummary.HeldBackCompletionPayments.ContractType2
            };

            submissionMetrics.DifferenceContractType1 =
                submissionMetrics.ContractType1 - submissionSummary.DcEarnings.ContractType1;
            submissionMetrics.DifferenceContractType2 =
                submissionMetrics.ContractType2 - submissionSummary.DcEarnings.ContractType2;
            submissionMetrics.PercentageContractType1 = Helpers.GetPercentage(submissionMetrics.ContractType1,
                                                                              submissionSummary.DcEarnings.ContractType1);
            submissionMetrics.PercentageContractType2 = Helpers.GetPercentage(submissionMetrics.ContractType2,
                                                                              submissionSummary.DcEarnings.ContractType2);
            submissionMetrics.Percentage = Helpers.GetPercentage(submissionMetrics.Total, submissionSummary.DcEarnings.Total);
            return(submissionMetrics);
        }
 public async Task SaveSubmissionMetrics(SubmissionSummaryModel submissionSummary, CancellationToken cancellationToken)
 {
     await persistenceDataContext.Save(submissionSummary, cancellationToken).ConfigureAwait(false);
 }
Esempio n. 6
0
        private void SendMetricsTelemetry(SubmissionSummaryModel metrics, long reportGenerationDuration)
        {
            var properties = new Dictionary <string, string>
            {
                { TelemetryKeys.JobId, metrics.JobId.ToString() },
                { TelemetryKeys.Ukprn, metrics.Ukprn.ToString() },
                { TelemetryKeys.CollectionPeriod, metrics.CollectionPeriod.ToString() },
                { TelemetryKeys.AcademicYear, metrics.AcademicYear.ToString() },
            };

            var submissionMetrics = metrics.SubmissionMetrics;
            var dasEarnings       = metrics.DasEarnings;
            var dcEarnings        = metrics.DcEarnings;
            // ReSharper disable InconsistentNaming this is to make variable name easy to read
            var das_earningsMetrics           = metrics.EarningsMetrics.Where(x => x.EarningsType == EarningsType.Das).ToList();
            var dc_earningsMetrics            = metrics.EarningsMetrics.Where(x => x.EarningsType == EarningsType.Dc).ToList();
            var dataLockMetrics               = metrics.DataLockMetrics;
            var requiredPayments_Act1_Metrics = metrics.RequiredPaymentsMetrics.Where(x => x.Amounts.ContractType == ContractType.Act1).ToList();
            var requiredPayments_Act2_Metrics = metrics.RequiredPaymentsMetrics.Where(x => x.Amounts.ContractType == ContractType.Act2).ToList();

            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 },

                { "EarningsPercentage", (double)dasEarnings.Percentage },
                { "EarningsPercentageContractType1", (double)dasEarnings.PercentageContractType1 },
                { "EarningsPercentageContractType2", (double)dasEarnings.PercentageContractType2 },

                { "EarningsDifferenceTotal", (double)dasEarnings.DifferenceTotal },
                { "EarningsDifferenceContractType1", (double)dasEarnings.DifferenceContractType1 },
                { "EarningsDifferenceContractType2", (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 },

                { "DataLockedEarningsAmount", (double)metrics.AdjustedDataLockedEarnings },

                { "DataLockedEarningsTotal", (double)metrics.TotalDataLockedEarnings },

                { "DataLockAmountAlreadyPaid", (double)metrics.AlreadyPaidDataLockedEarnings },

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

                { "YearToDatePaymentsTotal", (double)metrics.YearToDatePayments.Total },
                { "YearToDatePaymentsContractType1Total", (double)metrics.YearToDatePayments.ContractType1 },
                { "YearToDatePaymentsContractType2Total", (double)metrics.YearToDatePayments.ContractType2 },

                { "DasEarningsTransactionType1", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType1) },
                { "DasEarningsTransactionType2", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType2) },
                { "DasEarningsTransactionType3", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType3) },
                { "DasEarningsTransactionType4", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType4) },
                { "DasEarningsTransactionType5", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType5) },
                { "DasEarningsTransactionType6", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType6) },
                { "DasEarningsTransactionType7", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType7) },
                { "DasEarningsTransactionType8", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType8) },
                { "DasEarningsTransactionType9", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType9) },
                { "DasEarningsTransactionType10", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType10) },
                { "DasEarningsTransactionType11", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType11) },
                { "DasEarningsTransactionType12", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType12) },
                { "DasEarningsTransactionType13", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType13) },
                { "DasEarningsTransactionType14", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType14) },
                { "DasEarningsTransactionType15", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType15) },
                { "DasEarningsTransactionType16", (double)das_earningsMetrics.Sum(x => x.Amounts.TransactionType16) },

                { "DcEarningsTransactionType1", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType1) },
                { "DcEarningsTransactionType2", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType2) },
                { "DcEarningsTransactionType3", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType3) },
                { "DcEarningsTransactionType4", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType4) },
                { "DcEarningsTransactionType5", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType5) },
                { "DcEarningsTransactionType6", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType6) },
                { "DcEarningsTransactionType7", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType7) },
                { "DcEarningsTransactionType8", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType8) },
                { "DcEarningsTransactionType9", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType9) },
                { "DcEarningsTransactionType10", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType10) },
                { "DcEarningsTransactionType11", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType11) },
                { "DcEarningsTransactionType12", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType12) },
                { "DcEarningsTransactionType13", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType13) },
                { "DcEarningsTransactionType14", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType14) },
                { "DcEarningsTransactionType15", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType15) },
                { "DcEarningsTransactionType16", (double)dc_earningsMetrics.Sum(x => x.Amounts.TransactionType16) },

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

                { "RequiredPaymentsTotal", (double)metrics.RequiredPayments.Total },
                { "RequiredPaymentsAct1Total", (double)metrics.RequiredPayments.ContractType1 },
                { "RequiredPaymentsAc2Total", (double)metrics.RequiredPayments.ContractType2 },

                { "RequiredPaymentsAct1TotalTransactionType1", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType1) },
                { "RequiredPaymentsAct1TotalTransactionType2", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType2) },
                { "RequiredPaymentsAct1TotalTransactionType3", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType3) },
                { "RequiredPaymentsAct1TotalTransactionType4", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType4) },
                { "RequiredPaymentsAct1TotalTransactionType5", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType5) },
                { "RequiredPaymentsAct1TotalTransactionType6", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType6) },
                { "RequiredPaymentsAct1TotalTransactionType7", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType7) },
                { "RequiredPaymentsAct1TotalTransactionType8", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType8) },
                { "RequiredPaymentsAct1TotalTransactionType9", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType9) },
                { "RequiredPaymentsAct1TotalTransactionType10", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType10) },
                { "RequiredPaymentsAct1TotalTransactionType11", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType11) },
                { "RequiredPaymentsAct1TotalTransactionType12", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType12) },
                { "RequiredPaymentsAct1TotalTransactionType13", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType13) },
                { "RequiredPaymentsAct1TotalTransactionType14", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType14) },
                { "RequiredPaymentsAct1TotalTransactionType15", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType15) },
                { "RequiredPaymentsAct1TotalTransactionType16", (double)requiredPayments_Act1_Metrics.Sum(x => x.Amounts.TransactionType16) },

                { "RequiredPaymentsAct2TotalTransactionType1", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType1) },
                { "RequiredPaymentsAct2TotalTransactionType2", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType2) },
                { "RequiredPaymentsAct2TotalTransactionType3", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType3) },
                { "RequiredPaymentsAct2TotalTransactionType4", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType4) },
                { "RequiredPaymentsAct2TotalTransactionType5", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType5) },
                { "RequiredPaymentsAct2TotalTransactionType6", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType6) },
                { "RequiredPaymentsAct2TotalTransactionType7", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType7) },
                { "RequiredPaymentsAct2TotalTransactionType8", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType8) },
                { "RequiredPaymentsAct2TotalTransactionType9", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType9) },
                { "RequiredPaymentsAct2TotalTransactionType10", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType10) },
                { "RequiredPaymentsAct2TotalTransactionType11", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType11) },
                { "RequiredPaymentsAct2TotalTransactionType12", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType12) },
                { "RequiredPaymentsAct2TotalTransactionType13", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType13) },
                { "RequiredPaymentsAct2TotalTransactionType14", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType14) },
                { "RequiredPaymentsAct2TotalTransactionType15", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType15) },
                { "RequiredPaymentsAct2TotalTransactionType16", (double)requiredPayments_Act2_Metrics.Sum(x => x.Amounts.TransactionType16) },

                { "RequiredPaymentsDasEarningsPercentageComparison", Math.Round(((double)(metrics.YearToDatePayments.Total + metrics.RequiredPayments.Total) / (double)metrics.DasEarnings.Total) * 100, 2) }
            };

            telemetry.TrackEvent("Finished Generating Submission Metrics", properties, stats);
        }