예제 #1
0
        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;
        }
예제 #2
0
        private static int? GetFinishDay(
			WorkItem task,
			Dictionary<int, string> planningAssignments,
			FocusFactorCalculator focusFactorCalculator,
			Dictionary<int, Tuple<int?, int>> scheduledTasksDict)
        {
            int? result = null;
            if (scheduledTasksDict.ContainsKey(task.Id))
            {
                var blockerSchedule = scheduledTasksDict[task.Id];
                if (blockerSchedule.Item1 != null)
                    result = blockerSchedule.Item1.Value + blockerSchedule.Item2;
            }
            else
            {
                double? remaining = task.IsProposed()
                    ? task.Estimate()
                    : task.Remaining();
                if (remaining != null)
                    result = focusFactorCalculator.CalculateDaysByTime(
                        remaining.Value,
                        planningAssignments.GetAssignee(task));
            }
            return result;
        }
예제 #3
0
        internal static int AddDatesActive(
			ViewColumnsIndexes viewColumnsIndexes,
			FreeDaysCalculator freeDaysCalculator,
			FocusFactorCalculator focusFactorCalculator,
			WorkItem workItem,
			DataGridViewRow row,
			int startInd,
			string user,
			string userMark)
        {
            var taskStart = workItem.StartDate();
            var taskFinish = workItem.FinishDate();
            DateTime today = DateTime.Now.Date;
            if (taskFinish == null || taskFinish.Value.Date < today)
            {
                if (taskFinish != null)
                    row.Cells[viewColumnsIndexes.FirstDateColumnIndex - 1].Value = taskFinish.Value.ToString("dd.MM");

                var verificationResult = WorkItemVerifier.VerifyFinishDate(workItem);
                row.Cells[viewColumnsIndexes.FirstDateColumnIndex - 1].SetColorByVerification(verificationResult.Result);
                row.Cells[viewColumnsIndexes.FirstDateColumnIndex - 1].ToolTipText = verificationResult.AllMessagesString;

                double? remaining = workItem.Remaining();
                if (remaining != null)
                {
                    var length = focusFactorCalculator.CalculateDaysByTime(remaining.Value, user);
                    return AddDates(
                        viewColumnsIndexes,
                        freeDaysCalculator,
                        row,
                        startInd,
                        length,
                        false,
                        user,
                        userMark);
                }
            }
            else if (taskStart.HasValue)
            {
                int maxInd = row.Cells.Count - viewColumnsIndexes.FirstDateColumnIndex - 1;
                var indStart = (int)taskStart.Value.Date.Subtract(today).TotalDays;
                if (indStart < 0)
                    row.Cells[viewColumnsIndexes.FirstDateColumnIndex - 1].Value = taskStart.Value.ToString("dd.MM");
                indStart = Math.Min(Math.Max(1, indStart), maxInd) + viewColumnsIndexes.FirstDateColumnIndex;

                var indFinish = (int)taskFinish.Value.Date.Subtract(today).TotalDays;
                indFinish = Math.Min(Math.Max(1, indFinish), maxInd) + viewColumnsIndexes.FirstDateColumnIndex;

                AddDates(
                    viewColumnsIndexes,
                    freeDaysCalculator,
                    row,
                    indStart,
                    indFinish - indStart + 1,
                    true,
                    user,
                    userMark);

                return indFinish + 1;
            }
            return viewColumnsIndexes.FirstDateColumnIndex;
        }
예제 #4
0
        private static int GetDaysCount(
			WorkItem task,
			string user,
			Dictionary<int, Tuple<int?, int>> scheduledTasksDict,
			FreeDaysCalculator freeDaysCalculator,
			FocusFactorCalculator focusFactorCalculator)
        {
            if (task.IsActive())
            {
                DateTime? finishDate = task.FinishDate();
                int finish = scheduledTasksDict.ContainsKey(task.Id)
                    ? scheduledTasksDict[task.Id].Item2
                    : (finishDate == null
                        ? 0
                        : freeDaysCalculator.GetDaysCount(finishDate.Value, user));
                double? remaining = task.Remaining();
                if (remaining != null && remaining > 0)
                {
                    int finishByRemaining = focusFactorCalculator.CalculateDaysByTime(remaining.Value, user);
                    if (finish < finishByRemaining)
                        finish = finishByRemaining;
                }
                return finish;
            }
            double? estimate = task.Estimate();
            return estimate == null
                ? 0
                : focusFactorCalculator.CalculateDaysByTime(estimate.Value, user);
        }
예제 #5
0
 private static double GetWork(WorkItem workItem)
 {
     if (workItem.State == WorkItemState.Active)
         return workItem.Remaining().Value;
     return workItem.Estimate() ?? 0;
 }