private static void AddPerformanceMeasureActualSubcategoryOptionUpdates(
            PerformanceMeasureActualUpdate performanceMeasureActual,
            PerformanceMeasureActualUpdateSimple performanceMeasureActualUpdateSimple)
        {
            var performanceMeasureActualSubcategoryOptionUpdates = new List <PerformanceMeasureActualSubcategoryOptionUpdate>();
            var optionUpdates = performanceMeasureActualUpdateSimple.PerformanceMeasureActualSubcategoryOptionUpdates;

            foreach (var optionUpdate in optionUpdates)
            {
                if (ModelObjectHelpers.IsRealPrimaryKeyValue(optionUpdate
                                                             .PerformanceMeasureSubcategoryOptionID) && optionUpdate
                    .PerformanceMeasureSubcategoryOptionID.HasValue)
                {
                    var performanceMeasureActualSubcategoryOptionUpdate =
                        new PerformanceMeasureActualSubcategoryOptionUpdate(
                            performanceMeasureActual.PerformanceMeasureActualUpdateID
                            , optionUpdate.PerformanceMeasureSubcategoryOptionID.Value
                            , optionUpdate.PerformanceMeasureID
                            , optionUpdate.PerformanceMeasureSubcategoryID);
                    performanceMeasureActualSubcategoryOptionUpdates.Add(performanceMeasureActualSubcategoryOptionUpdate);
                }
            }

            performanceMeasureActual.PerformanceMeasureActualSubcategoryOptionUpdates = performanceMeasureActualSubcategoryOptionUpdates;
        }
            public static PerformanceMeasureActualUpdate Create(ProjectUpdateBatch projectUpdateBatch, int calendarYear, double?actualValue)
            {
                var performanceMeasure             = TestPerformanceMeasure.Create();
                var performanceMeasureActualUpdate = new PerformanceMeasureActualUpdate(projectUpdateBatch, performanceMeasure, calendarYear)
                {
                    ActualValue = actualValue
                };

                return(performanceMeasureActualUpdate);
            }
Example #3
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;
        }