using System;
using System.Collections.Generic;
using System.Globalization;
namespace Scheduler.Data {
public static partial class RecurringAppointmentCollection {
public static List<RecurringAppointment> GetAppointments() {
DateTime date = DateTimeUtils.GetBeginOfMonth(DateTime.Now);
date = DateTimeUtils.GetWeekStart(date);
return new List<RecurringAppointment>() {
new RecurringAppointment {
AppointmentType = 1,
Caption = "Watercolor Landscape",
Label = 5,
StartDate = date + (new TimeSpan(2, 9, 30, 0)),
EndDate = date + (new TimeSpan(2, 11, 0, 0)),
Recurrence = string.Format("<RecurrenceInfo Start=\"{0}\" End=\"{1}\" WeekDays=\"36\" Id=\"04dcc127-df56-49d7-baff-ce4b6264addd\" OccurrenceCount=\"10\" Range=\"1\" Type=\"1\" />", ToString(date + (new TimeSpan(2, 9, 30, 0))), ToString(date + (new TimeSpan(2, 11, 0, 0))))
},
new RecurringAppointment {
AppointmentType = 1,
Caption = "Oil Painting for Beginners",
Label = 2,
StartDate = date + (new TimeSpan(1, 9, 30, 0)),
EndDate = date + (new TimeSpan(1, 11, 0, 0)),
Recurrence = string.Format("<RecurrenceInfo Start=\"{0}\" End=\"{1}\" WeekDays=\"18\" Id=\"72e3db8f-cdb6-4aaa-afe1-e3c6b80ce99e\" OccurrenceCount=\"10\" Range=\"1\" Type=\"1\" />", ToString(date + (new TimeSpan(1, 9, 30, 0))), ToString(date + (new TimeSpan(1, 11, 0, 0))))
},
new RecurringAppointment {
AppointmentType = 1,
Caption = "Testing",
Label = 8,
StartDate = date + (new TimeSpan(1, 12, 0, 0)),
EndDate = date + (new TimeSpan(1, 13, 0, 0)),
Recurrence = string.Format("<RecurrenceInfo Start=\"{0}\" End=\"{1}\" WeekDays=\"2\" Id=\"15129fd3-9eb0-4861-8c43-c61844137f17\" OccurrenceCount=\"2\" Frequency=\"2\" Range=\"1\" Type=\"1\" />", ToString(date + (new TimeSpan(1, 12, 0, 0))), ToString(date + (new TimeSpan(1, 13, 0, 0))))
},
new RecurringAppointment {
AppointmentType = 1,
Caption = "Meeting of Instructors",
Label = 1,
StartDate = date + (new TimeSpan(1, 9, 0, 0)),
EndDate = date + (new TimeSpan(1, 9, 15, 0)),
Recurrence = string.Format("<RecurrenceInfo Start=\"{0}\" End=\"{1}\" WeekDays=\"62\" Id=\"6de79b21-6b16-4dea-9736-c500058ec858\" OccurrenceCount=\"25\" Range=\"1\" />", ToString(date + (new TimeSpan(1, 9, 0, 0))), ToString(date + (new TimeSpan(1, 9, 15, 0))))
},
new RecurringAppointment {
AppointmentType = 1,
Caption = "Monthly Planning",
Label = 1,
StartDate = date + (new TimeSpan(3, 14, 30, 0)),
EndDate = date + (new TimeSpan(3, 15, 45, 0)),
Recurrence = string.Format("<RecurrenceInfo Start=\"{0}\" End=\"{1}\" DayNumber=\"24\" WeekOfMonth=\"0\" Id=\"cd9da802-d166-47d1-a8df-1101fcc50d53\" OccurrenceCount=\"2\" Range=\"1\" Type=\"2\" />", ToString(date + (new TimeSpan(3, 14, 30, 0))), ToString(date + (new TimeSpan(3, 15, 45, 0))))
},
new RecurringAppointment {
AppointmentType = 1,
Caption = "Annual Open Day",
Label = 6,
StartDate = date + (new TimeSpan(27, 9, 30, 0)),
EndDate = date + (new TimeSpan(27, 13, 0, 0)),
Recurrence = string.Format("<RecurrenceInfo Start=\"{0}\" Month=\"{1}\" DayNumber=\"{2}\" WeekOfMonth=\"0\" Id=\"bd5dc726-0fa6-4965-99e0-bf69063218e6\" Type=\"3\" />", ToString(date + (new TimeSpan(27, 9, 30, 0))), (date + (new TimeSpan(27, 9, 30, 0))).Month, (date + (new TimeSpan(27, 9, 30, 0))).Day)
}
};
}
private static string ToString(DateTime dateTime) {
return dateTime.ToString(CultureInfo.InvariantCulture);
}
public static class DateTimeUtils {
public static DateTime GetWeekStart(DateTime date) {
return date.DayOfWeek == DayOfWeek.Sunday ? ValidWeekStart(date.Date) : ValidWeekStart(date.Date - CreateWeekOffset(date, DayOfWeek.Sunday));
}
public static DateTime GetBeginOfMonth(DateTime date) {
return new DateTime(date.Year, date.Month, 1);
}
static DateTime ValidWeekStart(DateTime date) {
TimeSpan weekSpan = new TimeSpan(7, 0, 0, 0);
DateTime baseDate = date.Date;
if(DateTime.MaxValue - date < weekSpan)
return baseDate - weekSpan;
return baseDate;
}
static TimeSpan CreateWeekOffset(DateTime date, DayOfWeek firstDayOfWeek) {
int offset = (date.DayOfWeek + 7 - firstDayOfWeek) % 7;
TimeSpan result = TimeSpan.FromDays(offset);
if(date.Ticks < result.Ticks)
result = TimeSpan.FromDays(offset - 7);
return result;
}
}
}
}