public async Task <IList <ImportResult> > ImportByDateAsync(PerformContext context, string requestId, DateTime rangeStartDate, DateTime rangeEndDate)
        {
            _logger.LogInformation(context, requestId, "Request to import by Date started");
            _logger.LogInformation(context, requestId, $"Importing notifications in range from {rangeStartDate.Date} to {rangeEndDate.Date}");

            var notificationsGroupsToImport = await _notificationMapper.GetNotificationsGroupedByPatient(context, requestId, rangeStartDate, rangeEndDate);

            var importResults = await ImportNotificationGroupsAsync(context, requestId, notificationsGroupsToImport);

            _logger.LogInformation(context, requestId, "Request to import by Date finished");
            return(importResults);
        }
        public async Task ImportOrUpdateLegacyUser(string legacyCaseManagerUsername, PerformContext context, int runId)
        {
            if (legacyCaseManagerUsername == null)
            {
                return;
            }
            var legacyCaseManager = await _migrationRepository.GetLegacyUserByUsername(legacyCaseManagerUsername);

            var existingCaseManager = await _userRepository.GetUserByUsername(legacyCaseManagerUsername);

            var ntbsCaseManager = existingCaseManager ??
                                  new User {
                IsActive              = false,
                IsCaseManager         = false,
                Username              = legacyCaseManager.Username,
                CaseManagerTbServices = new List <CaseManagerTbService>()
            };

            if (!ntbsCaseManager.IsActive)
            {
                ntbsCaseManager.GivenName   = legacyCaseManager.GivenName;
                ntbsCaseManager.FamilyName  = legacyCaseManager.FamilyName;
                ntbsCaseManager.DisplayName = $"{legacyCaseManager.GivenName} {legacyCaseManager.FamilyName}";
            }
            ntbsCaseManager.IsCaseManager = true;

            await _userRepository.AddOrUpdateUser(ntbsCaseManager, ntbsCaseManager.CaseManagerTbServices.Select(cmtb => cmtb.TbService));

            _logger.LogInformation(context, runId, "Added/Updated the case manager assigned to the notification.");
        }
        private async Task <IEnumerable <IList <Notification> > > GetGroupedResultsAsNotificationAsync(IEnumerable <IGrouping <string, string> > groupedIds, PerformContext context, string requestId)
        {
            var resultList = new List <IList <Notification> >();

            foreach (var group in groupedIds)
            {
                var legacyIds = group.ToList();
                _logger.LogInformation(context, requestId, $"Fetching data for legacy notifications {string.Join(", ", legacyIds)}");
                var legacyNotifications                = _migrationRepository.GetNotificationsById(legacyIds);
                var sitesOfDisease                     = _migrationRepository.GetNotificationSites(legacyIds);
                var manualTestResults                  = _migrationRepository.GetManualTestResults(legacyIds);
                var socialContextVenues                = _migrationRepository.GetSocialContextVenues(legacyIds);
                var socialContextAddresses             = _migrationRepository.GetSocialContextAddresses(legacyIds);
                var transferEvents                     = _migrationRepository.GetTransferEvents(legacyIds);
                var outcomeEvents                      = _migrationRepository.GetOutcomeEvents(legacyIds);
                var mbovisAnimalExposure               = _migrationRepository.GetMigrationMBovisAnimalExposure(legacyIds);
                var mbovisExposureToKnownCase          = _migrationRepository.GetMigrationMBovisExposureToKnownCase(legacyIds);
                var mbovisOccupationExposures          = _migrationRepository.GetMigrationMBovisOccupationExposures(legacyIds);
                var mbovisUnpasteurisedMilkConsumption = _migrationRepository.GetMigrationMBovisUnpasteurisedMilkConsumption(legacyIds);

                var notificationsForGroup = await CombineDataForGroup(
                    legacyIds,
                    (await legacyNotifications).ToList(),
                    (await sitesOfDisease).ToList(),
                    (await manualTestResults).ToList(),
                    (await socialContextVenues).ToList(),
                    (await socialContextAddresses).ToList(),
                    (await transferEvents).ToList(),
                    (await outcomeEvents).ToList(),
                    (await mbovisAnimalExposure).ToList(),
                    (await mbovisExposureToKnownCase).ToList(),
                    (await mbovisOccupationExposures).ToList(),
                    (await mbovisUnpasteurisedMilkConsumption).ToList()
                    );

                resultList.Add(notificationsForGroup);
            }
            return(resultList);
        }