Пример #1
0
        private int GetCountNotWorkingDays(DateTime startDate, int dayMove, int calculatedNotWorkingDays = 0)
        {
            var endCheckPeriodDate = startDate + TimeSpan.FromDays(dayMove);

            var holidays = _notWorkingDayProvider.GetYearNotWorkingCalendarDays(startDate.Year);

            if (startDate.Year != endCheckPeriodDate.Year)
            {
                holidays.AddRange(_notWorkingDayProvider.GetYearNotWorkingCalendarDays(endCheckPeriodDate.Year));
            }

            var holidaysInPeriod      = holidays.Where(x => x.Day >= startDate && x.Day < startDate.AddDays(dayMove)).ToList();
            var holidaysCountInPeriod = holidaysInPeriod.Count;

            var totalNotWorkingDays = holidaysCountInPeriod + calculatedNotWorkingDays;

            if (holidaysCountInPeriod != 0)
            {
                return(GetCountNotWorkingDays(endCheckPeriodDate, holidaysCountInPeriod, totalNotWorkingDays));
            }

            return(totalNotWorkingDays);
        }
        public List <CalendarDay> GetYearNotWorkingCalendarDays(int year)
        {
            var policy = new CacheItemPolicy
            {
                AbsoluteExpiration = DateTimeOffset.Now.Add(_cacheExpirationTimeSpan)
            };

            List <CalendarDay> holidays;

            if (!_notWorkingDayByYearCache.Contains(year.ToString()))
            {
                holidays = _notWorkingDayProvider.GetYearNotWorkingCalendarDays(year);
                _notWorkingDayByYearCache.Set(year.ToString(), holidays, policy);
            }
            else
            {
                holidays = _notWorkingDayByYearCache[year.ToString()] as List <CalendarDay>;
            }

            return(holidays);
        }