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; }