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 }); } }
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)); }
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"); }
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"); }
public OrganisationGroupingConfigurationBuilder WithGroupingReason(GroupingReason groupingReason) { _config.GroupingReason = groupingReason; return(this); }
public static bool IsForProviderPayment(this GroupingReason groupingReason) { return(groupingReason == GroupingReason.Contracting || groupingReason == GroupingReason.Payment || groupingReason == GroupingReason.Indicative); }