Esempio n. 1
0
 public IEnumerable <ValidationResult> Validate(ValidationContext validationContext)
 {
     if (ProjectExemptReportingYearUpdates != null && ProjectExemptReportingYearUpdates.Any(x => x.IsExempt) && string.IsNullOrWhiteSpace(Explanation))
     {
         yield return(new SitkaValidationResult <PerformanceMeasuresViewModel, string>(
                          FirmaValidationMessages.ExplanationNecessaryForProjectExemptYears, x => x.Explanation));
     }
 }
 public IEnumerable <ValidationResult> Validate(ValidationContext validationContext)
 {
     if (ProjectExemptReportingYearUpdates != null && ProjectExemptReportingYearUpdates.Any(x => x.IsExempt) && string.IsNullOrWhiteSpace(Explanation))
     {
         yield return(new SitkaValidationResult <ReportedPerformanceMeasuresViewModel, string>(
                          FirmaValidationMessages.ExplanationNecessaryForProjectExemptYears, x => x.Explanation));
     }
     if (!string.IsNullOrWhiteSpace(Explanation) && Explanation.Length > ProjectUpdateBatch.FieldLengths.PerformanceMeasureActualYearsExemptionExplanation)
     {
         yield return(new SitkaValidationResult <ReportedPerformanceMeasuresViewModel, string>(
                          FirmaValidationMessages.ExplanationForProjectExemptYearsExceedsMax(ProjectUpdateBatch.FieldLengths.PerformanceMeasureActualYearsExemptionExplanation), x => x.Explanation));
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Dependent type names of this entity
        /// </summary>
        public void DeleteChildren(DatabaseEntities dbContext)
        {
            foreach (var x in PerformanceMeasureActualUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in PerformanceMeasureExpectedUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectAttachmentUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectClassificationUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectContactUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectCustomAttributeUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectExemptReportingYearUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectExternalLinkUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectFundingSourceExpenditureUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectGeospatialAreaTypeNoteUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectGeospatialAreaUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectImageUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectLocationStagingUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectLocationUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectNoFundingSourceIdentifiedUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectNoteUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectOrganizationUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectRelevantCostTypeUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectUpdateHistories.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in TechnicalAssistanceRequestUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectFundingSourceBudgetUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Active Dependent type names of this object
        /// </summary>
        public List <string> DependentObjectNames()
        {
            var dependentObjects = new List <string>();

            if (PerformanceMeasureActualUpdates.Any())
            {
                dependentObjects.Add(typeof(PerformanceMeasureActualUpdate).Name);
            }

            if (PerformanceMeasureExpectedUpdates.Any())
            {
                dependentObjects.Add(typeof(PerformanceMeasureExpectedUpdate).Name);
            }

            if (ProjectAttachmentUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectAttachmentUpdate).Name);
            }

            if (ProjectClassificationUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectClassificationUpdate).Name);
            }

            if (ProjectContactUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectContactUpdate).Name);
            }

            if (ProjectCustomAttributeUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectCustomAttributeUpdate).Name);
            }

            if (ProjectExemptReportingYearUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectExemptReportingYearUpdate).Name);
            }

            if (ProjectExternalLinkUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectExternalLinkUpdate).Name);
            }

            if (ProjectFundingSourceExpenditureUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectFundingSourceExpenditureUpdate).Name);
            }

            if (ProjectGeospatialAreaTypeNoteUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectGeospatialAreaTypeNoteUpdate).Name);
            }

            if (ProjectGeospatialAreaUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectGeospatialAreaUpdate).Name);
            }

            if (ProjectImageUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectImageUpdate).Name);
            }

            if (ProjectLocationStagingUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectLocationStagingUpdate).Name);
            }

            if (ProjectLocationUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectLocationUpdate).Name);
            }

            if (ProjectNoFundingSourceIdentifiedUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectNoFundingSourceIdentifiedUpdate).Name);
            }

            if (ProjectNoteUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectNoteUpdate).Name);
            }

            if (ProjectOrganizationUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectOrganizationUpdate).Name);
            }

            if (ProjectRelevantCostTypeUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectRelevantCostTypeUpdate).Name);
            }

            if ((ProjectUpdate != null))
            {
                dependentObjects.Add(typeof(ProjectUpdate).Name);
            }

            if (ProjectUpdateHistories.Any())
            {
                dependentObjects.Add(typeof(ProjectUpdateHistory).Name);
            }

            if (TechnicalAssistanceRequestUpdates.Any())
            {
                dependentObjects.Add(typeof(TechnicalAssistanceRequestUpdate).Name);
            }

            if (ProjectFundingSourceBudgetUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectFundingSourceBudgetUpdate).Name);
            }
            return(dependentObjects.Distinct().ToList());
        }
