public IReadOnlyCollection <decimal?[]> GetPeriodisedValues(FundingDataSource fundModel, IEnumerable <string> fundLines, IEnumerable <string> attributes)
        {
            var periodisedValuesList = new List <decimal?[]>();

            if (fundLines == null || attributes == null)
            {
                return(periodisedValuesList);
            }

            if (_fundLineAttributeDictionary.TryGetValue(fundModel, out var fundLineDictionary))
            {
                foreach (var fundLine in fundLines)
                {
                    if (fundLineDictionary.TryGetValue(fundLine, out var attributesDictionary))
                    {
                        foreach (var attribute in attributes)
                        {
                            if (attributesDictionary.TryGetValue(attribute, out var attributePeriodisedValues))
                            {
                                if (attributePeriodisedValues != null)
                                {
                                    periodisedValuesList.AddRange(attributePeriodisedValues);
                                }
                            }
                        }
                    }
                }
            }

            return(periodisedValuesList);
        }
 public FundLineGroup(
     string title,
     byte currentPeriod,
     FundingDataSource fundModel,
     IEnumerable <string> fundLines,
     IPeriodisedValuesLookup periodisedValues)
 {
     CurrentPeriod            = currentPeriod;
     ContractAllocationNumber = null;
     _fundModel        = fundModel;
     _fundLines        = fundLines;
     _periodisedValues = periodisedValues;
     Title             = title;
 }
        public IReadOnlyCollection <decimal?[]> GetPeriodisedValues(FundingDataSource dataSource, IEnumerable <string> fundLines, IEnumerable <byte> fundingSources, IEnumerable <int> transactionTypes)
        {
            var periodisedValuesList = new List <decimal?[]>();

            if (fundLines == null || fundingSources == null || transactionTypes == null)
            {
                return(periodisedValuesList);
            }

            if (_fundlineFundingSourceTransactionTypeDictionary.TryGetValue(dataSource, out var fundLineDictionary))
            {
                foreach (var fundLine in fundLines)
                {
                    if (fundLineDictionary.TryGetValue(fundLine, out var fundingSourcesDictionary))
                    {
                        foreach (var fundingSource in fundingSources)
                        {
                            if (fundingSourcesDictionary.TryGetValue(fundingSource, out var transactionTypesDictionary))
                            {
                                foreach (var transactionType in transactionTypes)
                                {
                                    if (transactionTypesDictionary.TryGetValue(transactionType, out var periodisedValues))
                                    {
                                        if (periodisedValues != null)
                                        {
                                            periodisedValuesList.AddRange(periodisedValues);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(periodisedValuesList);
        }
 public void Add(FundingDataSource fundingDataSource, Dictionary <string, Dictionary <int, Dictionary <int, decimal?[][]> > > dictionary) => _fundlineFundingSourceTransactionTypeDictionary.Add(fundingDataSource, dictionary);
 public void Add(FundingDataSource fundingDataSource, Dictionary <string, Dictionary <string, decimal?[][]> > dictionary) => _fundLineAttributeDictionary.Add(fundingDataSource, dictionary);