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