Пример #1
0
        public async Task WhenLookingUpTargetOrganisationGroupBasedOnAcadmeyTrustInformation_ThenTargetOrganisationGroupReturned()
        {
            IEnumerable <Provider> scopedProviders = GenerateScopedProviders();

            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                GroupTypeIdentifier       = Common.ApiClient.Policies.Models.OrganisationGroupTypeIdentifier.AcademyTrustCode,
                OrganisationGroupTypeCode = Common.ApiClient.Policies.Models.OrganisationGroupTypeCode.AcademyTrust
            };

            TargetOrganisationGroup group = await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters,
                                                                                                                  Common.ApiClient.Policies.Models.GroupingReason.Information,
                                                                                                                  scopedProviders);

            group.Identifiers.Any();

            group.Name
            .Should()
            .Be("Academy Trust 1");

            group.Identifier
            .Should()
            .Be("101");

            group.Identifiers.Count()
            .Should()
            .Be(2);
        }
Пример #2
0
        public async Task WhenLookingUpTargetOrganisationGroupBasedOnProviderPayment_ThenTargetOrganisationGroupReturned()
        {
            IEnumerable <Provider> scopedProviders = GenerateScopedProviders();

            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                IdentifierValue           = "1003",
                OrganisationGroupTypeCode = Common.ApiClient.Policies.Models.OrganisationGroupTypeCode.Provider,
                ProviderVersionId         = _providerVersionId
            };

            TargetOrganisationGroup group = await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters,
                                                                                                                  Common.ApiClient.Policies.Models.GroupingReason.Payment,
                                                                                                                  new List <Provider> {
                scopedProviders.Where(_ => _.TrustCode == "102").First()
            }
                                                                                                                  );

            group.Name
            .Should()
            .Be("Provider 3");

            group.Identifier
            .Should()
            .Be("1003");

            group.Identifiers
            .Should()
            .BeEmpty();
        }
Пример #3
0
        public async Task WhenLookingUpTargetOrganisationGroupBasedOnCountryInformation_ThenTargetOrganisationGroupReturned()
        {
            IEnumerable <Provider> scopedProviders = GenerateScopedProviders();

            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                GroupTypeIdentifier       = Common.ApiClient.Policies.Models.OrganisationGroupTypeIdentifier.CountryCode,
                OrganisationGroupTypeCode = Common.ApiClient.Policies.Models.OrganisationGroupTypeCode.Country
            };

            TargetOrganisationGroup group = await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters,
                                                                                                                  Common.ApiClient.Policies.Models.GroupingReason.Information,
                                                                                                                  scopedProviders.Where(_ => _.TrustStatus != TrustStatus.SupportedByAMultiAcademyTrust));

            group.Identifiers.Any();

            group.Name
            .Should()
            .Be("Country 1");

            group.Identifier
            .Should()
            .Be("C1");

            group.Identifiers.Count()
            .Should()
            .Be(0);
        }
Пример #4
0
        public async Task WhenLookingUpTargetOrganisationGroupBasedOnDfeEstablshmentNummberInformation_ThenTargetOrganisationGroupReturned()
        {
            IEnumerable <Provider> scopedProviders = GenerateScopedProviders();

            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                GroupTypeIdentifier = Common.ApiClient.Policies.Models.OrganisationGroupTypeIdentifier.DfeEstablishmentNumber
            };

            TargetOrganisationGroup group = await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters,
                                                                                                                  Common.ApiClient.Policies.Models.GroupingReason.Information,
                                                                                                                  scopedProviders.Where(_ => _.TrustStatus != TrustStatus.SupportedByAMultiAcademyTrust));

            group.Name
            .Should()
            .Be("Dfe Establishment Number");

            group.Identifier
            .Should()
            .Be("Dfe Establishment Number");

            group.Identifiers
            .Should()
            .BeNull();
        }