Esempio n. 5
0
 /// <summary>
 /// Does this object have any dependent objects? (If it does have dependent objects, these would need to be deleted before this object could be deleted.)
 /// </summary>
 /// <returns></returns>
 public bool HasDependentObjects()
 {
     return(PerformanceMeasureActualUpdates.Any() || PerformanceMeasureExpectedUpdates.Any() || ProjectAttachmentUpdates.Any() || ProjectClassificationUpdates.Any() || ProjectContactUpdates.Any() || ProjectCustomAttributeUpdates.Any() || ProjectExemptReportingYearUpdates.Any() || ProjectExternalLinkUpdates.Any() || ProjectFundingSourceExpenditureUpdates.Any() || ProjectGeospatialAreaTypeNoteUpdates.Any() || ProjectGeospatialAreaUpdates.Any() || ProjectImageUpdates.Any() || ProjectLocationStagingUpdates.Any() || ProjectLocationUpdates.Any() || ProjectNoFundingSourceIdentifiedUpdates.Any() || ProjectNoteUpdates.Any() || ProjectOrganizationUpdates.Any() || ProjectRelevantCostTypeUpdates.Any() || (ProjectUpdate != null) || ProjectUpdateHistories.Any() || TechnicalAssistanceRequestUpdates.Any() || ProjectFundingSourceBudgetUpdates.Any());
 }
Esempio n. 6
0
        /// <summary>
        /// Dependent type names of this entity
        /// </summary>
        public void DeleteChildren(DatabaseEntities dbContext)
        {
            foreach (var x in PerformanceMeasureActualUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectCustomAttributeUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectDocumentUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectExemptReportingYearUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectExternalLinkUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectFundingSourceUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectGrantAllocationExpenditureUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectGrantAllocationRequestUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectImageUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectLocationStagingUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectLocationUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectNoteUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectOrganizationUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectPersonUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectPriorityLandscapeUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectRegionUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectUpdateHistories.ToList())
            {
                x.DeleteFull(dbContext);
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Active Dependent type names of this object
        /// </summary>
        public List <string> DependentObjectNames()
        {
            var dependentObjects = new List <string>();

            if (PerformanceMeasureActualUpdates.Any())
            {
                dependentObjects.Add(typeof(PerformanceMeasureActualUpdate).Name);
            }

            if (ProjectCustomAttributeUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectCustomAttributeUpdate).Name);
            }

            if (ProjectDocumentUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectDocumentUpdate).Name);
            }

            if (ProjectExemptReportingYearUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectExemptReportingYearUpdate).Name);
            }

            if (ProjectExternalLinkUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectExternalLinkUpdate).Name);
            }

            if (ProjectFundingSourceUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectFundingSourceUpdate).Name);
            }

            if (ProjectGrantAllocationExpenditureUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectGrantAllocationExpenditureUpdate).Name);
            }

            if (ProjectGrantAllocationRequestUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectGrantAllocationRequestUpdate).Name);
            }

            if (ProjectImageUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectImageUpdate).Name);
            }

            if (ProjectLocationStagingUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectLocationStagingUpdate).Name);
            }

            if (ProjectLocationUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectLocationUpdate).Name);
            }

            if (ProjectNoteUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectNoteUpdate).Name);
            }

            if (ProjectOrganizationUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectOrganizationUpdate).Name);
            }

            if (ProjectPersonUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectPersonUpdate).Name);
            }

            if (ProjectPriorityLandscapeUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectPriorityLandscapeUpdate).Name);
            }

            if (ProjectRegionUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectRegionUpdate).Name);
            }

            if ((ProjectUpdate != null))
            {
                dependentObjects.Add(typeof(ProjectUpdate).Name);
            }

            if (ProjectUpdateHistories.Any())
            {
                dependentObjects.Add(typeof(ProjectUpdateHistory).Name);
            }
            return(dependentObjects.Distinct().ToList());
        }
