Ejemplo n.º 1
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 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;
        }