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);
        }
Beispiel #3
0
        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);
        }