Пример #5
0
        public async Task WhenLookingUpTargetOrganisationGroupBasedOnMultiAcademyTrustForContracting_ThenTargetOrganisationGroupReturned()
        {
            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                IdentifierValue           = "106",
                GroupTypeIdentifier       = Common.ApiClient.Policies.Models.OrganisationGroupTypeIdentifier.UKPRN,
                OrganisationGroupTypeCode = Common.ApiClient.Policies.Models.OrganisationGroupTypeCode.AcademyTrust,
                ProviderVersionId         = _providerVersionId,
            };

            AndCoreProviderListExistsWithStandardProviders();

            TargetOrganisationGroup group = await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters,
                                                                                                                  Common.ApiClient.Policies.Models.GroupingReason.Contracting,
                                                                                                                  _scopedProviders.Where(_ => _.TrustCode == "106" && _.ProviderType == "Academy trust"));

            group.Identifiers.Any();

            group.Name
            .Should()
            .Be("Academy Trust 2");

            group.Identifier
            .Should()
            .Be("1008");
        }
Пример #6
0
        public async Task WhenLookingUpTargetOrganisationGroupBasedOnMultiAcadmeyTrustPayment_ThenTargetOrganisationGroupReturned()
        {
            IEnumerable <Provider> scopedProviders = GenerateScopedProviders();

            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                IdentifierValue           = "106",
                OrganisationGroupTypeCode = Common.ApiClient.Policies.Models.OrganisationGroupTypeCode.AcademyTrust,
                ProviderVersionId         = _providerVersionId
            };

            TargetOrganisationGroup group = await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters,
                                                                                                                  Common.ApiClient.Policies.Models.GroupingReason.Payment,
                                                                                                                  new List <Provider> {
                scopedProviders.Where(_ => _.TrustCode == "106" && _.ProviderType == "Academy trust").First()
            });

            group.Identifiers.Any();

            group.Name
            .Should()
            .Be("Academy Trust 2");

            group.Identifier
            .Should()
            .Be("1008");

            group.Identifiers.Count()
            .Should()
            .Be(2);
        }
Пример #7
0
        public async Task <int> Generate(FeedOptions options)
        {
            IEnumerable <Provider> records = GetRecords(options.InputFilePath);

            foreach (Provider provider in records)
            {
                PublishedProviderVersion publishedProviderVersion = GetPublishedProviderVersion(provider);
                Common.TemplateMetadata.Models.TemplateMetadataContents templateMetadataContents = GetProviderTemplateMetadataContents();
                TemplateMapping         templateMapping         = GetTemplateMapping();
                GeneratedProviderResult generatedProviderResult = GetGeneratedProviderResult(provider);

                string generatedProviderDocumentContent = _publishedProviderContentsGenerator.GenerateContents(publishedProviderVersion, templateMetadataContents, templateMapping);
                PublishProviderDocument(options, publishedProviderVersion, generatedProviderDocumentContent);
            }

            int fundingIndex = 0;

            foreach (IGrouping <(string, string, string), Provider> groupingKey in records.GroupBy(provider => (provider.LACode, provider.MajorVersionNo, provider.AllocationID)))
            {
                OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
                {
                    OrganisationGroupTypeCode = GetOrganisationGroupTypeCode(groupingKey.Key.Item3),
                    IdentifierValue           = groupingKey.Key.Item1,
                    GroupTypeIdentifier       = CalculateFunding.Common.ApiClient.Policies.Models.OrganisationGroupTypeIdentifier.LACode,
                    ProviderVersionId         = options.ProviderVersion
                };
                IEnumerable <ProviderApiClient> apiClientProviders      = GetApiClientProviders(groupingKey);
                TargetOrganisationGroup         targetOrganisationGroup = null;

                try
                {
                    targetOrganisationGroup = await organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters, Common.ApiClient.Policies.Models.GroupingReason.Payment, apiClientProviders);
                }
                catch (Exception ex)
                {
                    string message = $"Could not find provider with ID:{organisationGroupLookupParameters.IdentifierValue} with error message {ex}";
                    _logger.Error(message);
                    Console.WriteLine(message);

                    continue;
                }

                PublishedFundingVersion publishedFundingVersion = GetPublishedFundingVersion(groupingKey, targetOrganisationGroup, fundingIndex);
                Common.TemplateMetadata.Models.TemplateMetadataContents templateMetadataContents = GetFundingTemplateMetadataContents();
                string generatedFundingDocumentContent = _publishedFundingContentsGenerator.GenerateContents(publishedFundingVersion, templateMetadataContents);

                PublishFundingDocument(options, publishedFundingVersion, generatedFundingDocumentContent);

                fundingIndex++;
            }

            _logger.Information("NAV Data generation completed.");

            return(1);
        }
        public async Task WhenLookingUpTargetOrganisationGroupBasedOnLocalAuthorityInformation_ThenTargetOrganisationGroupReturned()
        {
            IEnumerable <Provider> scopedProviders = GenerateScopedProviders();

            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                GroupTypeIdentifier       = Common.ApiClient.Policies.Models.OrganisationGroupTypeIdentifier.LACode,
                OrganisationGroupTypeCode = Common.ApiClient.Policies.Models.OrganisationGroupTypeCode.LocalAuthority
            };

            TargetOrganisationGroup group = await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters,
                                                                                                                  Common.ApiClient.Policies.Models.GroupingReason.Information,
                                                                                                                  scopedProviders.Where(_ => _.TrustStatus != TrustStatus.SupportedByAMultiAcademyTrust));

            group.Identifiers.Any();

            group.Name
            .Should()
            .Be("Local Authority 1");

            group.Identifier
            .Should()
            .Be("101");

            group.Identifiers.Count()
            .Should()
            .Be(2);

            group.Identifiers.Any(_ => _.Type == Enums.OrganisationGroupTypeIdentifier.LACode)
            .Should()
            .Be(true);

            group.Identifiers.Any(_ => _.Type == Enums.OrganisationGroupTypeIdentifier.UKPRN)
            .Should()
            .Be(true);

            group.Identifiers.Should().ContainEquivalentOf(new OrganisationIdentifier()
            {
                Type  = Enums.OrganisationGroupTypeIdentifier.LACode,
                Value = "101"
            });


            group.Identifiers.Should().ContainEquivalentOf(new OrganisationIdentifier()
            {
                Type  = Enums.OrganisationGroupTypeIdentifier.UKPRN,
                Value = "LA101"
            });
        }
