Example #1
0
        internal static int AddLeadTaskRow(
			DataGridView dgv,
			ViewFiltersBuilder viewFiltersBuilder,
			WorkItemInfoFiller workItemInfoFiller,
			ViewColumnsIndexes viewColumnsIndexes,
			FreeDaysCalculator freeDaysCalculator,
			FocusFactorCalculator focusFactorCalculator,
			WorkItem leadTask,
			DataContainer data,
			Dictionary<int, string> planningAssignments)
        {
            dgv.Rows.Add(new DataGridViewRow());
            var leadTaskRow = dgv.Rows[dgv.Rows.Count - 1];

            List<int> blockersIds = data.BlockersDict.ContainsKey(leadTask.Id)
                ? data.BlockersDict[leadTask.Id]
                : null;
            bool shouldCheckEstimate = workItemInfoFiller.FillLeadTaskInfo(
                viewFiltersBuilder,
                leadTask,
                leadTaskRow,
                data,
                blockersIds);

            viewFiltersBuilder.MarkLeadTaskRow(leadTaskRow);

            if (blockersIds != null)
                foreach (int blockerId in blockersIds)
                {
                    AddBlockerRow(
                        dgv,
                        viewFiltersBuilder,
                        workItemInfoFiller,
                        data,
                        planningAssignments,
                        blockerId);
                }

            if (leadTask.IsProposed())
                return ScheduleFiller.AddDatesProposed(
                    viewColumnsIndexes,
                    freeDaysCalculator,
                    focusFactorCalculator,
                    leadTask,
                    leadTaskRow,
                    viewColumnsIndexes.FirstDateColumnIndex,
                    m_proposedLtMark,
                    m_proposedLtMark,
                    shouldCheckEstimate);
            return ScheduleFiller.AddDatesActive(
                viewColumnsIndexes,
                freeDaysCalculator,
                focusFactorCalculator,
                leadTask,
                leadTaskRow,
                viewColumnsIndexes.FirstDateColumnIndex,
                m_activeLtMark,
                m_activeLtMark);
        }
