public async Task Handle(RefreshLearnerCommand command, CancellationToken cancellationToken = default) { var incentive = await _incentiveDomainRepository.Find(command.ApprenticeshipIncentiveId); var learner = await _learnerDomainRepository.GetOrCreate(incentive); _logger.LogInformation("Start Learner data refresh from Learner match service for ApprenticeshipIncentiveId: {ApprenticeshipIncentiveId}, ApprenticeshipId: {ApprenticeshipId}, UKPRN: {UKPRN}, ULN: {ULN}", learner.ApprenticeshipIncentiveId, learner.ApprenticeshipId, learner.Ukprn, learner.UniqueLearnerNumber); SubmissionData submissionData = new SubmissionData(); var learnerData = await _learnerService.Get(learner); _logger.LogInformation("End Learner data refresh from Learner match service for ApprenticeshipIncentiveId: {ApprenticeshipIncentiveId}, ApprenticeshipId: {ApprenticeshipId}, UKPRN: {UKPRN}, ULN: {ULN}", learner.ApprenticeshipIncentiveId, learner.ApprenticeshipId, learner.Ukprn, learner.UniqueLearnerNumber); if (learnerData != null) { if (LearnerAndEarningsHaveNotChanged(learnerData, learner, incentive)) { return; } submissionData.SetSubmissionDate(learnerData.IlrSubmissionDate); var learningFoundStatus = learnerData.LearningFound(incentive); submissionData.SetLearningData(new LearningData(learningFoundStatus.LearningFound, learningFoundStatus.NotFoundReason)); if (learningFoundStatus.LearningFound) { submissionData.LearningData.SetStartDate(learnerData.LearningStartDate(incentive)); submissionData.LearningData.SetHasDataLock(learnerData.HasProviderDataLocks(incentive)); submissionData.LearningData.SetIsInLearning(learnerData.IsInLearning(incentive)); submissionData.LearningData.SetIsStopped(learnerData.IsStopped(incentive)); } submissionData.SetRawJson(learnerData.RawJson); } if (submissionData.HasChangeOfCircumstances(learner.SubmissionData)) { incentive.SetHasPossibleChangeOfCircumstances(true); } learner.SetSubmissionData(submissionData); incentive.LearnerRefreshCompleted(); learner.SetLearningPeriods(learnerData.LearningPeriods(incentive)); if (!learner.SubmissionData.LearningData.LearningFound) { _logger.LogInformation("Matching ILR record not found for ApprenticeshipIncentiveId: {ApprenticeshipIncentiveId}, ApprenticeshipId: {ApprenticeshipId}, UKPRN: {UKPRN}, ULN: {ULN} with reason: {NotFoundReason}", learner.ApprenticeshipIncentiveId, learner.ApprenticeshipId, learner.Ukprn, learner.UniqueLearnerNumber, learner.SubmissionData.LearningData.NotFoundReason); } await _learnerDomainRepository.Save(learner); await _incentiveDomainRepository.Save(incentive); }