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 PerformanceMeasuresViewData(Person currentPerson, ProjectUpdateBatch projectUpdateBatch, ViewDataForAngularEditor viewDataForAngularEditor, UpdateStatus updateStatus, PerformanceMeasuresValidationResult performanceMeasuresValidationResult) : base(currentPerson, projectUpdateBatch, updateStatus, performanceMeasuresValidationResult.GetWarningMessages(), ProjectUpdateSection.PerformanceMeasures.ProjectUpdateSectionDisplayName) { RefreshUrl = SitkaRoute <ProjectUpdateController> .BuildUrlFromExpression(x => x.RefreshPerformanceMeasures(projectUpdateBatch.Project)); DiffUrl = SitkaRoute <ProjectUpdateController> .BuildUrlFromExpression(x => x.DiffPerformanceMeasures(projectUpdateBatch.Project)); var performanceMeasureActualUpdates = projectUpdateBatch.PerformanceMeasureActualUpdates; var performanceMeasureSubcategoriesCalendarYearReportedValues = PerformanceMeasureSubcategoriesCalendarYearReportedValue.CreateFromPerformanceMeasuresAndCalendarYears(new List <IPerformanceMeasureReportedValue>(performanceMeasureActualUpdates)); PerformanceMeasureReportedValuesSummaryViewData = new PerformanceMeasureReportedValuesSummaryViewData(performanceMeasureSubcategoriesCalendarYearReportedValues, projectUpdateBatch.GetPerformanceMeasuresExemptReportingYears().Select(x => x.CalendarYear).ToList(), projectUpdateBatch.PerformanceMeasureActualYearsExemptionExplanation, performanceMeasureActualUpdates.Select(x => x.CalendarYear).Distinct().Select(x => new CalendarYearString(x)).ToList()); ViewDataForAngular = viewDataForAngularEditor; SectionCommentsViewData = new SectionCommentsViewData(projectUpdateBatch.PerformanceMeasuresComment, projectUpdateBatch.IsReturned); IsImplementationStartYearValid = projectUpdateBatch.ProjectUpdate.GetImplementationStartYear().HasValue&& projectUpdateBatch.ProjectUpdate.GetImplementationStartYear() < projectUpdateBatch.ProjectUpdate.GetCompletionYear(); ReportingYearLabel = "Year"; }
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; }