/// <summary> /// Gets the calendar content from controls. /// </summary> /// <returns></returns> internal string GetCalendarContentFromControls() { EnsureChildControls(); if ( _dpStartDateTime.SelectedDateTimeIsBlank ) { return iCalendarContentEmptyEvent; } DDay.iCal.Event calendarEvent = new DDay.iCal.Event(); calendarEvent.DTStart = new DDay.iCal.iCalDateTime( _dpStartDateTime.SelectedDateTime.Value ); calendarEvent.DTStart.HasTime = true; int durationHours = TextBoxToPositiveInteger( _tbDurationHours, 0 ); int durationMins = TextBoxToPositiveInteger( _tbDurationMinutes, 0 ); if ( (durationHours == 0 && durationMins == 0) || this.ShowDuration == false ) { // make a one second duration since a zero duration won't be included in occurrences calendarEvent.Duration = new TimeSpan( 0, 0, 1); } else { calendarEvent.Duration = new TimeSpan( durationHours, durationMins, 0 ); } if ( _radRecurring.Checked ) { if ( _radSpecificDates.Checked ) { #region specific dates PeriodList recurrenceDates = new PeriodList(); List<string> dateStringList = _hfSpecificDateListValues.Value.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries ).ToList(); foreach ( var dateString in dateStringList ) { DateTime newDate; if ( DateTime.TryParse( dateString, out newDate ) ) { recurrenceDates.Add( new iCalDateTime( newDate.Date ) ); } } calendarEvent.RecurrenceDates.Add( recurrenceDates ); #endregion } else { if ( _radDaily.Checked ) { #region daily if ( _radDailyEveryXDays.Checked ) { RecurrencePattern rruleDaily = new RecurrencePattern( FrequencyType.Daily ); rruleDaily.Interval = TextBoxToPositiveInteger( _tbDailyEveryXDays ); calendarEvent.RecurrenceRules.Add( rruleDaily ); } else { // NOTE: Daily Every Weekday/Weekend Day is actually Weekly on Day(s)OfWeek in iCal RecurrencePattern rruleWeekly = new RecurrencePattern( FrequencyType.Weekly ); if ( _radDailyEveryWeekday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Monday ) ); rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Tuesday ) ); rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Wednesday ) ); rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Thursday ) ); rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Friday ) ); } else if ( _radDailyEveryWeekendDay.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Saturday ) ); rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Sunday ) ); } calendarEvent.RecurrenceRules.Add( rruleWeekly ); } #endregion } else if ( _radWeekly.Checked ) { #region weekly RecurrencePattern rruleWeekly = new RecurrencePattern( FrequencyType.Weekly ); rruleWeekly.Interval = TextBoxToPositiveInteger( _tbWeeklyEveryX ); if ( _cbWeeklySunday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Sunday ) ); } if ( _cbWeeklyMonday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Monday ) ); } if ( _cbWeeklyTuesday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Tuesday ) ); } if ( _cbWeeklyWednesday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Wednesday ) ); } if ( _cbWeeklyThursday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Thursday ) ); } if ( _cbWeeklyFriday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Friday ) ); } if ( _cbWeeklySaturday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Saturday ) ); } calendarEvent.RecurrenceRules.Add( rruleWeekly ); #endregion } else if ( _radMonthly.Checked ) { #region monthly RecurrencePattern rruleMonthly = new RecurrencePattern( FrequencyType.Monthly ); if ( _radMonthlyDayX.Checked ) { rruleMonthly.ByMonthDay.Add( TextBoxToPositiveInteger( _tbMonthlyDayX ) ); rruleMonthly.Interval = TextBoxToPositiveInteger( _tbMonthlyXMonths ); } else if ( _radMonthlyNth.Checked ) { WeekDay monthWeekDay = new WeekDay(); monthWeekDay.Offset = _ddlMonthlyNth.SelectedValue.AsIntegerOrNull() ?? 1; monthWeekDay.DayOfWeek = (DayOfWeek)( _ddlMonthlyDayName.SelectedValue.AsIntegerOrNull() ?? 1 ); rruleMonthly.ByDay.Add( monthWeekDay ); } calendarEvent.RecurrenceRules.Add( rruleMonthly ); #endregion } } } if ( calendarEvent.RecurrenceRules.Count > 0 ) { IRecurrencePattern rrule = calendarEvent.RecurrenceRules[0]; // Continue Until if ( _radEndByNone.Checked ) { // intentionally blank } else if ( _radEndByDate.Checked ) { rrule.Until = _dpEndBy.SelectedDate.HasValue ? _dpEndBy.SelectedDate.Value : DateTime.MaxValue; } else if ( _radEndByOccurrenceCount.Checked ) { rrule.Count = TextBoxToPositiveInteger( _tbEndByOccurrenceCount, 0 ); } } // Exclusions List<string> dateRangeStringList = _hfExclusionDateRangeListValues.Value.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries ).ToList(); PeriodList exceptionDates = new PeriodList(); foreach ( string dateRangeString in dateRangeStringList ) { var dateRangeParts = dateRangeString.Split( new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries ); if ( dateRangeParts.Count() == 2 ) { DateTime beginDate; DateTime endDate; if ( DateTime.TryParse( dateRangeParts[0], out beginDate ) ) { if ( DateTime.TryParse( dateRangeParts[1], out endDate ) ) { DateTime dateToAdd = beginDate.Date; while ( dateToAdd <= endDate ) { Period periodToAdd = new Period( new iCalDateTime( dateToAdd ) ); if ( !exceptionDates.Contains( periodToAdd ) ) { exceptionDates.Add( periodToAdd ); } dateToAdd = dateToAdd.AddDays( 1 ); } } } } } if ( exceptionDates.Count > 0 ) { calendarEvent.ExceptionDates.Add( exceptionDates ); } DDay.iCal.iCalendar calendar = new iCalendar(); calendar.Events.Add( calendarEvent ); iCalendarSerializer s = new iCalendarSerializer( calendar ); return s.SerializeToString( calendar ); }
public ActionResult DeleteConfirmed(int id, string RemoveInstance, string StartDate, string EndDate) { GroupInstance groupinstance = db.GroupInstances.Find(id); if (!String.IsNullOrEmpty(RemoveInstance)) { if (Convert.ToBoolean(RemoveInstance) == false) { db.GroupInstances.Remove(groupinstance); } else { iCalendarSerializer serializer = new iCalendarSerializer(); iCalendarCollection icalCollection = new iCalendarCollection(); using (TextReader tr = new StringReader(groupinstance.RecurrenceRule)) { icalCollection = (iCalendarCollection)serializer.Deserialize(tr); } Event ev = new Event(); if (icalCollection.Count == 0) { RecurrencePattern rp = new RecurrencePattern(groupinstance.RecurrenceRule); ev.RecurrenceRules.Add(rp); } else { ev = (Event)icalCollection.First().Events.First(); } PeriodList pl = new PeriodList(); if (ev.ExceptionDates.Count > 0) { pl.AddRange(ev.ExceptionDates.First()); } var sd = Convert.ToDateTime(StartDate); var time = new iCalDateTime(sd); pl.Add(time); ev.ExceptionDates.Add(pl); iCalendar ical = new iCalendar(); ical.Events.Add(ev); serializer = new iCalendarSerializer(ical); groupinstance.RecurrenceRule = serializer.SerializeToString(ical); db.Entry(groupinstance).State = EntityState.Modified; } db.SaveChanges(); } else { db.GroupInstances.Remove(groupinstance); db.SaveChanges(); } return Content(Boolean.TrueString); }