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(); } }
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(); }
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); }