public async Task Import(ImportMatchedLearnerData importMatchedLearnerData) { _logger.LogInformation($"Started MatchedLearner Data Import for ukprn {importMatchedLearnerData.Ukprn}"); var collectionPeriods = new List <byte> { importMatchedLearnerData.CollectionPeriod }; if (importMatchedLearnerData.CollectionPeriod != 1) { collectionPeriods.Add((byte)(importMatchedLearnerData.CollectionPeriod - 1)); } try { await _matchedLearnerRepository.BeginTransactionAsync(CancellationToken.None); await _matchedLearnerRepository.RemovePreviousSubmissionsData(importMatchedLearnerData.Ukprn, importMatchedLearnerData.AcademicYear, collectionPeriods); var dataLockEvents = await _paymentsRepository.GetDataLockEvents(importMatchedLearnerData); var apprenticeshipIds = dataLockEvents .SelectMany(dle => dle.PayablePeriods) .Select(dlepp => dlepp.ApprenticeshipId ?? 0) .Union(dataLockEvents.SelectMany(dle => dle.NonPayablePeriods).SelectMany(dlenpp => dlenpp.Failures) .Select(dlenppf => dlenppf.ApprenticeshipId ?? 0)) .ToList(); var apprenticeships = await _paymentsRepository.GetApprenticeships(apprenticeshipIds); await _matchedLearnerRepository.RemoveApprenticeships(apprenticeshipIds); await _matchedLearnerRepository.StoreApprenticeships(apprenticeships, CancellationToken.None); await _matchedLearnerRepository.StoreDataLocks(dataLockEvents, CancellationToken.None); await _matchedLearnerRepository.SaveSubmissionJob(new SubmissionJobModel { CollectionPeriod = importMatchedLearnerData.CollectionPeriod, DcJobId = importMatchedLearnerData.JobId, Ukprn = importMatchedLearnerData.Ukprn, AcademicYear = importMatchedLearnerData.AcademicYear, IlrSubmissionDateTime = importMatchedLearnerData.IlrSubmissionDateTime, EventTime = importMatchedLearnerData.EventTime }); await _matchedLearnerRepository.CommitTransactionAsync(CancellationToken.None); _logger.LogInformation($"Finished MatchedLearner Data Import for ukprn {importMatchedLearnerData.Ukprn}"); } catch (Exception exception) { _logger.LogError($"Error in MatchedLearner Data Import for ukprn {importMatchedLearnerData.Ukprn}, Inner Exception {exception}"); await _matchedLearnerRepository.RollbackTransactionAsync(CancellationToken.None); throw; } }
public async Task SetUp() { _importMatchedLearnerData = new ImportMatchedLearnerData { Ukprn = 173658, CollectionPeriod = 1, AcademicYear = 2021, JobId = 123, }; _mockMatchedLearnerRepository = new Mock <IMatchedLearnerRepository>(); _mockPaymentsRepository = new Mock <IPaymentsRepository>(); _mockLogger = new Mock <ILogger <MatchedLearnerDataImportService> >(); _mockPaymentsRepository.Setup(x => x.GetDataLockEvents(_importMatchedLearnerData)) .ReturnsAsync(new List <DataLockEventModel>()); _mockPaymentsRepository.Setup(x => x.GetApprenticeships(It.IsAny <List <long> >())) .ReturnsAsync(new List <ApprenticeshipModel>()); _sut = new MatchedLearnerDataImportService(_mockMatchedLearnerRepository.Object, _mockPaymentsRepository.Object, _mockLogger.Object); await _sut.Import(_importMatchedLearnerData); }
public async Task SetUp() { _importMatchedLearnerData = new ImportMatchedLearnerData { Ukprn = 173658, CollectionPeriod = 5, AcademicYear = 2021, JobId = 123, }; _mockMatchedLearnerRepository = new Mock <IMatchedLearnerRepository>(); _mockPaymentsRepository = new Mock <IPaymentsRepository>(); _mockLogger = new Mock <ILogger <MatchedLearnerDataImportService> >(); _dataLockEvents = new List <DataLockEventModel> { new DataLockEventModel { EventId = _dataLockEventId, PayablePeriods = new List <DataLockEventPayablePeriodModel> { new DataLockEventPayablePeriodModel { ApprenticeshipId = 112 } }, NonPayablePeriods = new List <DataLockEventNonPayablePeriodModel> { new DataLockEventNonPayablePeriodModel { Failures = new List <DataLockEventNonPayablePeriodFailureModel> { new DataLockEventNonPayablePeriodFailureModel { ApprenticeshipId = 114 } } } } } }; _apprenticeships = new List <ApprenticeshipModel> { new ApprenticeshipModel { Id = 112, Uln = 1000112 }, new ApprenticeshipModel { Id = 114, Uln = 1000114 } }; _mockPaymentsRepository.Setup(x => x.GetDataLockEvents(_importMatchedLearnerData)) .ReturnsAsync(_dataLockEvents); _mockPaymentsRepository.Setup(x => x.GetApprenticeships(It.IsAny <List <long> >())) .ReturnsAsync(_apprenticeships); _sut = new MatchedLearnerDataImportService(_mockMatchedLearnerRepository.Object, _mockPaymentsRepository.Object, _mockLogger.Object); await _sut.Import(_importMatchedLearnerData); }