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