예제 #1
0
        public void AddOrUpdateCustomProfile(string fundingLineCode,
                                             decimal?carryOver,
                                             string distributionPeriodId)
        {
            DistributionPeriod distributionPeriod = GetDistributionPeriod(fundingLineCode, distributionPeriodId);

            CustomProfiles ??= new List <FundingLineProfileOverrides>();

            FundingLineProfileOverrides customProfile = CustomProfiles.SingleOrDefault(_ =>
                                                                                       _.FundingLineCode == fundingLineCode) ?? new FundingLineProfileOverrides();

            customProfile.FundingLineCode = fundingLineCode;
            customProfile.CarryOver       = carryOver;
            customProfile.DistributionPeriods ??= new List <DistributionPeriod>();

            DistributionPeriod existingDistributionPeriod = customProfile.DistributionPeriods
                                                            .SingleOrDefault(_ => _.DistributionPeriodId == distributionPeriod.DistributionPeriodId);

            if (existingDistributionPeriod == null)
            {
                customProfile.DistributionPeriods = customProfile.DistributionPeriods.Concat(new[]
                {
                    distributionPeriod
                });
                CustomProfiles = CustomProfiles.Concat(new[]
                {
                    customProfile
                });
            }
            else
            {
                existingDistributionPeriod.Value          = distributionPeriod.Value;
                existingDistributionPeriod.ProfilePeriods = distributionPeriod.ProfilePeriods.DeepCopy();
            }
        }
예제 #2
0
        public void UpdateDistributionPeriodForFundingLine(string fundingLineCode,
                                                           string distributionPeriodId,
                                                           IEnumerable <ProfilePeriod> profilePeriods)
        {
            DistributionPeriod distributionPeriod = GetDistributionPeriod(fundingLineCode, distributionPeriodId);

            profilePeriods ??= ArraySegment <ProfilePeriod> .Empty;

            decimal sumTotalForDistributionPeriod = profilePeriods.Sum(_ => _.ProfiledValue);

            distributionPeriod.Value          = sumTotalForDistributionPeriod;
            distributionPeriod.ProfilePeriods = profilePeriods.ToArray();
        }
예제 #3
0
        private DistributionPeriod GetDistributionPeriod(string fundingLineCode,
                                                         string distributionPeriodId)
        {
            Guard.IsNullOrWhiteSpace(fundingLineCode, nameof(fundingLineCode));
            Guard.IsNullOrWhiteSpace(distributionPeriodId, nameof(distributionPeriodId));

            FundingLine fundingLine = FundingLines.SingleOrDefault(fl => fl.FundingLineCode == fundingLineCode);

            Guard.Ensure(fundingLine != null, $"Did not locate a funding line with code {fundingLineCode}");

            DistributionPeriod distributionPeriod = fundingLine.DistributionPeriods?
                                                    .SingleOrDefault(d => d.DistributionPeriodId == distributionPeriodId);

            Guard.Ensure(distributionPeriod != null, $"Distribution period {distributionPeriodId} not found for funding line {fundingLineCode}.");

            return(distributionPeriod);
        }