示例#1
0
 private void ShowDayName()
 {
     clockGrid.RepresentingDate = Date;
     dateNumber.DisplayText     = _day.ToString();
     dateNumber.IsDayOne        = _day == 1;
     dayHeader.DisplayText      = CalendarHelpers.DayOfWeek(CalendarHelpers.DayOfWeek(_year, _month, _day)).ToUpper();
 }
示例#2
0
        private void weekView_OnSelectedChangedEvent(object sender, EventArgs e)
        {
            SelectedDate = ((SingleDay)sender).Date;

            ShowStatus(CalendarHelpers.Month(SelectedDate.Month).ToUpper()
                       + " " + SelectedDate.Day.ToString() + ", " + SelectedDate.Year.ToString());
        }
示例#3
0
        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;
            }
        }
示例#4
0
        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();
            }
        }
示例#5
0
 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() + ")");
     }
 }
示例#6
0
        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);
        }
示例#7
0
        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";
        }
示例#8
0
        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"));
        }
示例#10
0
        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);
        }
示例#11
0
        /// <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));
        }
示例#13
0
        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);
            }
        }
示例#14
0
        /// <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);
        }
示例#15
0
        /// <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);
        }