Example #2
0
        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 bool FillLeadTaskInfo(
			ViewFiltersBuilder viewFiltersBuilder,
			WorkItem leadTask,
			DataGridViewRow leadTaskRow,
			DataContainer data,
			List<int> blockersIds)
        {
            var priorityCell = leadTaskRow.Cells[m_viewColumnsIndexes.PriorityColumnIndex];
            priorityCell.Value = leadTask.Priority();
            priorityCell.SetColorByState(leadTask);
            priorityCell.ToolTipText = leadTask.IsDevCompleted() ? WorkItemState.DevCompleted : leadTask.State;

            var iterationCell = leadTaskRow.Cells[m_viewColumnsIndexes.IterationColumnIndex];
            string iteration = leadTask.IterationPath;
            int ind = iteration.IndexOf(m_iterationSeparator);
            if (ind != -1)
                iteration = iteration.Substring(ind + 1);
            iterationCell.Value = iteration;

            var sprintCell = leadTaskRow.Cells[m_viewColumnsIndexes.SprintColumnIndex];
            sprintCell.Value = leadTask.Sprint();

            var idCell = leadTaskRow.Cells[m_viewColumnsIndexes.IdColumnIndex];
            idCell.Value = leadTask.Id;
            idCell.ToolTipText = leadTask.IterationPath;
            idCell.Style.BackColor = priorityCell.Style.BackColor;
            var verificationResult = WorkItemVerifier.VerifyChildrenExistance(leadTask, data);
            if (verificationResult.Result != VerificationResult.Ok)
            {
                idCell.SetColorByVerification(verificationResult.Result);
                idCell.ToolTipText += Environment.NewLine + verificationResult.AllMessagesString;
            }

            var docsCell = leadTaskRow.Cells[m_viewColumnsIndexes.DocsColumnIndex];
            bool result;
            verificationResult = WorkItemVerifier.VerifyDocumentsAgreement(leadTask);
            if (verificationResult.Result == VerificationResult.Ok)
            {
                docsCell.Style.BackColor = priorityCell.Style.BackColor;
                result = true;
            }
            else
            {
                docsCell.Value = verificationResult.AddidtionalData;
                docsCell.SetColorByVerification(verificationResult.Result);
                docsCell.ToolTipText = verificationResult.AllMessagesString;
                result = false;
            }

            var titleCell = leadTaskRow.Cells[m_viewColumnsIndexes.TitleColumnIndex];
            titleCell.Value = leadTask.Title;
            titleCell.Style.Font = new Font(
                titleCell.Style.Font
                    ?? titleCell.OwningColumn.DefaultCellStyle.Font
                    ?? m_dataGridView.ColumnHeadersDefaultCellStyle.Font,
                FontStyle.Underline);
            titleCell.Style.BackColor = priorityCell.Style.BackColor;

            verificationResult = WorkItemVerifier.VerifyNoProposedChildTask(leadTask, data);
            if (verificationResult.Result != VerificationResult.Ok)
            {
                priorityCell.SetColorByVerification(verificationResult.Result);
                priorityCell.ToolTipText = verificationResult.AllMessagesString;
            }

            var blockersCell = leadTaskRow.Cells[m_viewColumnsIndexes.BlockersColumnIndex];
            verificationResult = WorkItemVerifier.VerifyBlockersExistance(blockersIds);
            if (verificationResult.Result != VerificationResult.Ok)
            {
                blockersCell.SetColorByVerification(verificationResult.Result);
                blockersCell.Value = verificationResult.AllMessagesString;
            }
            if (!string.IsNullOrEmpty(leadTask.BlockingReason()))
            {
                if (!string.IsNullOrEmpty(leadTaskRow.Cells[4].ToolTipText))
                    blockersCell.ToolTipText += Environment.NewLine;
                else
                    blockersCell.Value = leadTask.BlockingReason();
                blockersCell.ToolTipText += "Blocking Reason: " + leadTask.BlockingReason();
            }

            leadTaskRow.Cells[m_viewColumnsIndexes.AssignedToColumnIndex].Value = leadTask.AssignedTo();

            return result;
        }
        internal void FillTaskInfo(
			ViewFiltersBuilder viewFiltersBuilder,
			WorkItem task,
			List<WorkItem> siblings,
			WorkItem leadTask,
			DataGridViewRow taskRow,
			DataContainer data,
			Dictionary<int, string> planningAssignments,
			List<string> allUsers,
			List<int> blockerIds)
        {
            var priorityCell = taskRow.Cells[m_viewColumnsIndexes.PriorityColumnIndex];
            priorityCell.Value = task.Priority();
            priorityCell.SetColorByState(task);
            priorityCell.ToolTipText = task.State;

            var idCell = taskRow.Cells[m_viewColumnsIndexes.IdColumnIndex];
            idCell.Value = task.Id;
            var verificationResult = WorkItemVerifier.VerifyTaskPriority(task, leadTask.Priority());
            if (verificationResult.Result != VerificationResult.Ok)
            {
                idCell.SetColorByVerification(verificationResult.Result);
                idCell.ToolTipText = verificationResult.AllMessagesString;
            }
            else
            {
                verificationResult = WorkItemVerifier.VerifyTaskWithParentOnSameIteration(task, leadTask);
                if (verificationResult.Result != VerificationResult.Ok)
                {
                    idCell.SetColorByVerification(verificationResult.Result);
                    idCell.ToolTipText = verificationResult.AllMessagesString;
                }
            }

            var titleCell = taskRow.Cells[m_viewColumnsIndexes.TitleColumnIndex];
            titleCell.Value = task.Title;
            titleCell.ToolTipText = task.Discipline() + " " + task.Title;
            titleCell.Style.BackColor = priorityCell.Style.BackColor;

            var blockersCell = taskRow.Cells[m_viewColumnsIndexes.BlockersColumnIndex];
            if (blockerIds != null)
            {
                string blockerIdsStr = string.Join(",", blockerIds);
                blockersCell.Value = blockerIdsStr;

                verificationResult = WorkItemVerifier.VerifyNonChildBlockerExistance(blockerIds, siblings);
                if (verificationResult.Result == VerificationResult.Ok)
                    verificationResult = WorkItemVerifier.VerifyActiveTaskBlocking(task, blockerIds);
                if (verificationResult.Result == VerificationResult.Ok)
                {
                    blockerIdsStr = string.Join(Environment.NewLine, blockerIds.Select(b => data.WiDict[b].Title));
                    blockersCell.ToolTipText = blockerIdsStr;
                }
                else
                {
                    blockersCell.SetColorByVerification(verificationResult.Result);
                    blockersCell.ToolTipText = verificationResult.AllMessagesString;
                }
            }
            if (!string.IsNullOrEmpty(task.BlockingReason()))
            {
                if (!string.IsNullOrEmpty(blockersCell.ToolTipText))
                    blockersCell.ToolTipText += Environment.NewLine;
                else
                    blockersCell.Value = task.BlockingReason();
                blockersCell.ToolTipText += "Blocking Reason: " + task.BlockingReason();
            }

            var assignedCell = taskRow.Cells[m_viewColumnsIndexes.AssignedToColumnIndex];
            var comboBoxCell = assignedCell as DataGridViewComboBoxCell;
            if (comboBoxCell != null)
                comboBoxCell.DataSource = allUsers;
            assignedCell.Value = planningAssignments.GetAssignee(task);
            verificationResult = WorkItemVerifier.VerifyAssignation(task);
            if (verificationResult.Result != VerificationResult.Ok)
            {

                assignedCell.SetColorByVerification(verificationResult.Result);
                assignedCell.ToolTipText = verificationResult.AllMessagesString;
            }

            var workCell = taskRow.Cells[m_viewColumnsIndexes.WorkColumnIndex];
            workCell.Value = task.IsActive()
                ? task.Remaining()
                : task.Estimate();
            workCell.Style.BackColor = priorityCell.Style.BackColor;
        }
