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); }
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); }
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); }