public FormulaWorkedPeriodHierObject(int tiId, DateTime dtStart, DateTime dtEnd, enumTimeDiscreteType discreteType, string timeZoneId, IMyListConverters MyListConverters, IDateTimeExtensions dateTimeExtensions, IGetNotWorkedPeriodService _iGetNotWorkedPeriodService) { TiId = tiId; DiscreteType = discreteType; //Здесь запрашиваем и считаем количество отработанных часов var workedPeriods = _iGetNotWorkedPeriodService.GetNotWorkedPeriods(new List <int> { tiId }, dateTimeExtensions.ClientToServer(dtStart, timeZoneId), dateTimeExtensions.ClientToServer(dtEnd, timeZoneId)); HoursByHalfhourNumber = new Dictionary <DateTime, double>(); //Считаем отработанные часы if (discreteType == enumTimeDiscreteType.DBInterval) { HoursByHalfhourNumber.Add(dtStart, CalculateNumberWorkedHours(dtStart, dtEnd, workedPeriods, timeZoneId, MyListConverters)); } else { var dts = MyListConverters.GetDateTimeListForPeriod(dtStart, dtEnd, discreteType, timeZoneId.GeTimeZoneInfoById()); for (var i = 0; i < dts.Count; i++) { var dt = dts[i]; var dte = i < dts.Count - 1 ? dts[i + 1].AddMinutes(-30) : dtEnd; HoursByHalfhourNumber.Add(dt, CalculateNumberWorkedHours(dt, dte, workedPeriods, timeZoneId, MyListConverters)); } } }