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