コード例 #1
0
        private static ProjectData SetResourceInitials(ProjectData project, ResourceId id, string value)
        {
            project = project.SetRaw(ResourceFields.Initials, id, value);

            // Update Task.ResourceInitials

            foreach (var taskId in project.GetTasks(id))
            {
                project = project.Reset(TaskFields.ResourceInitials, taskId);
            }

            return(project);
        }
コード例 #2
0
        private static ProjectData SetResourceName(ProjectData project, ResourceId id, string value)
        {
            project = project.SetRaw(ResourceFields.Name, id, value);

            // Update Assignment.ResourceName

            foreach (var assignmentId in project.GetAssignments(id))
            {
                project = project.SetRaw(AssignmentFields.ResourceName, assignmentId, value);
            }

            // Update Task.ResourceNames

            foreach (var taskId in project.GetTasks(id))
            {
                project = project.Reset(TaskFields.ResourceNames, taskId);
            }

            return(project);
        }
コード例 #3
0
        private static ProjectData SetTaskOrdinal(ProjectData project, TaskId id, int value)
        {
            if (value < 0 || value >= project.TaskMap.Count)
            {
                throw new ArgumentOutOfRangeException(nameof(value));
            }

            var oldOrdinal = project.Get(TaskFields.Ordinal, id);
            var newOrdinal = value;

            var orderedTaskIds = project.Tasks
                                 .OrderBy(t => project.Get(TaskFields.Ordinal, t))
                                 .ToList();

            orderedTaskIds.RemoveAt(oldOrdinal);
            orderedTaskIds.Insert(newOrdinal, id);

            // First we update all ordinals

            for (var i = 0; i < orderedTaskIds.Count; i++)
            {
                var taskId  = orderedTaskIds[i];
                var ordinal = i;

                project = project.SetRaw(TaskFields.Ordinal, taskId, ordinal);
            }

            // Then we can update all predecessors/successors

            foreach (var taskId in orderedTaskIds)
            {
                project = project.Reset(TaskFields.Predecessors, taskId)
                          .Reset(TaskFields.Successors, taskId);
            }

            return(project);
        }