private IEnumerable <OrganisationIdentifier> GenerateIdentifiersForProvider(GroupingReason groupingReason, OrganisationGroupTypeCode organisationGroupTypeCode, Provider targetProvider)
        {
            if (_additionalIdentifierKeys[groupingReason].ContainsKey(organisationGroupTypeCode))
            {
                foreach (OrganisationGroupTypeIdentifier organisationGroupTypeIdentifier in _additionalIdentifierKeys[groupingReason][organisationGroupTypeCode])
                {
                    string targetProviderGroupTypeIdentifierValue = GetOrganisationGroupIdentifier(targetProvider, organisationGroupTypeIdentifier);
                    if (!string.IsNullOrWhiteSpace(targetProviderGroupTypeIdentifierValue))
                    {
                        Enums.OrganisationGroupTypeIdentifier typeIdentifier;

                        if (organisationGroupTypeIdentifier == OrganisationGroupTypeIdentifier.DfeEstablishmentNumber)
                        {
                            typeIdentifier = Enums.OrganisationGroupTypeIdentifier.DfeNumber;
                        }
                        else if (organisationGroupTypeIdentifier == OrganisationGroupTypeIdentifier.LocalAuthorityClassificationTypeCode)
                        {
                            typeIdentifier = Enums.OrganisationGroupTypeIdentifier.LocalAuthorityClassificationTypeCode;
                        }
                        else
                        {
                            typeIdentifier = organisationGroupTypeIdentifier.AsMatchingEnum <Enums.OrganisationGroupTypeIdentifier>();
                        }

                        yield return(new OrganisationIdentifier {
                            Type = typeIdentifier, Value = targetProviderGroupTypeIdentifierValue
                        });
                    }
                }
            }
        }
        /// <summary>
        /// Returns the target organisations groups details, based on the configuration of the funding output.
        /// eg will lookup
        /// - Parlimentary Consituency code and name, based on the Parlimentary Consituency code for information
        /// </summary>
        /// <param name="organisationGroupLookupParameters">Grouping Lookup Parameters</param>
        /// <param name="providersInGroup">Providers in group</param>
        /// <returns></returns>
        public async Task <TargetOrganisationGroup> GetTargetProviderDetails(OrganisationGroupLookupParameters organisationGroupLookupParameters,
                                                                             GroupingReason groupReason, IEnumerable <Provider> providersInGroup)
        {
            Guard.ArgumentNotNull(organisationGroupLookupParameters, nameof(organisationGroupLookupParameters));

            if (groupReason == GroupingReason.Payment || groupReason == GroupingReason.Contracting || groupReason == GroupingReason.Indicative)
            {
                Guard.IsNullOrWhiteSpace(organisationGroupLookupParameters.IdentifierValue, nameof(organisationGroupLookupParameters.IdentifierValue));
                Guard.IsNullOrWhiteSpace(organisationGroupLookupParameters.ProviderVersionId, nameof(organisationGroupLookupParameters.ProviderVersionId));

                return(await GetTargetProviderDetailsForPaymentOrContracting(organisationGroupLookupParameters.IdentifierValue, organisationGroupLookupParameters.OrganisationGroupTypeCode, organisationGroupLookupParameters.ProviderVersionId, providersInGroup));
            }
            else
            {
                Guard.ArgumentNotNull(organisationGroupLookupParameters.GroupTypeIdentifier, nameof(organisationGroupLookupParameters.GroupTypeIdentifier));

                // Get the first of the scoped providers, then obtain the ID and name from the properties of that.
                Provider firstProvider = providersInGroup.First();

                return(new TargetOrganisationGroup()
                {
                    Name = GetOrganisationGroupName(firstProvider, organisationGroupLookupParameters.GroupTypeIdentifier.Value),
                    Identifier = GetOrganisationGroupIdentifier(firstProvider, organisationGroupLookupParameters.GroupTypeIdentifier.Value),
                    Identifiers = organisationGroupLookupParameters.OrganisationGroupTypeCode.HasValue ? GenerateIdentifiersForProvider(groupReason, organisationGroupLookupParameters.OrganisationGroupTypeCode.Value, firstProvider) : null
                });
            }
        }
Exemple #3
0
        public async Task GetFundingPage_CallsCorrectly()
        {
            IFundingFeedService fundingFeedService = Substitute.For <IFundingFeedService>();

            FundingFeedController controller = new FundingFeedController(
                fundingFeedService);

            string[]          fundingStreamIds = new string[] { "1234" };
            string[]          fundingPeriodIds = new string[] { "1234" };
            GroupingReason[]  groupReasons     = new GroupingReason[] { GroupingReason.Payment };
            VariationReason[] variationReasons = new VariationReason[] { VariationReason.AuthorityFieldUpdated };

            await controller.GetFundingPage(fundingStreamIds, fundingPeriodIds, groupReasons, variationReasons, 5, 1);

            await fundingFeedService
            .Received(1)
            .GetFunding(Arg.Any <HttpRequest>(), Arg.Is(1), Arg.Is(fundingStreamIds), Arg.Is(fundingPeriodIds), Arg.Is(groupReasons), Arg.Is(variationReasons), Arg.Is(5));
        }