Пример #9
0
        public void WhenLookingUpTargetOrganisationGroupBasedOnUnknownGroupTypeInformation_ThenExceptionThrown()
        {
            IEnumerable <Provider> scopedProviders = GenerateScopedProviders();

            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                GroupTypeIdentifier       = Common.ApiClient.Policies.Models.OrganisationGroupTypeIdentifier.UID,
                OrganisationGroupTypeCode = Common.ApiClient.Policies.Models.OrganisationGroupTypeCode.District
            };

            Func <Task <TargetOrganisationGroup> > action = async() => await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters,
                                                                                                                                             Common.ApiClient.Policies.Models.GroupingReason.Information,
                                                                                                                                             scopedProviders.Where(_ => _.TrustStatus != TrustStatus.SupportedByAMultiAcademyTrust));

            action.Should().Throw <Exception>().WithMessage("Unable to resolve field to identifier value");
        }
Пример #10
0
        public void WhenLookingUpTargetOrganisationGroupBasedOnUnknownIdentifierPayment_ThenExceptionIsThrown()
        {
            IEnumerable <Provider> scopedProviders = GenerateScopedProviders();

            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                IdentifierValue           = "1002",
                OrganisationGroupTypeCode = Common.ApiClient.Policies.Models.OrganisationGroupTypeCode.AcademyTrust,
                ProviderVersionId         = _providerVersionId
            };

            Func <Task> action = async() => await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters,
                                                                                                                  Common.ApiClient.Policies.Models.GroupingReason.Payment,
                                                                                                                  new List <Provider> {
            });

            action.Should().Throw <Exception>().WithMessage("Unable to find target provider, given the OrganisationGroupTypeCode. Identifier = '1002'. OrganisationGroupTypeCode= 'AcademyTrust'");
        }
Пример #11
0
        public void WhenLookingUpTargetOrganisationGroupBasedOnNoGroupTypeCodePayment_ThenExceptionIsThrown()
        {
            IEnumerable <Provider> scopedProviders = GenerateScopedProviders();

            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                IdentifierValue   = "1002",
                ProviderVersionId = _providerVersionId
            };

            Func <Task> action = async() => await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters,
                                                                                                                  Common.ApiClient.Policies.Models.GroupingReason.Payment,
                                                                                                                  new List <Provider> {
                scopedProviders.Where(_ => _.TrustCode == "102").First()
            });

            action.Should().Throw <Exception>().WithMessage("Unable to lookup target provider, no OrganisationGroupTypeCode given");
        }
