internal ViewFiltersApplier PresentData( DataContainer data, Dictionary<int, string> planningAssignments, List<string> allUsers, ViewColumnsIndexes viewColumnsIndexes, FreeDaysCalculator freeDaysCalculator, FocusFactorCalculator focusFactorCalculator, DataGridView dgv) { var tasksSchedule = WorkItemsScheduler.MakeSchedule( data, planningAssignments, freeDaysCalculator, focusFactorCalculator); var alreadyAdded = new Dictionary<int, int>(); var tasksByUser = new Dictionary<string, int>(); var resultBuilder = new ViewFiltersBuilder(dgv, viewColumnsIndexes); var workItemInfoFiller = new WorkItemInfoFiller(dgv, viewColumnsIndexes); foreach (var leadTaskChildren in data.LeadTaskChildrenDict) { var leadTask = data.WiDict[leadTaskChildren.Key]; int nextLtInd = RowsAdder.AddLeadTaskRow( dgv, resultBuilder, workItemInfoFiller, viewColumnsIndexes, freeDaysCalculator, focusFactorCalculator, leadTask, data, planningAssignments); int ltRowInd = dgv.Rows.Count - 1; var childrenTasks = leadTaskChildren.Value .Where(i => data.WiDict.ContainsKey(i)) .Select(i => data.WiDict[i]) .OrderBy(i => i.Priority() ?? 999) .ToList(); if (childrenTasks.Count > 0) { int lastTaskInd = childrenTasks .Select(task => RowsAdder.AddTaskRow( dgv, resultBuilder, workItemInfoFiller, viewColumnsIndexes, freeDaysCalculator, focusFactorCalculator, task, childrenTasks, leadTask, data, planningAssignments, allUsers, alreadyAdded, tasksByUser, tasksSchedule)) .Max(); ScheduleFiller.ColorFdOutDays( viewColumnsIndexes, freeDaysCalculator, dgv.Rows[ltRowInd], nextLtInd, lastTaskInd); } var notAccessableChildren = leadTaskChildren.Value .Where(i => !data.WiDict.ContainsKey(i)) .ToList(); foreach (int notAccessableChildId in notAccessableChildren) { dgv.Rows.Add(new DataGridViewRow()); var taskRow = dgv.Rows[dgv.Rows.Count - 1]; workItemInfoFiller.FillNotAccessibleTaskInfo(viewColumnsIndexes, taskRow, notAccessableChildId); resultBuilder.MarkTaskRow(taskRow); } } return resultBuilder.Build(); }
internal static int AddTaskRow( DataGridView dgv, ViewFiltersBuilder viewFiltersBuilder, WorkItemInfoFiller workItemInfoFiller, ViewColumnsIndexes viewColumnsIndexes, FreeDaysCalculator freeDaysCalculator, FocusFactorCalculator focusFactorCalculator, WorkItem task, List<WorkItem> siblings, WorkItem leadTask, DataContainer data, Dictionary<int, string> planningAssignments, List<string> allUsers, Dictionary<int, int> alreadyAdded, Dictionary<string, int> tasksByUser, Dictionary<int, Tuple<int?, int>> tasksSchedule) { if (alreadyAdded.ContainsKey(task.Id)) return viewColumnsIndexes.FirstDateColumnIndex; var nextInds = new List<int>(); List<int> blockerIds = ProcessBlockers( dgv, viewFiltersBuilder, workItemInfoFiller, viewColumnsIndexes, freeDaysCalculator, focusFactorCalculator, data, planningAssignments, allUsers, task, siblings, leadTask, alreadyAdded, nextInds, tasksByUser, tasksSchedule); dgv.Rows.Add(new DataGridViewRow()); var taskRow = dgv.Rows[dgv.Rows.Count - 1]; workItemInfoFiller.FillTaskInfo( viewFiltersBuilder, task, siblings, leadTask, taskRow, data, planningAssignments, allUsers, blockerIds); viewFiltersBuilder.MarkTaskRow(taskRow); if (blockerIds != null) foreach (int blockerId in blockerIds) { AddBlockerRow( dgv, viewFiltersBuilder, workItemInfoFiller, data, planningAssignments, blockerId); } if (task.IsResolved()) { alreadyAdded.Add(task.Id, viewColumnsIndexes.FirstDateColumnIndex); return viewColumnsIndexes.FirstDateColumnIndex; } string assignedTo = planningAssignments.GetAssignee(task); if (!assignedTo.IsUnassigned() && tasksByUser.ContainsKey(assignedTo)) nextInds.Add(tasksByUser[assignedTo]); int maxNextInd = viewColumnsIndexes.FirstDateColumnIndex; if (nextInds.Count > 0) maxNextInd = nextInds.Max(); string userMark = GetUserMark(assignedTo); Tuple<int?, int> taskSchedule = null; int nextInd; if (tasksSchedule != null && tasksSchedule.ContainsKey(task.Id)) taskSchedule = tasksSchedule[task.Id]; if (taskSchedule != null && taskSchedule.Item1 != null) { nextInd = ScheduleFiller.AddDatesFromSchedule( viewColumnsIndexes, freeDaysCalculator, taskRow, taskSchedule.Item1.Value, taskSchedule.Item2, assignedTo, userMark); } else { nextInd = task.IsProposed() ? ScheduleFiller.AddDatesProposed( viewColumnsIndexes, freeDaysCalculator, focusFactorCalculator, task, taskRow, maxNextInd, assignedTo, userMark, true) : ScheduleFiller.AddDatesActive( viewColumnsIndexes, freeDaysCalculator, focusFactorCalculator, task, taskRow, maxNextInd, assignedTo, userMark); } alreadyAdded.Add(task.Id, nextInd); tasksByUser[assignedTo] = nextInd; return nextInd; }