Example #5
0
        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;
        }
Example #6
0
        private static List<int> ProcessBlockers(
			DataGridView dgv,
			ViewFiltersBuilder viewFiltersBuilder,
			WorkItemInfoFiller workItemInfoFiller,
			ViewColumnsIndexes viewColumnsIndexes,
			FreeDaysCalculator freeDaysCalculator,
			FocusFactorCalculator focusFactorCalculator,
			DataContainer data,
			Dictionary<int, string> planningAssignments,
			List<string> allUsers,
			WorkItem task,
			List<WorkItem> childrenTasks,
			WorkItem leadTask,
			Dictionary<int, int> alreadyAdded,
			List<int> nextInds,
			Dictionary<string, int> tasksByUser,
			Dictionary<int, Tuple<int?, int>> tasksSchedule)
        {
            if (!data.BlockersDict.ContainsKey(task.Id))
                return null;

            var blockerIds = data.BlockersDict[task.Id];
            var blokers = blockerIds
                .Where(b => data.WiDict.ContainsKey(b))
                .Select(b => data.WiDict[b])
                .OrderBy(b => b.Priority())
                .ToList();
            foreach (var blocker in blokers)
            {
                if (alreadyAdded.ContainsKey(blocker.Id))
                {
                    nextInds.Add(alreadyAdded[blocker.Id]);
                    continue;
                }

                var blockerSiblingTask = childrenTasks.FirstOrDefault(t => t.Id == blocker.Id);
                if (blockerSiblingTask != null)
                {
                    int blockerNextInd = AddTaskRow(
                        dgv,
                        viewFiltersBuilder,
                        workItemInfoFiller,
                        viewColumnsIndexes,
                        freeDaysCalculator,
                        focusFactorCalculator,
                        blockerSiblingTask,
                        childrenTasks,
                        leadTask,
                        data,
                        planningAssignments,
                        allUsers,
                        alreadyAdded,
                        tasksByUser,
                        tasksSchedule);
                    nextInds.Add(blockerNextInd);
                }
            }

            return blockerIds;
        }
Example #7
0
        private static void AddBlockerRow(
			DataGridView dgv,
			ViewFiltersBuilder viewFiltersBuilder,
			WorkItemInfoFiller workItemInfoFiller,
			DataContainer data,
			Dictionary<int, string> planningAssignments,
			int blockerId)
        {
            dgv.Rows.Add(new DataGridViewRow());
            var blockerRow = dgv.Rows[dgv.Rows.Count - 1];
            WorkItem blocker = data.WiDict[blockerId];
            workItemInfoFiller.FillBlockerInfo(
                blockerRow,
                blocker,
                planningAssignments);
            viewFiltersBuilder.MarkBlockerRow(blockerRow);
        }