Exemple #4
0
        private Func <Provider, string> GetProviderFieldForGrouping(OrganisationGroupTypeIdentifier identifierType, OrganisationGroupTypeCode organisationGroupTypeCode, GroupingReason groupingReason)
        {
            // If the grouping reason is for payment, then the organisation identifier needs to be returned as a UKPRN, but grouped on the type code
            if (groupingReason == GroupingReason.Payment)
            {
                switch (organisationGroupTypeCode)
                {
                case OrganisationGroupTypeCode.AcademyTrust:
                    return(c => c.TrustCode);

                case OrganisationGroupTypeCode.LocalAuthority:
                    return(c => c.LACode);

                case OrganisationGroupTypeCode.Provider:
                    return(c => c.UKPRN);
                }
            }
            else
            {
                // TODO: Map all fields required
                switch (identifierType)
                {
                case OrganisationGroupTypeIdentifier.UKPRN:
                    return(c => c.UKPRN);

                case OrganisationGroupTypeIdentifier.AcademyTrustCode:
                    return(c => c.TrustCode);

                case OrganisationGroupTypeIdentifier.ParliamentaryConstituencyCode:
                    return(c => c.ParliamentaryConstituencyCode);

                case OrganisationGroupTypeIdentifier.MiddleSuperOutputAreaCode:
                    return(c => c.MiddleSuperOutputAreaCode);

                case OrganisationGroupTypeIdentifier.CensusWardCode:
                    return(c => c.CensusWardCode);

                case OrganisationGroupTypeIdentifier.DistrictCode:
                    return(c => c.DistrictCode);

                case OrganisationGroupTypeIdentifier.GovernmentOfficeRegionCode:
                    return(c => c.GovernmentOfficeRegionCode);

                case OrganisationGroupTypeIdentifier.LowerSuperOutputAreaCode:
                    return(c => c.LowerSuperOutputAreaCode);

                case OrganisationGroupTypeIdentifier.WardCode:
                    return(c => c.WardCode);

                case OrganisationGroupTypeIdentifier.RscRegionCode:
                    return(c => c.RscRegionCode);

                case OrganisationGroupTypeIdentifier.CountryCode:
                    return(c => c.CountryCode);

                case OrganisationGroupTypeIdentifier.LACode:
                    return(c => c.LACode);

                case OrganisationGroupTypeIdentifier.LocalAuthorityClassificationTypeCode:
                    return(c => c.LocalGovernmentGroupTypeName);
                }
            }

            throw new Exception("Unknown OrganisationGroupTypeIdentifier for provider ID");
        }
Exemple #5
0
        private Func <Provider, string> GetProviderFieldForGrouping(OrganisationGroupTypeIdentifier identifierType, OrganisationGroupTypeCode organisationGroupTypeCode, GroupingReason groupingReason, PaymentOrganisationSource paymentOrganisationSource)
        {
            if (groupingReason.IsForProviderPayment())
            {
                if (paymentOrganisationSource == PaymentOrganisationSource.PaymentOrganisationAsProvider)
                {
                    // If the grouping reason is for payment, then the organisation identifier needs to be returned as a UKPRN, but grouped on the type code
                    switch (organisationGroupTypeCode)
                    {
                    case OrganisationGroupTypeCode.AcademyTrust:
                        return(c => c.TrustCode);

                    case OrganisationGroupTypeCode.LocalAuthority:
                        return(c => c.LACode);

                    case OrganisationGroupTypeCode.Provider:
                        return(c => c.UKPRN);

                    default:
                        throw new InvalidOperationException($"Unknown organisation group type code to select for identifer for payment. '{organisationGroupTypeCode}'");
                    }
                }
                else if (paymentOrganisationSource == PaymentOrganisationSource.PaymentOrganisationFields)
                {
                    return(p => p.PaymentOrganisationIdentifier);
                }
                else
                {
                    throw new InvalidOperationException($"Unknown paymentOrganisationSource '{paymentOrganisationSource}'");
                }
            }
            else if (groupingReason == GroupingReason.Information)
            {
                // TODO: Map all fields required
                switch (identifierType)
                {
                case OrganisationGroupTypeIdentifier.UKPRN:
                    return(c => c.UKPRN);

                case OrganisationGroupTypeIdentifier.AcademyTrustCode:
                    return(c => c.TrustCode);

                case OrganisationGroupTypeIdentifier.ParliamentaryConstituencyCode:
                    return(c => c.ParliamentaryConstituencyCode);

                case OrganisationGroupTypeIdentifier.MiddleSuperOutputAreaCode:
                    return(c => c.MiddleSuperOutputAreaCode);

                case OrganisationGroupTypeIdentifier.CensusWardCode:
                    return(c => c.CensusWardCode);

                case OrganisationGroupTypeIdentifier.DistrictCode:
                    return(c => c.DistrictCode);

                case OrganisationGroupTypeIdentifier.GovernmentOfficeRegionCode:
                    return(c => c.GovernmentOfficeRegionCode);

                case OrganisationGroupTypeIdentifier.LowerSuperOutputAreaCode:
                    return(c => c.LowerSuperOutputAreaCode);

                case OrganisationGroupTypeIdentifier.WardCode:
                    return(c => c.WardCode);

                case OrganisationGroupTypeIdentifier.RscRegionCode:
                    return(c => c.RscRegionCode);

                case OrganisationGroupTypeIdentifier.CountryCode:
                    return(c => c.CountryCode);

                case OrganisationGroupTypeIdentifier.LACode:
                    return(c => c.LACode);

                case OrganisationGroupTypeIdentifier.LocalAuthorityClassificationTypeCode:
                    return(c => c.LocalGovernmentGroupTypeCode);
                }
            }

            throw new Exception("Unknown OrganisationGroupTypeIdentifier for provider ID");
        }
Exemple #6
0
        public OrganisationGroupingConfigurationBuilder WithGroupingReason(GroupingReason groupingReason)
        {
            _config.GroupingReason = groupingReason;

            return(this);
        }
Exemple #7
0
 public static bool IsForProviderPayment(this GroupingReason groupingReason)
 {
     return(groupingReason == GroupingReason.Contracting || groupingReason == GroupingReason.Payment || groupingReason == GroupingReason.Indicative);
 }