private void AddUserActivityMetrics(Dictionary <Guid, UserApplicationMetrics> userApplicationMetrics)
        {
            var dateTime = DateTime.UtcNow;

            while (dateTime > Constants.OldestValidDate)
            {
                var userActivityMetrics = _userMetricsRepository.GetUserActivityMetrics(dateTime.AddDays(-30), dateTime);
                foreach (var userActivityMetric in userActivityMetrics)
                {
                    var groupComponents    = userActivityMetric["_id"].AsBsonDocument;
                    var candidateId        = groupComponents["CandidateId"].AsGuid;
                    var dateCreated        = groupComponents["DateCreated"].ToUniversalTime();
                    var activated          = userActivityMetric["Activated"].AsBoolean;
                    var activateCodeExpiry = groupComponents["ActivateCodeExpiry"].ToNullableUniversalTime();
                    var activationDate     = groupComponents.ToNullableUniversalTime("ActivationDate");
                    var lastLogin          = groupComponents.ToNullableUniversalTime("LastLogin");

                    userApplicationMetrics[candidateId] = new UserApplicationMetrics
                    {
                        CandidateId        = candidateId,
                        DateCreated        = dateCreated,
                        Activated          = activated,
                        ActivateCodeExpiry = activateCodeExpiry,
                        ActivationDate     = activationDate,
                        LastLogin          = lastLogin
                    };
                }

                dateTime = dateTime.AddDays(-30);
            }
        }
        private void AddApprenticeshipApplicationStatusCounts(Dictionary <Guid, UserApplicationMetrics> userApplicationMetrics)
        {
            var apprenticeshipApplicationsStatusCounts = _apprenticeshipMetricsRepository.GetApplicationStatusCounts();

            foreach (var apprenticeshipApplicationsStatusCount in apprenticeshipApplicationsStatusCounts)
            {
                var candidateId                  = apprenticeshipApplicationsStatusCount["_id"].AsGuid;
                var savedApplicationCount        = apprenticeshipApplicationsStatusCount["Saved"].AsInt32;
                var draftApplicationCount        = apprenticeshipApplicationsStatusCount["Draft"].AsInt32;
                var submittedApplicationCount    = apprenticeshipApplicationsStatusCount["Submitted"].AsInt32;
                var unsuccessfulApplicationCount = apprenticeshipApplicationsStatusCount["Unsuccessful"].AsInt32;
                var successfulApplicationCount   = apprenticeshipApplicationsStatusCount["Successful"].AsInt32;

                var apprenticeshipApplicationMetrics = new CandidateApprenticeshipApplicationMetrics
                {
                    Saved        = savedApplicationCount,
                    Draft        = draftApplicationCount,
                    Submitted    = submittedApplicationCount,
                    Unsuccessful = unsuccessfulApplicationCount,
                    Successful   = successfulApplicationCount,
                };

                if (userApplicationMetrics.ContainsKey(candidateId))
                {
                    userApplicationMetrics[candidateId].CandidateApprenticeshipApplicationMetrics = apprenticeshipApplicationMetrics;
                }
                else
                {
                    userApplicationMetrics[candidateId] = new UserApplicationMetrics
                    {
                        CandidateApprenticeshipApplicationMetrics = apprenticeshipApplicationMetrics
                    };
                }
            }
        }