private List <object> BuildCalendarObjects(ScheduleViewModel scheduleViewModel, DateRange calendarRange) { var calendarObjects = new List <object>(); // if frequency is none then this is a one-time only event if (scheduleViewModel.FrequencyTypeOptions.Equals(FrequencyType.None)) { return(BuildCalendarObjects(scheduleViewModel)); } var schedule = scheduleViewModel.BuildSchedule(); // use the calendar start date or the schedule start date whichever is later var start = (scheduleViewModel.StartDate > calendarRange.StartDateTime) ? scheduleViewModel.StartDate : calendarRange.StartDateTime; // use the calendar end date or the schedule end date whichever is earlier var end = (scheduleViewModel.EndDate < calendarRange.EndDateTime) ? scheduleViewModel.EndDate.Value : calendarRange.EndDateTime; var scheduleDateRange = new DateRange(start, end); // let ScheduleWidget calculate the schedule dates for us and // add each date to the payload for the javascript calendar foreach (var date in schedule.Occurrences(scheduleDateRange)) { calendarObjects.Add(new { id = scheduleViewModel.ID, title = scheduleViewModel.Title, start = date + scheduleViewModel.StartTime, end = date + scheduleViewModel.EndTime, url = Url.Action("ScheduleOccurrence", "Example", new { id = scheduleViewModel.ID, occurrenceDate = date }), allDay = false }); } return(calendarObjects); }