Esempio n. 8
0
 /// <summary>
 /// Does this object have any dependent objects? (If it does have dependent objects, these would need to be deleted before this object could be deleted.)
 /// </summary>
 /// <returns></returns>
 public bool HasDependentObjects()
 {
     return(PerformanceMeasureActualUpdates.Any() || ProjectCustomAttributeUpdates.Any() || ProjectDocumentUpdates.Any() || ProjectExemptReportingYearUpdates.Any() || ProjectExternalLinkUpdates.Any() || ProjectFundingSourceUpdates.Any() || ProjectGrantAllocationExpenditureUpdates.Any() || ProjectGrantAllocationRequestUpdates.Any() || ProjectImageUpdates.Any() || ProjectLocationStagingUpdates.Any() || ProjectLocationUpdates.Any() || ProjectNoteUpdates.Any() || ProjectOrganizationUpdates.Any() || ProjectPersonUpdates.Any() || ProjectPriorityLandscapeUpdates.Any() || ProjectRegionUpdates.Any() || (ProjectUpdate != null) || ProjectUpdateHistories.Any());
 }
Esempio n. 9
0
        public void UpdateModel(List <PerformanceMeasureActualUpdate> currentPerformanceMeasureActualUpdates,
                                IList <PerformanceMeasureActualUpdate> allPerformanceMeasureActualUpdates,
                                IList <PerformanceMeasureActualSubcategoryOptionUpdate> allPerformanceMeasureActualSubcategoryOptionUpdates,
                                ProjectUpdateBatch projectUpdateBatch)
        {
            var currentPerformanceMeasureActualSubcategoryOptionUpdates =
                currentPerformanceMeasureActualUpdates.SelectMany(x => x.PerformanceMeasureActualSubcategoryOptionUpdates).ToList();
            var performanceMeasureActualUpdatesUpdated = new List <PerformanceMeasureActualUpdate>();

            if (PerformanceMeasureActualUpdates != null)
            {
                // Completely rebuild the list
                performanceMeasureActualUpdatesUpdated = PerformanceMeasureActualUpdates.Select(x =>
                {
                    var performanceMeasureActual = new PerformanceMeasureActualUpdate(x.PerformanceMeasureActualUpdateID,
                                                                                      x.ProjectUpdateBatchID,
                                                                                      x.PerformanceMeasureID,
                                                                                      x.CalendarYear.Value,
                                                                                      x.ActualValue);
                    if (x.PerformanceMeasureActualSubcategoryOptionUpdates != null)
                    {
                        performanceMeasureActual.PerformanceMeasureActualSubcategoryOptionUpdates =
                            x.PerformanceMeasureActualSubcategoryOptionUpdates.Where(pmavsou => ModelObjectHelpers.IsRealPrimaryKeyValue(pmavsou.PerformanceMeasureSubcategoryOptionID))
                            .Select(
                                y =>
                                new PerformanceMeasureActualSubcategoryOptionUpdate(performanceMeasureActual.PerformanceMeasureActualUpdateID,
                                                                                    y.PerformanceMeasureSubcategoryOptionID.Value,
                                                                                    y.PerformanceMeasureID,
                                                                                    y.PerformanceMeasureSubcategoryID))
                            .ToList();
                    }
                    return(performanceMeasureActual);
                }).ToList();
            }
            currentPerformanceMeasureActualUpdates.Merge(performanceMeasureActualUpdatesUpdated,
                                                         allPerformanceMeasureActualUpdates,
                                                         (x, y) => x.PerformanceMeasureActualUpdateID == y.PerformanceMeasureActualUpdateID,
                                                         (x, y) =>
            {
                x.CalendarYear = y.CalendarYear;
                x.ActualValue  = y.ActualValue;
            });

            currentPerformanceMeasureActualSubcategoryOptionUpdates.Merge(
                performanceMeasureActualUpdatesUpdated.SelectMany(x => x.PerformanceMeasureActualSubcategoryOptionUpdates).ToList(),
                allPerformanceMeasureActualSubcategoryOptionUpdates,
                (x, y) => x.PerformanceMeasureActualUpdateID == y.PerformanceMeasureActualUpdateID && x.PerformanceMeasureSubcategoryID == y.PerformanceMeasureSubcategoryID && x.PerformanceMeasureID == y.PerformanceMeasureID,
                (x, y) => x.PerformanceMeasureSubcategoryOptionID = y.PerformanceMeasureSubcategoryOptionID);

            var currentProjectExemptYearUpdates = projectUpdateBatch.GetPerformanceMeasuresExemptReportingYears();

            HttpRequestStorage.DatabaseEntities.ProjectExemptReportingYearUpdates.Load();
            var allProjectExemptYearUpdates = HttpRequestStorage.DatabaseEntities.ProjectExemptReportingYearUpdates.Local;
            var projectExemptReportingYears = new List <ProjectExemptReportingYearUpdate>();

            if (ProjectExemptReportingYearUpdates != null)
            {
                // Completely rebuild the list
                projectExemptReportingYears =
                    ProjectExemptReportingYearUpdates.Where(x => x.IsExempt)
                    .Select(x => new ProjectExemptReportingYearUpdate(x.ProjectExemptReportingYearUpdateID, x.ProjectUpdateBatchID, x.CalendarYear, ProjectExemptReportingType.PerformanceMeasures.ProjectExemptReportingTypeID))
                    .ToList();
            }
            currentProjectExemptYearUpdates.Merge(projectExemptReportingYears,
                                                  allProjectExemptYearUpdates,
                                                  (x, y) => x.ProjectUpdateBatchID == y.ProjectUpdateBatchID && x.CalendarYear == y.CalendarYear && x.ProjectExemptReportingTypeID == y.ProjectExemptReportingTypeID);
            projectUpdateBatch.PerformanceMeasureActualYearsExemptionExplanation = Explanation;
        }
        public void UpdateModel(ProjectUpdateBatch projectUpdateBatch)
        {
            var allPerformanceMeasureReportingPeriods   = HttpRequestStorage.DatabaseEntities.PerformanceMeasureReportingPeriods.ToList();
            var performanceMeasureReportingPeriodsToAdd = new List <PerformanceMeasureReportingPeriod>();

            if (PerformanceMeasureActualUpdates != null)
            {
                foreach (var performanceMeasureActualUpdateSimple in PerformanceMeasureActualUpdates)
                {
                    var performanceMeasureReportingPeriod = allPerformanceMeasureReportingPeriods.SingleOrDefault(x =>
                                                                                                                  x.PerformanceMeasureReportingPeriodCalendarYear ==
                                                                                                                  performanceMeasureActualUpdateSimple.CalendarYear);

                    if (performanceMeasureReportingPeriod == null)
                    {
                        Check.EnsureNotNull(performanceMeasureActualUpdateSimple.PerformanceMeasureID, "We need to have a performance measure.");
                        performanceMeasureReportingPeriod = new PerformanceMeasureReportingPeriod((int)performanceMeasureActualUpdateSimple.PerformanceMeasureID, performanceMeasureActualUpdateSimple.CalendarYear, performanceMeasureActualUpdateSimple.CalendarYear.ToString());
                        performanceMeasureReportingPeriodsToAdd.Add(performanceMeasureReportingPeriod);
                    }
                }
            }

            HttpRequestStorage.DatabaseEntities.AllPerformanceMeasureReportingPeriods.AddRange(performanceMeasureReportingPeriodsToAdd);
            HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted);


            var allPerformanceMeasureReportingPeriodsReloaded = HttpRequestStorage.DatabaseEntities.PerformanceMeasureReportingPeriods.ToList();
            var performanceMeasureActualUpdatesUpdated        = new List <PerformanceMeasureActualUpdate>();

            if (PerformanceMeasureActualUpdates != null)
            {
                foreach (var performanceMeasureActualUpdateSimple in PerformanceMeasureActualUpdates)
                {
                    var performanceMeasureReportingPeriod = allPerformanceMeasureReportingPeriodsReloaded.Single(x =>
                                                                                                                 x.PerformanceMeasureReportingPeriodCalendarYear ==
                                                                                                                 performanceMeasureActualUpdateSimple.CalendarYear);
                    var performanceMeasureActual = new PerformanceMeasureActualUpdate(
                        performanceMeasureActualUpdateSimple.PerformanceMeasureActualUpdateID,
                        performanceMeasureActualUpdateSimple.ProjectUpdateBatchID,
                        performanceMeasureActualUpdateSimple.PerformanceMeasureID,
                        performanceMeasureActualUpdateSimple.ActualValue,
                        performanceMeasureReportingPeriod.PerformanceMeasureReportingPeriodID);
                    if (performanceMeasureActualUpdateSimple.PerformanceMeasureActualSubcategoryOptionUpdates != null)
                    {
                        AddPerformanceMeasureActualSubcategoryOptionUpdates(performanceMeasureActual, performanceMeasureActualUpdateSimple);
                    }

                    performanceMeasureActualUpdatesUpdated.Add(performanceMeasureActual);
                }
            }



            var listOfPerformanceMeasureActualUpdateIDsToMergeWith = performanceMeasureActualUpdatesUpdated
                                                                     .Select(x => x.PerformanceMeasureActualUpdateID).ToList();

            var updateList = HttpRequestStorage.DatabaseEntities.PerformanceMeasureActualUpdates.Where(x =>
                                                                                                       listOfPerformanceMeasureActualUpdateIDsToMergeWith.Contains(x.PerformanceMeasureActualUpdateID)).ToList();
            var updateListOfIds = updateList.Select(x => x.PerformanceMeasureActualUpdateID).ToList();

            var deleteList = projectUpdateBatch.PerformanceMeasureActualUpdates.Where(x =>
                                                                                      !listOfPerformanceMeasureActualUpdateIDsToMergeWith.Contains(x.PerformanceMeasureActualUpdateID))
                             .ToList();
            var deleteListOfIds = deleteList.Select(x => x.PerformanceMeasureActualUpdateID).ToList();

            updateListOfIds.AddRange(deleteListOfIds);

            var addList = performanceMeasureActualUpdatesUpdated
                          .Where(x => !ModelObjectHelpers.IsRealPrimaryKeyValue(x.PerformanceMeasureActualUpdateID) || !updateListOfIds.Contains(x.PerformanceMeasureActualUpdateID)).ToList();

            foreach (var performanceMeasureActualUpdate in updateList)
            {
                var update = performanceMeasureActualUpdatesUpdated.Single(x => x.PerformanceMeasureActualUpdateID == performanceMeasureActualUpdate.PerformanceMeasureActualUpdateID);
                performanceMeasureActualUpdate.PerformanceMeasureReportingPeriodID = update.PerformanceMeasureReportingPeriodID;
                performanceMeasureActualUpdate.ActualValue = update.ActualValue;
            }
            HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted);

            deleteList.ForEach(x => x.DeleteFull(HttpRequestStorage.DatabaseEntities));
            HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted);


            HttpRequestStorage.DatabaseEntities.AllPerformanceMeasureActualUpdates.AddRange(addList);
            HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted);



            var listOfOptionsToAdd    = performanceMeasureActualUpdatesUpdated.SelectMany(x => x.PerformanceMeasureActualSubcategoryOptionUpdates).ToList();
            var listOfOptionsToDelete = projectUpdateBatch.PerformanceMeasureActualUpdates
                                        .SelectMany(x => x.PerformanceMeasureActualSubcategoryOptionUpdates).ToList();

            listOfOptionsToDelete.ForEach(x => x.DeleteFull(HttpRequestStorage.DatabaseEntities));
            HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted);
            HttpRequestStorage.DatabaseEntities.AllPerformanceMeasureActualSubcategoryOptionUpdates.AddRange(listOfOptionsToAdd);
            HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted);

            var databaseEntities = HttpRequestStorage.DatabaseEntities;
            var currentProjectExemptYearUpdates = projectUpdateBatch.GetPerformanceMeasuresExemptReportingYears();

            databaseEntities.ProjectExemptReportingYearUpdates.Load();
            var allProjectExemptYearUpdates = databaseEntities.AllProjectExemptReportingYearUpdates.Local;
            var projectExemptReportingYears = new List <ProjectExemptReportingYearUpdate>();

            if (ProjectExemptReportingYearUpdates != null)
            {
                // Completely rebuild the list
                projectExemptReportingYears =
                    ProjectExemptReportingYearUpdates.Where(x => x.IsExempt)
                    .Select(x => new ProjectExemptReportingYearUpdate(x.ProjectExemptReportingYearUpdateID, x.ProjectUpdateBatchID, x.CalendarYear, ProjectExemptReportingType.PerformanceMeasures.ProjectExemptReportingTypeID))
                    .ToList();
            }
            currentProjectExemptYearUpdates.Merge(projectExemptReportingYears,
                                                  allProjectExemptYearUpdates,
                                                  (x, y) => x.ProjectUpdateBatchID == y.ProjectUpdateBatchID && x.CalendarYear == y.CalendarYear && x.ProjectExemptReportingTypeID == y.ProjectExemptReportingTypeID, HttpRequestStorage.DatabaseEntities);
            projectUpdateBatch.PerformanceMeasureActualYearsExemptionExplanation = Explanation;
        }