/// <summary> /// any changes made here need to be mirrored in getcalendarscheduleForView /// </summary> /// <param name="id"></param> /// <param name="ownerEntity"></param> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <returns></returns> public static RDN.Portable.Classes.Controls.Calendar.Calendar GetCalendarSchedule(Guid id, CalendarOwnerEntityEnum ownerEntity, DateTime startDate, DateTime endDate, Guid memberId, bool isAttendanceManagerOrBetter) { RDN.Portable.Classes.Controls.Calendar.Calendar newCal = new RDN.Portable.Classes.Controls.Calendar.Calendar(); try { var dc = new ManagementContext(); var calDb = (from xx in dc.Calendar.Include("CalendarEventsReocurring").Include("CalendarEvents").Include("CalendarEvents.ReocurringEvent").Include("CalendarEvents.PointsForEvent") where xx.CalendarId == id select new { xx.IsCalendarInUTC, xx.TimeZone, Events = xx.CalendarEvents.Where(x => x.StartDate >= startDate && x.EndDate <= endDate && x.IsRemovedFromCalendar == false), FedOwners = xx.FederationOwners, LeagueOwners = xx.LeagueOwners, AllowSelfCheckIn = xx.AllowSelfCheckIn, xx.DisableBirthdaysFromShowing, xx.DisableStartSkatingDays, EventsReocurring = xx.CalendarEventsReocurring.Where(x => (x.EndReocurring >= startDate || x.EndReocurring == null) && x.StartReocurring <= endDate && x.IsRemovedFromCalendar == false), }).FirstOrDefault(); newCal.IsCalendarInUTC = calDb.IsCalendarInUTC; newCal.TimeZone = calDb.TimeZone; newCal.CalendarId = id; newCal.OwnerEntity = ownerEntity; newCal.AllowSelfCheckIn = calDb.AllowSelfCheckIn; newCal.DisableBirthdays = calDb.DisableBirthdaysFromShowing; newCal.DisableSkatingStartDates = calDb.DisableStartSkatingDays; if (ownerEntity == CalendarOwnerEntityEnum.federation) { foreach (var own in calDb.FedOwners) { CalendarOwner owner = new CalendarOwner(); owner.OwnerId = own.Federation.FederationId; owner.OwnerName = own.Federation.Name; newCal.EntityName = own.Federation.Name; newCal.Owners.Add(owner); } } else if (ownerEntity == CalendarOwnerEntityEnum.league) { foreach (var own in calDb.LeagueOwners) { CalendarOwner owner = new CalendarOwner(); owner.OwnerId = own.League.LeagueId; owner.OwnerName = own.League.Name; newCal.EntityName = own.League.Name; newCal.Owners.Add(owner); } } foreach (var ev in calDb.Events) { newCal.Events.Add(CalendarEventFactory.DisplayEvent(ev, memberId, isAttendanceManagerOrBetter)); } foreach (var ev in calDb.EventsReocurring) { //used so we can refresh the last day events were created.. // ev.LastDateEventsWereCreated = endDate.AddMonths(-1); if (ev.LastDateEventsWereCreated.GetValueOrDefault() < endDate) { var eventRe = dc.CalendarEventsReocurring.Where(x => x.CalendarItemId == ev.CalendarItemId && x.IsRemovedFromCalendar == false).FirstOrDefault(); eventRe.LastDateEventsWereCreated = endDate; eventRe.Calendar = eventRe.Calendar; dc.SaveChanges(); var aEvent = new CalendarViewEventJson() { id = ev.CalendarItemId, Title = ev.Name, Frequency = ev.FrequencyReocurring, DaysOfWeek = ev.DaysOfWeekReocurring, MonthlyInterval = ev.MonthlyIntervalReocurring }; var schedule = new Schedule(aEvent); var range = new DateRange() { StartDateTime = ev.StartReocurring }; //date is null if the event is never ending. if (ev.EndReocurring.HasValue) range.EndDateTime = ev.EndReocurring.Value; else range.EndDateTime = endDate.AddMonths(1); foreach (var date in schedule.Occurrences(range)) { CalendarEvent calEvent = new CalendarEvent(); Guid locationId = new Guid(); if (ev.Location != null) { calEvent.Location.LocationName = ev.Location.LocationName; locationId = ev.Location.LocationId; } calEvent.Name = ev.Name; calEvent.CalendarItemId = ev.CalendarItemId; if (eventRe.Color != null) { var c = Color.FromArgb(eventRe.Color.ColorIdCSharp); calEvent.ColorTempSelected = ColorTranslator.ToHtml(c); } if (!ev.IsInUTCTime) { calEvent.StartDate = new DateTime(date.Year, date.Month, date.Day, ev.StartDate.Hour, ev.StartDate.Minute, ev.StartDate.Second); calEvent.EndDate = new DateTime(date.Year, date.Month, date.Day, ev.EndDate.Hour, ev.EndDate.Minute, ev.EndDate.Second); } else { //we have to create a temp dates so we can add the timezone information without going back a day //if the time being used is on the border. //without the tempdates 1/4/2013 7pm turned into 1/3/2013 7pm because the timezones didn't account for the //fact the dates were already in utc. var startTempDate = new DateTime(date.Year, date.Month, date.Day, ev.StartDate.Hour, ev.StartDate.Minute, ev.StartDate.Second) + new TimeSpan(ev.Calendar.TimeZone, 0, 0); var endTempDate = new DateTime(date.Year, date.Month, date.Day, ev.EndDate.Hour, ev.EndDate.Minute, ev.EndDate.Second) + new TimeSpan(ev.Calendar.TimeZone, 0, 0); calEvent.StartDate = new DateTime(date.Year, date.Month, date.Day, startTempDate.Hour, startTempDate.Minute, startTempDate.Second); calEvent.EndDate = new DateTime(date.Year, date.Month, date.Day, endTempDate.Hour, endTempDate.Minute, endTempDate.Second); } calEvent.Notes = ev.Notes; calEvent.AllowSelfCheckIn = ev.AllowSelfCheckIn; //var evs = (from xx in newCal.Events // where xx.CalendarReoccurringId == ev.CalendarItemId // where xx.StartDate == calEvent.StartDate // where xx.EndDate == calEvent.EndDate // select xx).FirstOrDefault(); ////dirty bit to check if event was already in list. If it is, we don't add it. ////the date check here is to only create events within the calendar selected dates //if (evs == null && calEvent.StartDate >= startDate && calEvent.EndDate <= endDate) //{ // string colorHex = String.Empty; // if (ev.Color != null) // { // var c = Color.FromArgb(ev.Color.ColorIdCSharp); // colorHex = ColorTranslator.ToHtml(c); // } // Guid calItemId = CalendarEventFactory.CreateNewEvent(ev.Calendar.CalendarId, calEvent.StartDate, calEvent.EndDate, locationId, ev.Name, ev.Link, ev.Notes, ev.AllowSelfCheckIn, ev.IsPublic, true, calEvent.CalendarItemId, ev.EventType.CalendarEventTypeId, false, ev.TicketUrl, colorHex, new List<long>(), memberId); // calEvent.CalendarItemId = calItemId; // newCal.Events.Add(calEvent); //} } } } } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } return newCal; }
/// <summary> /// gets the public calendar of the league /// </summary> /// <param name="leagueId"></param> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <returns></returns> public static List<CalendarViewEventJson> GetPublicCalendarOfLeagueScheduleForView(Guid leagueId, DateTime startDate, DateTime endDate) { List<CalendarViewEventJson> events = new List<CalendarViewEventJson>(); try { var dc = new ManagementContext(); var calDb = (from xx in dc.CalendarLeagueOwners where xx.League.LeagueId == leagueId select new { Events = xx.Calendar.CalendarEvents.Where(x => x.StartDate >= startDate && x.EndDate <= endDate && x.IsRemovedFromCalendar == false && x.IsPublicEvent), EventsReocurring = xx.Calendar.CalendarEventsReocurring.Where(x => (x.EndReocurring >= startDate || x.EndReocurring == null) && x.StartReocurring <= endDate && x.IsRemovedFromCalendar == false && x.IsPublic), }).FirstOrDefault(); string baseUrl = VirtualPathUtility.ToAbsolute("~/roller-derby-event/"); if (calDb != null) { //adds all the events from the database that were in the date range selected. foreach (var ev in calDb.Events) { CalendarViewEventJson calEvent = new CalendarViewEventJson(); if (ev.Color != null) { var c = Color.FromArgb(ev.Color.ColorIdCSharp); calEvent.backColor = ColorTranslator.ToHtml(c); } calEvent.title = ev.Name; //removes length less than 14 chars //because the title is too long for the calendar display. if (ev.Name.Length > 10) calEvent.title = calEvent.title.Remove(10); calEvent.id = ev.CalendarItemId; if (ev.ReocurringEvent != null) calEvent.ReocurringId = ev.ReocurringEvent.CalendarItemId; calEvent.url = baseUrl + RDN.Utilities.Strings.StringExt.ToSearchEngineFriendly(ev.Name) + "/" + ev.CalendarItemId.ToString().Replace("-", ""); if (!ev.IsInUTCTime) { calEvent.start = ev.StartDate.ToString("o"); calEvent.end = ev.EndDate.ToString("o"); } else { calEvent.start = (ev.StartDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0)).ToString("o"); calEvent.end = (ev.EndDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0)).ToString("o"); } events.Add(calEvent); } foreach (var ev in calDb.EventsReocurring) { if (ev.LastDateEventsWereCreated.GetValueOrDefault() < endDate) { Guid locationId = new Guid(); if (ev.Location != null) { locationId = ev.Location.LocationId; } var aEvent = new CalendarViewEventJson() { id = ev.CalendarItemId, Title = ev.Name, Frequency = ev.FrequencyReocurring, DaysOfWeek = ev.DaysOfWeekReocurring, MonthlyInterval = ev.MonthlyIntervalReocurring }; var schedule = new Schedule(aEvent); var range = new DateRange() { StartDateTime = ev.StartReocurring }; //date is null if the event is never ending. if (ev.EndReocurring.HasValue) range.EndDateTime = ev.EndReocurring.Value; else range.EndDateTime = endDate.AddMonths(1); //iterates through all the events that were automatically generated from the calendar control //then creates a json view. and adds them to the list of events for the user. foreach (var date in schedule.Occurrences(range)) { CalendarViewEventJson calEvent = new CalendarViewEventJson(); if (ev.Color != null) { var c = Color.FromArgb(ev.Color.ColorIdCSharp); calEvent.backColor = ColorTranslator.ToHtml(c); } calEvent.title = ev.Name; if (ev.Name.Length > 10) calEvent.title.Remove(10); calEvent.id = ev.CalendarItemId; calEvent.url = baseUrl + RDN.Utilities.Strings.StringExt.ToSearchEngineFriendly(ev.Name) + "/" + ev.CalendarItemId.ToString().Replace("-", ""); if (!ev.IsInUTCTime) { calEvent.start = new DateTime(date.Year, date.Month, date.Day, ev.StartDate.Hour, ev.StartDate.Minute, ev.StartDate.Second).ToString("o"); calEvent.end = new DateTime(date.Year, date.Month, date.Day, ev.EndDate.Hour, ev.EndDate.Minute, ev.EndDate.Second).ToString("o"); calEvent.StartDate = new DateTime(date.Year, date.Month, date.Day, ev.StartDate.Hour, ev.StartDate.Minute, ev.StartDate.Second); calEvent.EndDate = new DateTime(date.Year, date.Month, date.Day, ev.EndDate.Hour, ev.EndDate.Minute, ev.EndDate.Second); } else { calEvent.StartDate = new DateTime(date.Year, date.Month, date.Day, ev.StartDate.Hour, ev.StartDate.Minute, ev.StartDate.Second); calEvent.EndDate = new DateTime(date.Year, date.Month, date.Day, ev.EndDate.Hour, ev.EndDate.Minute, ev.EndDate.Second); calEvent.start = (calEvent.StartDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0)).ToString("o"); calEvent.end = (calEvent.EndDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0)).ToString("o"); calEvent.StartDate = (calEvent.StartDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0)); calEvent.EndDate = (calEvent.EndDate + new TimeSpan(ev.Calendar.TimeZone, 0, 0)); } } } } } } catch (Exception exception) { ErrorDatabaseManager.AddException(exception, exception.GetType()); } return events; }