internal static WorkItemVerificationResult VerifyFinishDate(WorkItem workItem) { DateTime? finishDate = workItem.FinishDate(); if (finishDate == null || finishDate.Value.Date >= DateTime.Now.Date) return new WorkItemVerificationResult {Result = VerificationResult.Ok}; return new WorkItemVerificationResult { Result = workItem.Type.Name == WorkItemType.LeadTask ? VerificationResult.Error : VerificationResult.Warning, Messages = new List<string>(1) {Messages.ExpiredFd()}, }; }
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; }
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); }
internal static int AddDatesProposed( ViewColumnsIndexes viewColumnsIndexes, FreeDaysCalculator freeDaysCalculator, FocusFactorCalculator focusFactorCalculator, WorkItem task, DataGridViewRow taskRow, int startInd, string user, string userMark, bool shouldCheckEstimate) { var verificationResult = WorkItemVerifier.VerifyEstimatePresence(task); if (verificationResult.Result != VerificationResult.Ok) { if (shouldCheckEstimate) { var estimateCell = taskRow.Cells[viewColumnsIndexes.FirstDateColumnIndex - 1]; estimateCell.SetColorByVerification(verificationResult.Result); estimateCell.ToolTipText = verificationResult.AllMessagesString; } return viewColumnsIndexes.FirstDateColumnIndex; } double? estimate = task.Estimate(); var length = focusFactorCalculator.CalculateDaysByTime(estimate.Value, user); DateTime? finish = task.FinishDate(); if (finish != null) { verificationResult = WorkItemVerifier.VerifyFinishDate(task); var estimateCell = taskRow.Cells[viewColumnsIndexes.FirstDateColumnIndex - 1]; estimateCell.SetColorByVerification(verificationResult.Result); estimateCell.ToolTipText = verificationResult.AllMessagesString; estimateCell.Value = finish.Value.ToString("dd.MM"); int finishShift = length - 1; DateTime startDate = finish.Value.Date; DateTime today = DateTime.Now.Date; while (finishShift > 0 && startDate >= today) { startDate = startDate.AddDays(-1); if (freeDaysCalculator.GetDayType(startDate, user) == DayType.WorkDay) --finishShift; } if (finishShift == 0) { var startShift = (int) startDate.Subtract(today).TotalDays; startInd = Math.Max(startInd, startShift + viewColumnsIndexes.FirstDateColumnIndex); } else { length -= finishShift; } } return AddDates( viewColumnsIndexes, freeDaysCalculator, taskRow, startInd, length, false, user, userMark); }