private ProjectFundingSourceExpenditureBulk(ProjectFundingSourceExpenditureUpdate projectFundingSourceExpenditureUpdate,
                                                    List <ProjectFundingSourceExpenditureUpdate> projectFundingSourceExpenditureUpdates,
                                                    IEnumerable <int> calendarYearsToPopulate)
        {
            ProjectID                = projectFundingSourceExpenditureUpdate.ProjectUpdateBatch.ProjectID;
            FundingSourceID          = projectFundingSourceExpenditureUpdate.FundingSourceID;
            IsRelevant               = true;
            CalendarYearExpenditures = new List <CalendarYearMonetaryAmount>();
            AddProjectFundingSourceExpenditureUpdates(projectFundingSourceExpenditureUpdates);
            // we need to fill in the other calendar years with blanks
            var usedCalendarYears = projectFundingSourceExpenditureUpdates.Select(x => x.CalendarYear).ToList();

            CalendarYearExpenditures.AddRange(calendarYearsToPopulate.Where(x => !usedCalendarYears.Contains(x)).ToList().Select(x => new CalendarYearMonetaryAmount(x, 0, true)));
        }
 public void AddProjectFundingSourceExpenditureUpdate(ProjectFundingSourceExpenditureUpdate projectFundingSourceExpenditureUpdate)
 {
     Check.Require(projectFundingSourceExpenditureUpdate.ProjectUpdateBatch.ProjectID == ProjectID && projectFundingSourceExpenditureUpdate.FundingSourceID == FundingSourceID,
                   "Row doesn't align with collection mismatch ProjectID and FundingSourceID");
     CalendarYearExpenditures.Add(new CalendarYearMonetaryAmount(projectFundingSourceExpenditureUpdate.CalendarYear, projectFundingSourceExpenditureUpdate.ExpenditureAmount, true));
 }
            public static ProjectFundingSourceExpenditureUpdate Create(ProjectUpdateBatch projectUpdateBatch, FundingSource fundingSource, int calendarYear, decimal expenditureAmount)
            {
                var projectFundingSourceExpenditureUpdate = new ProjectFundingSourceExpenditureUpdate(projectUpdateBatch, fundingSource, calendarYear, expenditureAmount);

                return(projectFundingSourceExpenditureUpdate);
            }