Пример #12
0
        public async Task WhenLookingUpTargetOrganisationGroupBasedOnLocalAuthorityPayment_ThenTargetOrganisationGroupReturned()
        {
            IEnumerable <Provider> scopedProviders = GenerateScopedProviders();

            OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
            {
                IdentifierValue           = "101",
                OrganisationGroupTypeCode = Common.ApiClient.Policies.Models.OrganisationGroupTypeCode.LocalAuthority,
                ProviderVersionId         = _providerVersionId
            };

            TargetOrganisationGroup group = await _organisationGroupTargetProviderLookup.GetTargetProviderDetails(
                organisationGroupLookupParameters,
                Common.ApiClient.Policies.Models.GroupingReason.Payment,
                new List <Provider> {
                scopedProviders.Where(_ => _.TrustCode == "101").First()
            });

            group.Identifiers.Any();

            group.Name
            .Should()
            .Be("Provider 1");

            group.Identifier
            .Should()
            .Be("1001");

            group.Identifiers.Count()
            .Should()
            .Be(3);

            group.Identifiers.Any(_ => _.Type == Enums.OrganisationGroupTypeIdentifier.UKPRN)
            .Should()
            .Be(true);

            group.Identifiers.Any(_ => _.Type == Enums.OrganisationGroupTypeIdentifier.LACode)
            .Should()
            .Be(true);

            group.Identifiers.Any(_ => _.Type == Enums.OrganisationGroupTypeIdentifier.DfeNumber)
            .Should()
            .Be(true);
        }
Пример #13
0
        public async Task <int> Generate(FeedOptions options)
        {
            IEnumerable <Provider> records = GetRecords(options.InputFilePath);

            foreach (Provider provider in records)
            {
                PublishedProviderVersion publishedProviderVersion = GetPublishedProviderVersion(provider);
                Common.TemplateMetadata.Models.TemplateMetadataContents templateMetadataContents = GetProviderTemplateMetadataContents();
                TemplateMapping         templateMapping         = GetTemplateMapping();
                GeneratedProviderResult generatedProviderResult = GetGeneratedProviderResult(provider);

                string generatedProviderDocumentContent = _publishedProviderContentsGenerator.GenerateContents(publishedProviderVersion, templateMetadataContents, templateMapping);
                PublishProviderDocument(options, publishedProviderVersion, generatedProviderDocumentContent);
            }

            int fundingIndex = 0;

            foreach (IGrouping <string, Provider> laGroup in records.GroupBy(x => x.ProviderLaCode))
            {
                OrganisationGroupLookupParameters organisationGroupLookupParameters = new OrganisationGroupLookupParameters
                {
                    OrganisationGroupTypeCode = Common.ApiClient.Policies.Models.OrganisationGroupTypeCode.LocalAuthority,
                    IdentifierValue           = laGroup.Key,
                    GroupTypeIdentifier       = Common.ApiClient.Policies.Models.OrganisationGroupTypeIdentifier.LACode,
                    ProviderVersionId         = options.ProviderVersion
                };
                IEnumerable <ProviderApiClient> apiClientProviders      = GetApiClientProviders(laGroup);
                TargetOrganisationGroup         targetOrganisationGroup = await organisationGroupTargetProviderLookup.GetTargetProviderDetails(organisationGroupLookupParameters, Common.ApiClient.Policies.Models.GroupingReason.Payment, apiClientProviders);

                PublishedFundingVersion publishedFundingVersion = GetPublishedFundingVersion(laGroup, targetOrganisationGroup, fundingIndex);
                Common.TemplateMetadata.Models.TemplateMetadataContents templateMetadataContents = GetFundingTemplateMetadataContents();
                string generatedFundingDocumentContent = _publishedFundingContentsGenerator.GenerateContents(publishedFundingVersion, templateMetadataContents);

                PublishFundingDocument(options, publishedFundingVersion, generatedFundingDocumentContent);

                fundingIndex++;
            }

            _logger.Information("NAV Data generation completed.");

            return(1);
        }