public int ParseTask(Innovator inn, ref List <WbsElement> output, List <Task> tasks, int taskIndex, string parentID) { var task = tasks[taskIndex]; if (task.Summary) { throw new Exception("ParseTask Invalid param: Is a summary task"); } var wbs = new WbsActivityElement { ArasID = inn.getNewID(), Name = task.Name, ParentMppID = parentID, OrigMppIndex = task.ID.intValue(), Description = task.Notes, //WorkEst = task.Milestone ? 0 : Math.Round(task.Work.Duration / 60, 0), WorkEst = task.Milestone ? 0 : Math.Round(task.Work.Duration, 0), DateStart = task.Milestone ? task.Finish.ToDateTime() : task.Start.ToDateTime(), DateDueTarget = task.Finish.ToDateTime(), ExpectedDuration = task.Milestone ? 0 : Math.Round(task.Duration.Duration, 0), PercentComplete = task.PercentageComplete.ToNullableDecimal() != null ? (decimal)task.PercentageComplete.ToNullableDecimal() : 0, IsMilestone = task.Milestone, IsSummaryMilestone = false }; // dependencies can be forward so we have to resolve them in another iteration output.Add(wbs); //_backgroundWorker.ReportProgress(taskIndex + 1); return(taskIndex + 1); }
// note this is recursive and can skip ahead on the index value returned public int ParseSummaryTasks(Innovator inn, ref List <WbsElement> output, List <Task> tasks, int taskIndexIn, string parentID) { var taskIndex = taskIndexIn; var task = tasks[taskIndex]; if (!task.Summary) { throw new Exception("ParseSummaryTask Invalid param: Not a summary task"); } var wbse = new WbsElement { ArasID = inn.getNewID(), Name = task.Name, ParentMppID = parentID, OrigMppIndex = task.ID.intValue() }; output.Add(wbse); ++taskIndex; foreach (Task child in task.ChildTasks.ToIEnumerable()) { taskIndex = ParseTasks(inn, ref output, tasks, taskIndex, wbse.ArasID); //_backgroundWorker.ReportProgress(taskIndex); } // add a milestone to mark the end of this summary task var wbsMilestone = new WbsActivityElement { ArasID = inn.getNewID(), Name = task.Name + " completed", ParentMppID = wbse.ArasID, OrigMppIndex = task.ID.intValue(), Description = task.Notes, WorkEst = 0, DateStart = task.Finish.ToDateTime(), DateDueTarget = task.Finish.ToDateTime(), ExpectedDuration = 0, PercentComplete = 0, IsMilestone = true, IsSummaryMilestone = true }; wbse.SummaryMilestoneID = wbsMilestone.ArasID; output.Add(wbsMilestone); //_backgroundWorker.ReportProgress(taskIndex); return(taskIndex); }