Esempio n. 1
0
        public async Task <Group[]> ProcessGroupsForDeltasAsync(Group[] groups, DateTime date, CancellationToken cancellationToken)
        {
            _logger.Information($"Processing groups for {date:yyyy-MM-dd}");
            var changed = new List <Group>();

            for (var i = 0; i < groups.Length && !cancellationToken.IsCancellationRequested; i++)
            {
                var group           = groups[i];
                var previousVersion = await _preparedGiasRepository.GetGroupAsync(group.Uid, date, cancellationToken);

                var hasChanged = previousVersion == null || HasChanged(previousVersion, group);

                if (hasChanged)
                {
                    _logger.Information($"{i} of {groups.Length}: Group {{Uid}} has changed on {date:yyyy-MM-dd}; storing...", group.Uid);
                    await _preparedGiasRepository.StoreGroupAsync(group, date, cancellationToken);

                    changed.Add(group);
                }
                else
                {
                    _logger.Debug($"{i} of {groups.Length}: Group {{Uid}} has not changed on {date:yyyy-MM-dd}; skipping", group.Uid);
                }
            }

            return(changed.ToArray());
        }
        private async Task <LinkedEntity> MapToEntityAsync(Establishment establishment, DateTime date, CancellationToken cancellationToken)
        {
            // Translate
            var translatedType = await _translation.TranslateEnumValueAsync(EnumerationNames.ProviderType, SourceSystemNames.GetInformationAboutSchools,
                                                                            establishment.EstablishmentTypeGroup.Code, cancellationToken);

            var translatedSubType = await _translation.TranslateEnumValueAsync(EnumerationNames.ProviderSubType, SourceSystemNames.GetInformationAboutSchools,
                                                                               establishment.TypeOfEstablishment.Code, cancellationToken);

            var translatedStatus = await _translation.TranslateEnumValueAsync(EnumerationNames.ProviderStatus, SourceSystemNames.GetInformationAboutSchools,
                                                                              establishment.EstablishmentStatus.Code, cancellationToken);

            // Build entity provider details
            var entity = new LinkedEntity
            {
                LinkedAt         = DateTime.Now,
                LinkedBy         = "HistoricalDataPreparer",
                EntityType       = EntityTypeLearningProvider,
                SourceSystemName = SourceSystemNames.GetInformationAboutSchools,
                SourceSystemId   = establishment.Urn.ToString(),
                Name             = establishment.EstablishmentName,
                Type             = translatedType,
                SubType          = translatedSubType,
                Status           = translatedStatus,
                OpenDate         = establishment.OpenDate,
                CloseDate        = establishment.CloseDate,
                Urn   = establishment.Urn,
                Ukprn = establishment.Ukprn,
                Uprn  = establishment.Uprn,
                CompaniesHouseNumber      = establishment.CompaniesHouseNumber,
                CharitiesCommissionNumber = establishment.CharitiesCommissionNumber,
                AcademyTrustCode          = establishment.Trusts?.Code,
                DfeNumber          = $"{establishment.LA.Code}/{establishment.EstablishmentNumber}",
                LocalAuthorityCode = establishment.LA.Code,
            };

            // Add management group details
            var group = establishment.Trusts != null && !string.IsNullOrEmpty(establishment.Trusts.Code)
                ? await _preparedGiasRepository.GetGroupAsync(long.Parse(establishment.Trusts.Code), date, cancellationToken)
                : null;

            if (group == null && establishment.Federations != null && !string.IsNullOrEmpty(establishment.Federations.Code))
            {
                group = await _preparedGiasRepository.GetGroupAsync(long.Parse(establishment.Federations.Code), date, cancellationToken);
            }

            if (group != null)
            {
                var translatedGroupType = await _translation.TranslateEnumValueAsync(
                    EnumerationNames.ManagementGroupType, SourceSystemNames.GetInformationAboutSchools, group.GroupType, cancellationToken);

                entity.ManagementGroupType  = translatedGroupType;
                entity.ManagementGroupId    = group.Uid.ToString();
                entity.ManagementGroupCode  = $"{translatedGroupType}-{group.Uid}";
                entity.ManagementGroupUkprn = group.Ukprn;
                entity.ManagementGroupCompaniesHouseNumber = group.CompaniesHouseNumber;
            }
            else
            {
                var translatedGroupType = await _translation.TranslateEnumValueAsync(
                    EnumerationNames.ManagementGroupType, SourceSystemNames.GetInformationAboutSchools, LocalAuthority.ManagementGroupType, cancellationToken);

                entity.ManagementGroupType = translatedGroupType;
                entity.ManagementGroupId   = establishment.LA.Code;
                entity.ManagementGroupCode = $"{translatedGroupType}-{establishment.LA.Code}";
            }

            // Return
            return(entity);
        }