public virtual DateTimeCollection GetInstancesBetween(DateTime startDate, DateTime endDate) { var r = new Recurrence { StartDateTime = StartDate, Frequency = Frequency, CanOccurOnHoliday = CanOccurOnHolidays }; if (!RepeatsIndefinitely) { if (RecurUntil == null) { throw new ArgumentNullException(); } r.RecurUntil = (DateTime)RecurUntil; } if (IsOnWeekdays) { r.RecurEveryWeekday(); } else { r.Interval = Interval; } return(r.InstancesBetween(startDate, endDate)); }
public async Task <IActionResult> AddSchedule([Bind()] MasterSchedule schedule) { var employee = _context.Employees .FirstOrDefaultAsync(e => e.EmployeeId == schedule.EmployeeId); if (employee == null) { return(NotFound()); } if (ModelState.IsValid) { // TODO: Generate rrule here. var r = new Recurrence() { StartDateTime = schedule.StartDate, Frequency = (RecurFrequency)schedule.Frequency, CanOccurOnHoliday = schedule.CanOccurOnHolidays }; if (!schedule.RepeatsIndefinitely) { if (schedule.EndDate == null) { throw new ArgumentNullException(); } r.RecurUntil = (DateTime)schedule.EndDate; } if (schedule.IsOnWeekdays) { r.RecurEveryWeekday(); } else { r.Interval = schedule.Interval; } if (schedule.Frequency == RecurFrequency.Weekly) { r.ByDay.AddRange(schedule.Days .Select(day => (System.DayOfWeek)day)); if (schedule.Days.Count > 0) { foreach (var day in schedule.Days) { schedule.DaysOfWeek.Add(await _context.DaysOfWeek.FindAsync(day)); } } } _context.Add(schedule); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(ShowSchedules), new { EmployeeId = schedule.EmployeeId })); } return(View(schedule)); }