private void ShowDayName() { clockGrid.RepresentingDate = Date; dateNumber.DisplayText = _day.ToString(); dateNumber.IsDayOne = _day == 1; dayHeader.DisplayText = CalendarHelpers.DayOfWeek(CalendarHelpers.DayOfWeek(_year, _month, _day)).ToUpper(); }
private void weekView_OnSelectedChangedEvent(object sender, EventArgs e) { SelectedDate = ((SingleDay)sender).Date; ShowStatus(CalendarHelpers.Month(SelectedDate.Month).ToUpper() + " " + SelectedDate.Day.ToString() + ", " + SelectedDate.Year.ToString()); }
private void FocusDate(int d) { int beginningOfMonth = CalendarHelpers.DayOfWeek(_year, _month, 1); RadioButton button = grid.Children[9 + beginningOfMonth + d] as RadioButton; if (button.IsChecked == false) { _suppressCheck = true; button.IsChecked = true; } }
private void Resize_PreviewMouseMove(object sender, MouseEventArgs e) { if (Mouse.Captured == sender) { e.Handled = true; double zoom = Zoom(); Point mousePos = Mouse.GetPosition((IInputElement)sender); TimeSpan change = TimeSpan.FromDays((mousePos.Y - _mouseOffset.Y) / ((int)((int)(1056 * zoom) / 528) * 528)); if (sender == resizeTop) { DateTime start = _appointment.StartDate; start = start.Add(change); // "Snap-to-grid" feel if (Settings.SnapToGrid) { start = start.Date.Add(TimeSpan.FromHours(CalendarHelpers.SnappedHour(start.TimeOfDay.TotalHours, zoom))); } if (start > _appointment.EndDate) { start = _appointment.EndDate; } _appointment.StartDate = start; } else { DateTime end = _appointment.EndDate; end = end.Add(change); // "Snap-to-grid" feel if (Settings.SnapToGrid) { end = end.Date.Add(TimeSpan.FromHours(CalendarHelpers.SnappedHour(end.TimeOfDay.TotalHours, zoom))); } if (end < _appointment.StartDate) { end = _appointment.StartDate; } _appointment.EndDate = end; } _isResized = true; ParentLayout(); } }
private static string GetAppointmentName(Appointment appointment) { if (!appointment.IsRepeating) { return(appointment.Subject + " (" + CalendarHelpers.Month(appointment.StartDate.Month) + " " + appointment.StartDate.Day.ToString() + ", " + appointment.StartDate.Year.ToString() + ")"); } else { return(appointment.Subject + " (" + CalendarHelpers.Month(appointment.RepresentingDate.Month) + " " + appointment.RepresentingDate.Day.ToString() + ", " + appointment.RepresentingDate.Year.ToString() + ")"); } }
private bool CalculateRepeatWeek(DateTime date) { int _repeatDayInt = int.Parse(_day); if (_repeatDayInt == 0) { // Xth Day if (_week < 4) { return(_week + 1 == date.Day); } else { return(CalendarHelpers.DaysInMonth(date.Month, date.Year) == date.Day); } } else if (_repeatDayInt == 1) { // Xth Weekday if (date.DayOfWeek != DayOfWeek.Sunday && date.DayOfWeek != DayOfWeek.Saturday) { return(date.Day == CalendarHelpers.Weekday(date.Month, date.Year, _week + 1)); } } else if (_repeatDayInt == 2) { // Xth Weekend Day if (date.DayOfWeek == DayOfWeek.Sunday || date.DayOfWeek == DayOfWeek.Saturday) { return(date.Day == CalendarHelpers.WeekendDay(date.Month, date.Year, _week + 1)); } } else { // Xth Day of Week int dayOfWeek = CalendarHelpers.DayOfWeekNumber(date); return((int)date.DayOfWeek == _repeatDayInt - 3 && (dayOfWeek == _week + 1 || (_week == 4 && dayOfWeek == CalendarHelpers.NumberOfWeeks(date)))); } return(false); }
private void InitializeNewDisplay() { removeRecurrenceButton.IsEnabled = false; startDate.SelectedDate = _appointment.StartDate; int dow = CalendarHelpers.DayOfWeek(_appointment.StartDate.DayOfWeek); ((ToggleButton)weeklyGrid.Children[dow - 1]).IsChecked = true; yearlyRadio1Text1.Text = monthlyRadio1Text1.Text = _appointment.StartDate.Day.ToString(); yearlyRadio2Combo1.SelectedIndex = monthlyRadio2Combo1.SelectedIndex = CalendarHelpers.Week(_appointment.StartDate) - 1; yearlyRadio2Combo2.SelectedIndex = monthlyRadio2Combo2.SelectedIndex = CalendarHelpers.DayOfWeek(_appointment.StartDate.DayOfWeek) + 2; yearlyRadio1Combo1.SelectedIndex = yearlyRadio2Combo3.SelectedIndex = _appointment.StartDate.Month - 1; dailyRadio1Text1.Text = "1"; weeklyText1.Text = "1"; monthlyText1.Text = "1"; yearlyText1.Text = "1"; rangeRadio2Text1.Text = "10"; }
protected override void WriteFile(System.Web.HttpResponseBase response) { iCalendar iCal = new iCalendar(); foreach (Dinner d in this.Dinners) { try { Event e = CalendarHelpers.DinnerToEvent(d, iCal); iCal.Events.Add(e); } catch (ArgumentOutOfRangeException) { //Swallow folks that have dinners in 9999. } } iCalendarSerializer serializer = new iCalendarSerializer(iCal); string result = serializer.SerializeToString(); response.ContentEncoding = Encoding.UTF8; response.Write(result); }
public IActionResult ExportToGoogleCalendar(int workoutPlanId) { var events = CreateCalenderEvents(workoutPlanId); if (events == null) { return(BadRequest()); } var reminderList = CalendarHelpers.GetReminderList(); var service = CalendarHelpers.GetService(); foreach (var eventToAdd in events) { eventToAdd.Reminders = new Event.RemindersData { UseDefault = false, Overrides = reminderList }; service.Events.Insert(eventToAdd, "primary").Execute(); } return(RedirectToAction("Index", "WorkoutPlan")); }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { DateTime dt = ((DateTime)value).ToLocalTime(); return(dt.DayOfWeek + ", " + CalendarHelpers.Month(dt.Month) + " " + dt.Day + ", " + dt.Year); }
/// <summary> /// Set the recurrence on an appointment based on an RFC2445-formatted string. /// </summary> /// <param name="appt"></param> /// <param name="rValue"></param> public static void SetRecurrenceValues(this Appointment appt, string rValue) { if (string.IsNullOrWhiteSpace(rValue)) { appt.IsRepeating = false; return; } if (rValue == null || rValue.Length == 0) { appt.IsRepeating = false; return; } try { Dictionary <string, string> fields = Parser.Fields(rValue); if (fields.ContainsKey(DTSTART_VALUE_DATE)) { appt.StartDate = DateTime.ParseExact( fields[DTSTART_VALUE_DATE], DateFormat, CultureInfo.InvariantCulture ); appt.EndDate = DateTime.ParseExact( fields[DTEND_VALUE_DATE], DateFormat, CultureInfo.InvariantCulture ); appt.AllDay = true; } else { string tzid = fields[TZID]; if (fields.ContainsKey(DTSTART_TZID_PREFIX + tzid)) { TimeSpan offset = SplitTimeString( fields[CalendarHelpers.IsDst(DateTime.Now) ? TZOFFSETTO : TZOFFSETFROM] ); appt.StartDate = DateTime.ParseExact( fields[DTSTART_TZID_PREFIX + tzid], DateTimeLocalFormat, CultureInfo.InvariantCulture ).Subtract(offset).ToLocalTime(); appt.EndDate = DateTime.ParseExact( fields[DTEND_TZID_PREFIX + tzid], DateTimeLocalFormat, CultureInfo.InvariantCulture ).Subtract(offset).ToLocalTime(); } else { appt.StartDate = Parse(fields[DTSTART]); appt.EndDate = Parse(fields[DTEND]); } appt.AllDay = false; } string rrule = fields[RRULE]; RecurrencePattern pattern = new RecurrencePattern(rrule); appt.IsRepeating = true; Recurrence recur = appt.Recurrence; #region RepeatType switch (pattern.Frequency) { case FrequencyType.Daily: recur.Type = RepeatType.Daily; recur.Day = pattern.Interval.ToString(); break; case FrequencyType.Weekly: recur.Type = RepeatType.Weekly; recur.Week = pattern.Interval; if (pattern.ByDay == null) { recur.Day = "0123456"; } else { string r = ""; foreach (IWeekDay day in pattern.ByDay) { r += ((int)day.DayOfWeek).ToString(); } recur.Day = r; } break; case FrequencyType.Monthly: recur.Type = RepeatType.Monthly; recur.Month = pattern.Interval; if (pattern.ByMonthDay != null) { recur.Week = -1; recur.Day = pattern.ByMonthDay[0].ToString(); } else { recur.Week = pattern.ByDay[0].Offset; recur.Day = ((int)pattern.ByDay[0].DayOfWeek).ToString(); } break; case FrequencyType.Yearly: recur.Type = RepeatType.Yearly; recur.Year = pattern.Interval; if (pattern.ByDay == null) { recur.Week = -1; recur.Day = appt.StartDate.Day.ToString(); recur.Month = pattern.ByMonth != null ? pattern.ByMonth[0] : appt.StartDate.Month; } else { recur.Week = pattern.ByDay[0].Offset; recur.Day = ((int)pattern.ByDay[0].DayOfWeek).ToString(); recur.Month = pattern.ByMonth != null ? pattern.ByMonth[0] : appt.StartDate.Month; } break; default: // Unsupported recurrence type throw (new ArgumentException("Frequency of recurring appointment is not supported.")); } #endregion #region RepeatEnd if (pattern.Count.HasValue) { recur.End = RepeatEnd.Count; recur.EndCount = pattern.Count.Value; appt.CalculateRecurrenceEnd(); } else if (pattern.Until.HasValue) { recur.End = RepeatEnd.Date; recur.EndDate = pattern.Until.Value; } else { recur.End = RepeatEnd.None; } #endregion } catch { // Invalid recurrence pattern appt.IsRepeating = false; } }
public void EasterTest() { int earliestEaster = int.MaxValue; int latestEaster = int.MinValue; int earliestGoodFriday = int.MaxValue; int latestGoodFriday = int.MinValue; int earliestPalmSunday = int.MaxValue; int latestPalmSunday = int.MinValue; int earliestAshWednesday = int.MaxValue; int latestAshWednesday = int.MinValue; for (int i = 1; i <= 9999; i++) { DateTime easter = CalendarHelpers.Easter(i); if (easter.Month < earliestEaster) { earliestEaster = easter.Month; } else if (easter.Month > latestEaster) { latestEaster = easter.Month; } DateTime goodFriday = easter.AddDays(-2); if (goodFriday.Month < earliestGoodFriday) { earliestGoodFriday = goodFriday.Month; } else if (goodFriday.Month > latestGoodFriday) { latestGoodFriday = goodFriday.Month; } DateTime palmSunday = easter.AddDays(-7); if (palmSunday.Month < earliestPalmSunday) { earliestPalmSunday = palmSunday.Month; } else if (palmSunday.Month > latestPalmSunday) { latestPalmSunday = palmSunday.Month; } DateTime ashWednesday = easter.AddDays(-46); if (ashWednesday.Month < earliestAshWednesday) { earliestAshWednesday = ashWednesday.Month; } else if (ashWednesday.Month > latestAshWednesday) { latestAshWednesday = ashWednesday.Month; } } Console.WriteLine("Easter Sunday:\t" + CalendarHelpers.Month(earliestEaster) + " to " + CalendarHelpers.Month(latestEaster)); Console.WriteLine("Good Friday:\t" + CalendarHelpers.Month(earliestGoodFriday) + " to " + CalendarHelpers.Month(latestGoodFriday)); Console.WriteLine("Palm Sunday:\t" + CalendarHelpers.Month(earliestPalmSunday) + " to " + CalendarHelpers.Month(latestPalmSunday)); Console.WriteLine("Ash Wednesday:\t" + CalendarHelpers.Month(earliestAshWednesday) + " to " + CalendarHelpers.Month(latestAshWednesday)); }
private void InitializeLayout() { title.Text = CalendarHelpers.Month(_month) + " " + _year.ToString(); int beginningOfMonth = CalendarHelpers.DayOfWeek(_year, _month, 1); int daysInMonth = CalendarHelpers.DaysInMonth(_month, _year); int row = 2; int column = 0; int counter = 0; bool hasBegin = DisplayDateStart != null; bool hasEnd = DisplayDateEnd != null; // // Previous month // int prevMonth = _month > 1 ? _month - 1 : 12; int prevYear = _month > 1 ? _year : _year - 1; int daysLastMonth = CalendarHelpers.DaysInMonth(prevMonth, prevYear); for (int i = beginningOfMonth - 2; i >= 0; i--) { RadioButton text = new RadioButton(); text.Style = FindResource("DateButton") as Style; text.Opacity = 0.5; text.Content = (daysLastMonth - i).ToString(); DateTime dt = new DateTime(prevYear, prevMonth, daysLastMonth - i); if (!hasEnd || (DateTime)DisplayDateEnd >= dt) { if (!hasBegin || (DateTime)DisplayDateStart <= dt) { text.Tag = dt; text.Checked += text_Checked; text.MouseDoubleClick += text_MouseDoubleClick; } else { text.IsEnabled = false; } } else { text.IsEnabled = false; } Grid.SetRow(text, row); Grid.SetColumn(text, column); grid.Children.Add(text); if (column < 6) { column++; } else { column = 0; row++; } counter++; } // // This month // for (int i = 1; i <= daysInMonth; i++) { RadioButton text = new RadioButton(); text.Style = FindResource("DateButton") as Style; text.Content = i.ToString(); DateTime dt = new DateTime(_year, _month, i); InitRadioButton(hasBegin, hasEnd, dt, text, ref row, ref column); counter++; } // // Next month // int nextMonth = _month < 12 ? _month + 1 : 1; int nextYear = _month < 12 ? _year : _year + 1; for (int i = 1; i <= 42 - counter; i++) { RadioButton text = new RadioButton(); text.Style = FindResource("DateButton") as Style; text.Opacity = 0.5; text.Content = i.ToString(); DateTime dt = new DateTime(nextYear, nextMonth, i); InitRadioButton(hasBegin, hasEnd, dt, text, ref row, ref column); } }
/// <summary> /// Check if the current appointment recurrence pattern will overlap a certain day. /// </summary> /// <param name="date"></param> /// <param name="start"></param> /// <returns></returns> private bool?occursOnDate(DateTime date, DateTime start, out DateTime?representingDate) { representingDate = null; if (_skip != null && Array.IndexOf(_skip, date) != -1) { return(false); } if (date < start) { return(false); } if (_end != RepeatEnd.None) { if (date > _endDate) { return(false); } } switch (_type) { case RepeatType.Daily: { if (_day == "-1") { if (date.DayOfWeek != DayOfWeek.Sunday && date.DayOfWeek != DayOfWeek.Saturday) { representingDate = date; return(true); } } else if (date.Subtract(start).Days % int.Parse(_day) == 0) { representingDate = date; return(true); } } break; case RepeatType.Weekly: { if (_day.Contains(((int)date.DayOfWeek).ToString())) { // Normalize to beginning of week. DateTime startSunday = CalendarHelpers.FirstDayOfWeek(start); DateTime dateSunday = CalendarHelpers.FirstDayOfWeek(date); if ((dateSunday.Subtract(startSunday).Days / 7) % _week == 0) { representingDate = date; return(true); } } } break; case RepeatType.Monthly: { int _repeatDayInt = int.Parse(_day); if (_week == -1) { if (date.Day == _repeatDayInt && CalendarHelpers.CalculateMonthDifference(start, date) % _month == 0) { representingDate = date; return(true); } } else { if (CalendarHelpers.CalculateMonthDifference(start, date) % _month == 0) { if (CalculateRepeatWeek(date)) { representingDate = date; return(true); } } } } break; case RepeatType.Yearly: { if ((date.Year - start.Year) % _year == 0 && date.Month == _month + 1) { int _repeatDayInt = int.Parse(_day); if (_week == -1) { if (date.Day == _repeatDayInt || // If a recurring appointment was set for Feb. 29, display as // Feb. 28 for non-leap years. (date.Month == 2 && date.Day == 28 && _repeatDayInt == 29 && !CalendarHelpers.IsLeapYear(date.Year))) { representingDate = date; return(true); } } else if (CalculateRepeatWeek(date)) { representingDate = date; return(true); } } } break; } return(null); }
/// <summary> /// Gets a friendly name for the recurrence data. /// </summary> /// <returns></returns> public override string ToString() { string data = ""; switch (_type) { case RepeatType.Daily: data += "every "; switch (_day) { case "-1": data += "weekday"; break; case "1": data += "day"; break; case "2": data += "other day"; break; default: data += _day + " days"; break; } break; case RepeatType.Weekly: data += "every "; switch (_week) { case 1: break; case 2: data += "other "; break; default: data += _week.ToString() + " weeks on "; break; } data += Join <DayOfWeek>(Array.ConvertAll <char, DayOfWeek>(_day.ToCharArray(), StringToDayOfWeek)); break; case RepeatType.Monthly: if (_week == -1) { data += "day " + _day + " of every "; } else { data += "the " + OrdinalWeek(_week) + " " + StringToDayOfWeek(_day[0]).ToString() + " of every "; } switch (_month) { case 1: data += "month"; break; case 2: data += "other month"; break; default: data += _month.ToString() + " months"; break; } break; case RepeatType.Yearly: switch (_year) { case 1: break; case 2: data += "every other year on "; break; default: data += "every " + _year.ToString() + " years on "; break; } if (_week == -1) { data += CalendarHelpers.Month(_month) + " " + _day; } else { data += "the " + OrdinalWeek(_week) + " " + StringToDayOfWeek(_day[0]).ToString() + " of " + CalendarHelpers.Month(_month); } break; } if (_end == RepeatEnd.Count) { data += " for " + _endCount.ToString() + " occurrences"; } else if (_end == RepeatEnd.Date) { data += " until " + _endDate.ToString("MMMM d, yyyy"); } if (_skip != null) { data += ", skipping " + Join <DateTime>(_skip); } return(data); }